2015-11-10 62 views
0

我使用彈簧安全爲我的應用程序。在表單中嵌入基於表單的身份驗證w/csrf令牌。用戶通過身份驗證後,會話cookie允許訪問頁面。 我需要在應用程序中防止ajax調用csrf。阿賈克斯調用彈簧安全csrf保護

Spring提供了一個方式,一個令牌可以從服務器發送到客戶端

<head> 
    <meta name="_csrf" content="${_csrf.token}"/> 
    <!-- default header name is X-CSRF-TOKEN --> 
    <meta name="_csrf_header" content="${_csrf.headerName}"/> 
    <!-- ... --> 
</head> 

此令牌需要被送回使AJAX調用。

var client = rest.chain(csrf, { 
token: $("meta[name='_csrf']").attr("content"), 
name: $("meta[name='_csrf_header']").attr("content") 
}); 

http://docs.spring.io/spring-security/site/docs/4.0.2.RELEASE/reference/htmlsingle/#csrf-include-csrf-token-ajax

疑問句:一種可能的攻擊者(在另一個瀏覽器選項卡中的HTML代碼),仍可以從我的應用程序請求整個頁面(這將作爲會話cookie工作將沿W /請求被髮送由瀏覽器自動)。來自服務器的響應將包含csrf標記。現在攻擊者可以使用這個令牌來進行ajax調用。這不會造成安全漏洞嗎?

請提出建議,如果我錯過了某些東西來防止此用例。

回答

0

不,其他選項卡中的頁面不能只從您的應用程序請求整個頁面。由於維基百科CORS頁說:

「跨域」 AJAX請求默認的,因爲他們的 執行高級請求(POST,PUT,DELETE等 類型的HTTP請求,並可以指定沿能力禁自定義HTTP標頭) ,它引入了許多跨站腳本安全問題。

如果您的應用程序顯式發送CORS標頭,則必須格外小心。否則,你應該對這件事保持安全。