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 进行筛选。