我有一個跟蹤我的用戶訪問頁面的網頁。這是一個「個人資料頁面」,如果有人訪問了你的「個人資料頁面」,他的訪問將被跟蹤,你會得到通知。如何防止嵌入式請求到我的網頁?
這與stackoverflow's profile page類似,它跟蹤配置文件視圖(雖然細節不同)。每當獨特的訪問者訪問您的個人資料頁面時,個人資料瀏覽計數器將會增加。
我使用存儲在瀏覽器Cookie中的隨機生成的令牌對用戶進行身份驗證。這是我的問題CSRF大問題,因爲任何隨機網站都可以簡單地代表我的用戶訪問網頁,而他們不知道。例如,攻擊者的網頁,可以簡單地指向我的網頁上嵌入的iframe或圖片:
<img src="http://mysite.com/profile-page">
or
<iframe src="http://mysite.com/profile-page"></iframe>
每當我的用戶訪問攻擊者的網頁,他們將拜訪某人的個人資料頁面沒有他們知道它(訪問是然後記錄)。
讓我用一個具體的例子來證明我的觀點:
許多網站,這些天允許用戶發佈圖片的網址。用戶可以發佈這樣一個形象:
<img src="https://stackoverflow.com/users/632951/pacerier">
圖像標記的src
真的不是一個圖像文件,但是瀏覽器仍然會發出請求,並顯示一個空的圖像:
這意味着攻擊者已經成功地以用戶的名義向https://stackoverflow.com/users/632951/pacerier發出了請求,很可能沒有用戶知道它。
正如Preventing CSRF and XSRF Attacks中提到的,我們可以添加一些隱藏的輸入字段和一個表單「你確定要申請這個頁面嗎?」。缺點是每個請求頁面的真實用戶現在需要點擊按鈕,然後才能訪問網頁,這會嚴重破壞可用性。 我不想強制用戶點擊確認爲每個追蹤的頁面。
是否有其他更方便用戶的方式來防止CSRF獲取請求?
我們怎麼能告訴瀏覽器不要從域http://mysite.com請求頁面,如果它是一個嵌入式頁面(瀏覽器的地址欄沒有顯示請求的頁面,這意味着它是一個嵌入式圖像,框架,IFRAME等) ?
關於你的第三點,這是不是意味着使URL變醜? – Pacerier
另外,是否有X-Frame-Options:用於圖像的DENY等價物? – Pacerier
是的,AJAX請求的URLs很醜陋(除非你使用POST請求,在這種情況下,醜陋的東西將在請求體中),但用戶永遠不會看到這些,所以誰在乎?不,沒有用於圖像的「X-Frame-Options」,但不需要:只要您發送「text/html」(或「text/anything」)內容類型,瀏覽器就不會嘗試將您的頁面渲染爲圖像。在他們能夠找到內容類型之前,他們仍然需要_request_,但是,'X-Frame-Options'也一樣。 –