Sitecore.Security.AntiCsrf做了什么,可以在我的内容交付服务器

时间:2016-09-16 16:35:26

标签: sitecore sitecore8

我们目前遇到的问题是,当在操作中抛出异常时,对异步控制器操作的某些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

2 个答案:

答案 0 :(得分:3)

该模块旨在保护WebForms免受CSRF攻击。 默认情况下,它配置为仅保护Sitecore接口(Sitecore shell)。但是,它支持配置,可以启用以保护前端解决方案。

由于在Content Delivery服务器上禁用了Sitecore shell站点,因此可以安全地禁用或完全删除模块,而不会产生任何影响。 如果在Content Delivery服务器上启用了Sitecore后端,则可以将模块配置为跳过处理对某些特定位置的请求。只需将一个节点添加到Sitecore.AntiCsrf.config文件并指定要过滤的URL。

答案 1 :(得分:1)

AntiCSRF模块根据表单字段值验证cookie值(Guid)。如果您的API调用不包含这两个,则模块将引发错误。有趣的是,它实际上并不重要。

模块本身会注入Guid::ToString("D"),但检查并不会尝试将其解析回Guid,或者确定它是否是正确的Guid。不确定反CSRF检查有多好,但除此之外,唯一的实际要求是请求有效负载中的表单字段名称必须与@formFieldName元素的<AntiCsrf />属性匹配,并且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日志记录中获得很多好处。