Sitecore.Security.AntiCsrf 有什么作用,我可以在我的内容分发服务器上禁用它吗
What does the Sitecore.Security.AntiCsrf do and can I disable it on my Content delivery server
我们目前遇到一个问题,当操作中抛出异常时,某些 ajax 对异步控制器操作的请求会挂起。
通过当前正在执行的请求查看可以看到以下信息
<REQUEST REQUEST.NAME="c500100080026ded" Url="/url" Verb="GET" Stage="SendResponse" Module="SitecoreAntiCSRF" Time="1602531" SITE.ID="2" WP.NAME="14268" APPPOOL.NAME="AppPool" />
Content Delivery 服务器是否需要该模块?我可以完全删除它吗?如果我这样做会有什么影响?
sitecore 版本:8 Update-5
AntiCSRF 模块根据表单字段值验证 cookie 值(Guid)。如果您的 API 调用不包含这两个,那么该模块将引发错误。有趣的是,实际值是多少似乎并不重要。
模块本身会注入 Guid::ToString("D")
但检查不会尝试将其解析回 Guid,或确定它是否是正确的 Guid。不确定反 CSRF 检查有多好,但除此之外,唯一的实际要求是请求有效负载中的表单字段名称必须匹配 <AntiCsrf />
元素的 @formFieldName
属性,并且cookie 名称必须匹配 @cookieName
.
的值
您提到您尝试添加忽略规则 - 这是为您的用例禁用功能的适当方法。我会努力做到这一点——很可能是规则设计不当(或者关于规则测试对象的假设不正确)。以下是格式正确的块的示例。
<rule name="WFFM">
<urlPrefix>/sitecore/shell</urlPrefix>
<ignore wildcard="/sitecore/shell/Applications/Modules/Web Forms for Marketers/Form Reports*\?*Cart_*_Items_Callback=yes"/>
<ignore wildcard="/sitecore/shell/~/xaml/Sitecore.Forms.Shell.UI.Dialogs.LookupRecords.aspx*"/>
<ignore wildcard="/sitecore/shell/~/xaml/Sitecore.Forms.Shell.UI.Dialogs.ListItemsEditor.aspx*"/>
</rule>
请注意,@wildcard
规则作为带 IgnoreCase 的正则表达式执行。您也可以使用 @contains
。这些值以及 <urlPrefix>
不应包含方案,虽然 <urlPrefix>
是启用后续匹配规则所必需的,但它本身是不够的。
您可以做的另一件事是将 @detectionResult
值设置为 RaiseException
并将您的 Sitecore 日志记录至少设置为 WARN
以便您可以看到在Sitecore 日志 - 这些可以帮助您识别失败的检查部分。模块中的实际日志记录不是很好,所以恐怕您不会从 DEBUG
日志记录中获得太多好处。
该模块旨在保护 WebForms 免受 CSRF 攻击。
默认情况下,它配置为仅保护 Sitecore 接口 (Sitecore shell)。但是,它支持配置并且可以启用以保护前端解决方案。
由于 Sitecore shell 站点在内容交付服务器上被禁用,因此可以安全地禁用或完全删除该模块,而不会产生任何影响。
如果您在 Content Delivery 服务器上启用了 Sitecore 后端,则可以将模块配置为跳过对某些特定位置的处理请求。只需将节点添加到 Sitecore.AntiCsrf.config 文件并指定 url 进行筛选。
我们目前遇到一个问题,当操作中抛出异常时,某些 ajax 对异步控制器操作的请求会挂起。
通过当前正在执行的请求查看可以看到以下信息
<REQUEST REQUEST.NAME="c500100080026ded" Url="/url" Verb="GET" Stage="SendResponse" Module="SitecoreAntiCSRF" Time="1602531" SITE.ID="2" WP.NAME="14268" APPPOOL.NAME="AppPool" />
Content Delivery 服务器是否需要该模块?我可以完全删除它吗?如果我这样做会有什么影响?
sitecore 版本:8 Update-5
AntiCSRF 模块根据表单字段值验证 cookie 值(Guid)。如果您的 API 调用不包含这两个,那么该模块将引发错误。有趣的是,实际值是多少似乎并不重要。
模块本身会注入 Guid::ToString("D")
但检查不会尝试将其解析回 Guid,或确定它是否是正确的 Guid。不确定反 CSRF 检查有多好,但除此之外,唯一的实际要求是请求有效负载中的表单字段名称必须匹配 <AntiCsrf />
元素的 @formFieldName
属性,并且cookie 名称必须匹配 @cookieName
.
您提到您尝试添加忽略规则 - 这是为您的用例禁用功能的适当方法。我会努力做到这一点——很可能是规则设计不当(或者关于规则测试对象的假设不正确)。以下是格式正确的块的示例。
<rule name="WFFM">
<urlPrefix>/sitecore/shell</urlPrefix>
<ignore wildcard="/sitecore/shell/Applications/Modules/Web Forms for Marketers/Form Reports*\?*Cart_*_Items_Callback=yes"/>
<ignore wildcard="/sitecore/shell/~/xaml/Sitecore.Forms.Shell.UI.Dialogs.LookupRecords.aspx*"/>
<ignore wildcard="/sitecore/shell/~/xaml/Sitecore.Forms.Shell.UI.Dialogs.ListItemsEditor.aspx*"/>
</rule>
请注意,@wildcard
规则作为带 IgnoreCase 的正则表达式执行。您也可以使用 @contains
。这些值以及 <urlPrefix>
不应包含方案,虽然 <urlPrefix>
是启用后续匹配规则所必需的,但它本身是不够的。
您可以做的另一件事是将 @detectionResult
值设置为 RaiseException
并将您的 Sitecore 日志记录至少设置为 WARN
以便您可以看到在Sitecore 日志 - 这些可以帮助您识别失败的检查部分。模块中的实际日志记录不是很好,所以恐怕您不会从 DEBUG
日志记录中获得太多好处。
该模块旨在保护 WebForms 免受 CSRF 攻击。 默认情况下,它配置为仅保护 Sitecore 接口 (Sitecore shell)。但是,它支持配置并且可以启用以保护前端解决方案。
由于 Sitecore shell 站点在内容交付服务器上被禁用,因此可以安全地禁用或完全删除该模块,而不会产生任何影响。 如果您在 Content Delivery 服务器上启用了 Sitecore 后端,则可以将模块配置为跳过对某些特定位置的处理请求。只需将节点添加到 Sitecore.AntiCsrf.config 文件并指定 url 进行筛选。