今天,來分享一下CRSF攻擊基本知識
CRSF:cross site request forgery 跨站請求僞造
下面是CRSF攻擊的示意圖:
上圖可以簡單總結爲三步:
- 用戶登陸A站,並保留登陸信息
- 用戶訪問B站, B站攜帶A站登陸信息惡意請求A站
- A站無法識別請求方,當作合法請求處理,從而遭受攻擊
簡單示例:
某個網站存在以下惡意信息
<img src="http://www.xxx.com/blogadmin.php?type=delete&id=3">
乍一看,可能大家感覺這不就是一個簡單的html圖片標籤嗎?
但是仔細看可以發現,這根本就不是一個對圖片的請求連接,當你登陸到此網站後,網站會主動發起:
http://www.xxx.com/blogadmin.php?type=delete&id=100
的請求,如果此時www.xxx.com做的比較簡陋,就是通過get請求來進行blog的管理
假設後臺如果是這樣寫的話:
$type = $_GET['type'];
$id = $_GET['id'];
if($type == 'delete'){
if($id > 0 ){
delete_blog_by_id($id);
...
}
}
那麼可能你昨天剛熬夜寫的新博文就被無情的幹掉了,然而你卻是一臉蒙逼,毫不知情。
當然啦,很少有網站這麼做,這樣做的網站,也很少有網站專門去攻擊,
那麼,我們應該怎樣去預防CRSF攻擊呢?
- 將cookie設置爲HttpOnly
具體的設置方法因網站的語言不同,而有所差異,具體方法請自行谷歌 - 檢測Referer
HTTP頭部的Referer用來記錄HTTP請求的來源地址,一般情況下,來自本站的請求都是合法且安全的,而且對於比較敏感操作,必須設置來源本站,於是通過檢測Referer信息,就可以避免此類攻擊 - 設置token
在請求中放入攻擊者無法僞造的東西,從而避免此類攻擊,如在http請求中加入隨機的token,然後在數據提交時,先進行token驗證,如果正確,則繼續後續操作,否則阻止繼續進行。