的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