2017-08-27 61 views
0

我仍然不明白防僞令牌在MVC中是如何工作的。 來自MSDN手動設置cookie值以禁用防僞標記?

防僞令牌

爲了防止CSRF攻擊,ASP.NET MVC使用防僞標記,也稱爲請求驗證令牌。

  1. 客戶端請求一個包含表單的HTML頁面。
  2. 服務器在響應中包含兩個令牌。一個令牌作爲cookie發送。另一個放置在隱藏的表單字段中。令牌是隨機生成的,因此對手無法猜測值。
  3. 當客戶端提交表單時,它必須將兩個令牌都發送回服務器。客戶端將cookie標記作爲cookie發送,並在表單數據內發送表單標記。 (瀏覽器客戶端在用戶提交表單時自動執行此操作。)
  4. 如果請求不包括這兩個標記,則服務器將禁止該請求。

下面是一個HTML表單的一個隱藏的表單令牌的例子:

<form action="/Home/Test" method="post"> 
<input name="__RequestVerificationToken" type="hidden" 
     value="6fGBtLZmVBZ59oUad1Fr33BuPxANKY9q3Srr5y[...]" />  
<input type="submit" value="Submit" /> 

我的問題是,既然我們可以通過查看源代碼很容易地找到隱藏的標記值( F12在任何瀏覽器中)。然後,我們可以通過轉到開發工具(Ctrl-Shift-J或工具 - >開發工具) - >控制檯手動設置cookie,然後輸入javascript命令:

document.cookie =「keyofcookie = valueofcookie」 ?

然後我們手動設置相同的令牌因此禁用防僞技術?

回答

1

該cookie是HttpOnly,它不能從JavaScript設置,因爲所有最新的瀏覽器實現HttpOnly。此外,Cookie令牌和表單令牌都包含不同的基礎64加密信息。解密將是服務器端的東西。

另外,這些標記不能進行比較。它們相互補充數據。此外,您沒有閱讀完整的文章。 MVC有自己的方法來驗證令牌以及..

檢查下面的鏈接是否有幫助。

https://www.codeproject.com/Articles/793384/ASP-NET-Anti-Forgery-Tokens-internals

+0

我沒有強大的餅乾。那麼你怎麼知道這個cookie是HttpOnly? – Bigeyes

+0

像你一樣,我也在互聯網上閱讀。但是現在,既然你問了,這裏是實際的微軟文件源代碼的鏈接。這裏是關於開源的MS鏈接。 https://blogs.msdn.microsoft.com/henrikn/2012/08/17/getting-started-with-asp-net-web-stack-source-on-codeplex/。檢查HttpOnly是否爲true。 http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/9a83b63f3f889e3f2c979274fe3e8f7610e06b98#src/System.Web.WebPages/Helpers/AntiXsrf/AntiForgeryTokenStore.cs – Amit

0

正如documentation說:

防僞標記工作,因爲惡意網頁無法讀取 用戶的令牌,由於同源策略。 (Same-origin policies 防止託管在兩個不同站點上的文檔訪問每個其他站點的內容,因此在前面的示例中,惡意頁面 可以向example.com發送請求,但無法讀取響應。)

這意味着,複製cookie值並將其用於任何不同的位置將不起作用,因爲上述策略。

+0

我還是不明白'惡意網頁無法讀取用戶的令牌,'。你的意思是我們無法通過'var x = document.cookie;'腳本讀取cookie? – Bigeyes

相關問題