2011-01-21 107 views
0

我從編程到「網絡編程」遷移,所以這可能聽起來太基本關於CSRF的一個基本問題攻擊

我的問題是關於由「受害網站」與一些「非響應HTTP請求公開/敏感「信息,如HTML或XML或JSON。

受害者網站只是依靠會話cookie進行身份驗證,然後以http請求的「非公開」信息回覆。

如果黑客的網站有一個JS讓ajax HTTP請求到「受害者站點」,並且用戶已經登錄到「受害者站點」並因此在瀏覽器中爲受害者站點擁有cookie。

ajax請求是否會被「受害者服務器」響應,如果是這樣,黑客JS會將這個「非公開」信息發回給黑客網站。

如何防止這種情況?

回答

2
  1. 您不能通過AJAX向其他域執行請求,而不是執行帶有AJAX的JS的域。

    如果受害人的網站是example.com和黑客的網站是example2.com然後從example2.com JS文件不能使一個AJAX請求到另一個網站比example2外。

  2. 來自客戶端受害者服務器的cookie不會在HTTP請求中發送給黑客服務器。如果受害者的網站有一個XSS可以被利用來將cookies從該網站發送給黑客,則Cookie可能會被盜。

+0

非常感謝... – Tiwari 2011-01-21 11:42:38

0

維基百科有意見的幾個簡單的位:http://en.wikipedia.org/wiki/Csrf

保持你的會話cookie壽命短。如果您在閒置15分鐘後退出,您不太可能成爲問題的受害者。不是很友好,但是可以根據數據的價值來考慮。

檢查Referer:標題看到他們來自您的網站。不是很好。甚至不好。但是這是一些東西。

使用用戶特定的表單內容來防止攻擊者創建一個簡單的表單POST:Understanding the Rails Authenticity Token這種機制非常棒,如果你的框架可以幫助你,那麼在你的結尾幾乎是毫不費力的。如果你的框架不能幫助你,那麼考慮一個更好的框架是另一個理由。 :)

0

嚴格意義上的ajax(xmlhttprequest),實際上通常被認爲是限於同一個域,但很多(如果不是所有的話)取決於瀏覽器實現安全模型的方式。我注意到的一件事是,即使使用正常(非跨域)ajax,Firefox也會發出跨域請求,但會阻止來自整個響應(看起來會中止請求,導致http 206響應代碼)。這意味着至少在firefox中,即使對於正常的ajax,「寫入調用」也需要受到保護以防止CSRF攻擊。

在這樣的瀏覽器故障旁邊,most browsers也支持'cross domain resource sharing',它也可以用於xmlhttprequests。當完成正確的方式時,跨域ajax可以非常安全。

但是採用CORS似乎受到'jsonp'成功的阻礙;動態插入的包含回調參數的json中包含數據的腳本不受相同域原則的限制。以這種安全的方式(即防止攻擊者站點動態地插入並執行受害者站點中的腳本,以便登錄用戶確實將cookie發送給cookie)比較困難(需要每個請求中的會話相似令牌這不在cookie中)。

結論:使用傳統ajax的讀取操作是安全的,對於寫入& jsonp您必須做一些額外的工作才能安全。如果你真的想跨域,你應該看看CORS作爲jsonp的替代品。