Web安全之CSRF

簡介

CSRF(Cross Site Request Forgery),翻譯成中文就是跨站點請求僞造。html

攻擊者首先在本身的域構造一個頁面跨域

http://www.a.com/csrf.html

其內容爲瀏覽器

<img src="http://blog.com/article?m=delete&id=1" />

誘使目標用戶訪問這個頁面,用戶看到了一張沒法顯示的照片,可是回頭再看博客id=1的文章已經被刪除了。這是以該用戶身份(發送了Cookie)在第三方站點裏執行了一次操做,這個請求是攻擊者僞造的,因此叫「跨站點請求僞造」。安全

瀏覽器的Cookie策略

瀏覽器所持有的Cookie分爲兩種:一種是「Session Cookie」,又稱「臨時Cookie」;另外一種是「Third-party Cookie」,也稱爲「本地Cookie」。Third-party Cookie服務器指定了Expire時間。Session Cookie沒有指定過時時間,新打開的Tab頁也是有效的,但瀏覽器關閉後就失效了。服務器

一個域加載另外一個域的資源,因爲安全緣由,許多瀏覽器會阻止Third-party Cookie的發送,只能發送Session Cookie。刪除文章的例子是在不會阻止Third-party Cookie發送的瀏覽器中實現的。網絡

P3P頭的反作用

瀏覽器攔截第三方Cookie發送,在某種程度上下降了CSRF攻擊的威力。
可是P3P Header會是問題複雜起來,它是W3C制定的一項關於隱私的標準,若是網站返回給瀏覽器的HTTP頭中包含有P3P頭,將容許瀏覽器發送第三方Cookie。它重要用於須要跨域訪問頁面的場景,如父頁面b嵌入了iframe,iframe的src指向的a頁面網址,a頁面響應頭有Set-Cookie。通常狀況下因爲跨域,在a.com上Set-Cookie是不會成功的,可是加入P3P頭後,能夠跨域Set-Cookie成功,瀏覽器也不會再攔截第三方Cookie的發送。P3P頭只須要由網站設置一次便可,以後每次請求都會遵循此策略。網站

只能夠發送GET請求嗎?

其實對於攻擊者來講,也能夠有許多方法構造POST請求。
最簡單的方法好比在頁面中構造一個form表單,使用JavaScript自動提交這個表單。spa

Flash CSRF

Flash CSRF也有多種方式可以發送網絡請求,包括POST請求。除了使用URLRequest外,還能夠使用getURL、loadVars等。在IE六、IE7中,Flash發送的網絡請求都可以帶上本地Cookie。翻譯

CSRF Worm

2008年9月,公佈了一個百度的CSRF Worm。code

http://msg.baidu.com/?...sn=用戶帳戶&co=消息內容...

修改參數sn,能夠對指定用戶發送短消息。
而另外一個接口能查詢出某個用戶的全部好友

http://frd.baidu.com/?...un=用戶帳戶...

二者相結合,讓一個百度用戶查看惡意頁面後,給他全部好友發送一條短消息,消息中又包含一個惡意頁面,使得好友將消息發送給他們的好友,就能夠造成一個CSRF Worm。

相關文章
相關標籤/搜索