的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
日志中获得很多好处。
AntiCSRF ... CSRF支持跨站点请求伪造...所以AntiCSRF是一种防止跨站点请求伪造的模块...如果您决定删除模块,则会产生影响,mmmm,基本上让您的应用程序容易受到这些类型的攻击:) – Hackerman
好吧。我不认为它像那样黑白。我们使用mvc控制器并在所有的httppost路由上使用'ValidateAntiForgeryToken'属性。那么sitecore模块在顶部添加了什么。它主要需要管理界面吗? – marto
想知道你在做什么不同,我们使用了相当多的web API,我从来没有看过这个。 – ASura