1. 程式人生 > >tp3.2.3中的xss攻擊基本防護

tp3.2.3中的xss攻擊基本防護

雖然說現在的web開發框架都是挺成熟的框架,在效能、安全等方面都有比較好的表現,但問題往往出現在業務邏輯上,如上週我再公司發現的一個跨站指令碼攻擊,(通常公司是這麼過濾的,max(0,$_GET[‘a’])、strip_tags($_GET[‘a’]),然而程式碼量大的話,就容易出現忽略的地方)

如下面一段程式碼:

(function(){

var a = {:$_GET['b']};

//....

})()

如果把接收的引數寫成:””;alert(document.cookie);//,那麼攻擊就成功了,

有了這個漏洞之後如何利用,首先構造一個獲取cookie然後跳轉到指定伺服器進行進行資訊收集,然後再跳轉回一個不易被懷疑的頁面(但如果要做的事比較多,指令碼比較多怎麼辦,

像當年新浪的xss一樣,引入js指令碼)。有沒有更高階的做法,答案是有的,用jsonp就不用跳轉了,這個我沒有試驗,另外還有一種方式,就是把連結生成二維碼,

通過掃描二維碼的方式也不易被發現,所以大家沒事不要隨便掃二維碼,不要以為在微信中就認為連結不可見,get到連結的方法就是分享頁面給自己,然後通過郵件轉發就能看到連結.

優缺點:

優點:

效率高

缺點:

不便於維護,缺乏安全性

解決方案:

使用全域性過濾

要求使用統一的函式進行引數接收,就算不用I函式也可以自定義一個函式

新增驗證碼等操作

如何減少攻擊帶來的損失:

在一個web專案裡,由於多人合作,不一定能每一個細節都做的很好,所以

cookie啟用httponly屬性,thinkphp裡似乎要3.2.3版本才有,沒有也沒關係,可以自己加上,在新版本的thinkphp找到cookie函式,跟舊版本的對比下就知道了,另外

需要在配置裡配置’COOKIE_HTTPONLY’ => true,這個可以在大部分瀏覽器保證cookie不被偷走

bug終結者

你以為這樣就完了嗎,往下看:

thinkphp(3.2.3core版測試,預設過濾’DEFAULT_FILTER’=>’htmlspecialchars’,)裡I函式也無能為力的地方就是

不過濾單引號

(function(){

var a = '{:$_GET["b"]}';

var b = '{:I("b")}';//變數輸入 ';alert(document.cookie);//

console.log(a);

console.log(b);

})()

這種情況I函式也幫不了你,最後,使用統一的過濾函式,並且注意I函式單引號的問題