2012-03-09 44 views
1

在cookie中使用信號auth-token進行身份驗證安全嗎(通過ajax發佈並僅要求json)?有關CSRF的問題

爲什麼攻擊者無法在隱藏字段中獲取表單令牌?

攻擊者如何用POST請求進行CSRF攻擊?

+0

請說明你的第一個問題。 – Gumbo 2012-03-10 10:54:09

回答

10

在cookie中使用單個令牌進行身份驗證安全嗎?

排序,如果該cookie是僅HTTP(這有助於防止XSS)和SSL,那麼您的站點之外的任何人都無法讀取該cookie。

但是,用戶的瀏覽器可以保留該cookie,並在瀏覽器再次從您的應用程序請求頁面時自動發送該cookie。當用戶瀏覽您的網站時,這是理想的,但也是CSRF攻擊是可能的。

爲什麼攻擊者無法在隱藏字段中獲取表單標記?

在CSRF攻擊中,黑客實際上無法讀取您的站點或cookie,因爲它應該受SSL/HTTPS保護。 CSRF通過愚弄您的瀏覽器將您的數據和安全數據發送到您的網站。

因此,隱藏字段中的值是針對CSRF的默認防禦的一部分 - 它們在cookie中具有祕密值(黑客可以欺騙瀏覽器重新發送但無法看到或編輯),而且加密頁面中隱藏的輸入字段中的值相同(黑客無法獲得)。如果cookie和隱藏的值不匹配,那麼你有CSRF攻擊。

攻擊者如何利用POST請求執行CSRF攻擊?

好的,假設你有一個安全的網站。您可以使用SSL登錄到該站點,並且您將收到一個HTTP-only SSL身份驗證cookie,以便您保持登錄狀態。

現在我有一個新頁面,位於完全不同的站點上。如果我從我的網站鏈接到您的網站,那麼當您點擊該鏈接時,它將離開我的網站並轉到您的網站,傳遞您的Cookie。

如果我在頁面上添加一個HTML <form>,併發布回您的網站,則會發生同樣的事情:瀏覽器返回您的網站併發送表單中的任何數據以及您的cookie。

請注意,我還沒有閱讀您的Cookie或您網站上的任何頁面,因爲兩者都受到SSL加密保護。

爲了達到完整的效果,我可以將該表單隱藏在頁面上,以便用戶甚至不會意識到他們將發送回您的網站。

這是一個簡單的例子,它是Facebook上的'Like'功能 - 他們已經修補了這個現在我想,但一段時間,我可以欺騙你的瀏覽器(不訪問你的詳細信息)發送你的身份驗證cookie到Facebook行動,說你喜歡我想要的東西。