2010-06-24 82 views
5

只想從知道的人那裏獲得輸入。我正在考慮CSRF漏洞,以及我知道與之抗衡的最流行的方法。該方法是在返回的html中創建一個令牌並添加一個具有相同值的cookie。所以如果一個腳本試圖做一個職位,他們將have to guess the token thats embedded in the web page爲它成功。CSRF漏洞/ cookies問題

但是,如果他們針對特定的網站,爲什麼他們不能只用一個腳本,

  1. 調用頁面上的get(cookie將被退回即使腳本不能訪問它)
  2. 解析HTML並得到令牌
  3. 呼籲在它該令牌(即回來將被送回)
  4. 他們已經成功提交表單而不需用戶知識的cookie後

腳本不需要知道cookie的內容,它只是使用cookie始終來回發送的事實。

缺少什麼我在這裏?這不可能嗎?我認爲如果你仔細想想,這很可怕。

下面這一行不需要讀來回答這個問題:)

的事實是,認證是基於餅乾,我認爲這是主要的方式驗證當前正在發生做此漏洞的銀行。

我能想到的另一個解決方案是在頁面級別進行身份驗證。所以 當他們登錄返回的html時,會在其中包含該標記。他們點擊的每個鏈接都包含該令牌,因此當Web服務器收到請求時,它可以識別用戶/會話。問題在於,如果他們使用除此之外的任何導航,他們將是'未經驗證的'(例如,輸入一個url),但它在url中看起來不太好,因爲它可能看起來像這樣:

https://www.example.com/SuperSecretPage/1/123j4123jh12pf12g3g4j2h3g4b2k3jh4h5g55j3h3

但我明白,如果安全性更重要,那麼一個漂亮的URL是第二位的。

我不知道關於cookie的所有信息,但如果用戶代理對cookie更小心一點呢?

例如,如果cookie發送取決於標籤怎麼辦?我們現在都使用標籤衝浪,對吧?那麼如果cookie的範圍是標籤呢?所以如果我有我的銀行網站在標籤1上打開,並且我在標籤2上衝浪,任何腳本調用獲取/帖子 標籤2將只發送標籤2中產生的曲奇。

或者如果cookie被存儲/域。所以當我在example.com上時,任何返回到example.com cookie集合的cookie都會返回。然後當我在www.mybankingsite.com上時,所有的cookies都會被放入mybankingsite.com收藏。因此,如果我訪問example.com並運行調用get/post的腳本,用戶代理將僅發送example.com cookie。這與發送請求域的cookie不同。例如。如果腳本在example.com的網頁中調用mybankingsite.com的獲取,用戶代理將不會發送mybankingsite.com cookie。

我知道我在什麼用戶做代理無法控制,但我只是探索的可能性

回答

1

的CSRF令牌必須是每個會話唯一的。如果惡意服務器請求相同的頁面,他們將得到不同的令牌。如果他們試圖通過客戶端機器上的JavaScript請求頁面內容,則同源策略會阻止它們。

4

所以我認爲這裏的問題就是攻擊者試圖獲取頁面內容。要獲得經過身份驗證的用戶頁面,攻擊者需要能夠代表它們發送請求讀取內容。 AJAX不會發送跨域請求,iframe不會讓您閱讀回覆。我正在努力考慮攻擊者首先獲取內容的其他方式。

更有可能使用clickjacking來讓用戶提交表單。這種技術似乎不太可能。 (注意:這是安全性,我們總是可能是錯的。)

2

有沒有人關心在這個問題上分享一些代碼,因爲我只是用CSRF攻擊了我自己的網站(不是在生產中)。我所要做的就是以下

在:www.badguy.com/寫出下列HTML

IMG SRC = 「www.goodguy.com/secure/user/delete/5」>

這是什麼 因此,管理員去www.badguy.com/和圖像從用戶的瀏覽器請求到www.goodguy.com/secure/user/delete/5,所以管理員不知不覺地只是刪除了一個用戶。如果你創建一個循環,你遇到了一些麻煩。預計我永遠不會刪除數據只是改變其狀態:)但我仍然不喜歡這樣的外觀。

+0

好吧,你可以避免這種情況,只接受對該URL的Http後處理,但它確實打開了一個腳本可以訪問它的DOM的事實,並且如果一個元素可以從另一個站點獲取信息,那麼你可以被入侵 – Jose 2010-07-01 20:05:40