
什么是XSS:這里通俗的講,就像是SQL注入一樣,XSS攻擊也可以算是對HTML和JS的一種注入。你本來希望得到是從用戶那得到一段有用的文本文字,但用戶提交給你的卻是別有用心的可執行javasc ript或其它腳本(這里並沒有把破壞樣式或文檔文本當作攻擊),當你再把這些提交的內容顯示到頁面上時,XSS攻擊就發生了。
關於XSS的攻擊方式和場景層出不窮,本文也只是做的普及一些基本的安全防護知識(不涉及flash腳本攻擊),如果想徹底研究這種攻擊方式推薦一本書<<XSS跨站腳本攻擊剖析與防御>>,如果沒時間看書的話就把本文看完吧。
本文的需掌握的基礎知識:cookie,session工作原理,對TP框架有一定了解。
1:抵御99%的攻擊方式,適用於90%的場景.
當網站不涉及復雜的用戶交互時,可以對用戶所有提交的文本進行htmlspecialchars函數處理。
在THINKPHP3.2版本中的操作步驟是:
一:在項目配置文件中添加配置: 'DEFAULT_FILTER' => 'htmlspecialchars', //默認過濾函數
二: 使用框架帶的I方法獲取來自用戶提交的數據;
例子:M('Member')->save(array('content'=>I('post.content')));這樣添加的content內容是經過htmlspecialchars處理過的.
提問:為什么經過htmlspecialchars處理過的文本可以保證是安全的?
回答:縱觀XSS各種攻擊方式絕大多數依賴<>'"& 這幾個字符中的一個或幾個對內容進行注入攻擊。而htmlspecialchars函數的作用就是將這些字符轉換成無害的HTML 實體;
提問:為什么有這么好的方法,而還有好多網站還是被攻擊.
回答:因為好多程序員總會粗心忘記使用這個方法,而遺漏某條數據的過濾。
2:對COOKIE進行IP綁定
cookie里面一般有自動登錄信息和session_id,就算對cookie里面的內容全部加了密,cookie的信息一但被別人通過XSS攻擊獲取后也一樣等同於把自己的帳號密碼給了別人。
對cookie進行IP綁定,(當然也可以獲取用戶客戶端更多的其它信息進行同時綁定)可以根據用戶的IP來判斷這個cookie是不是來原始授權用戶。
典型的應用示例:
-
用戶設置了自動登錄時保存自動登錄信息:
-
1
2
3
4
$auto=I('post.auto');//用戶設置了自動登錄if(!empty($auto)){cookie('auto',encrypt(serialize($data)));//將登錄信息保存到cookie,其中$data里含有加密后的帳號,密碼,和用戶的IP,這里的cookie已在全局中設置過期日期為一周} -
用戶關閉瀏覽器再次訪問網站時,進行自動登錄
-
1
2
3
4
5
6
7
8
9
10
11
12
if(!is_login()) {//是否未登錄狀態?$auth=cookie('auto');if(!empty($auth)){//是否未有自動登錄cookie?$data=unserialize(decrypt($auth));if(!empty($data) && !empty($data['username']) && !empty($data['password']) && !empty($data['last_login_ip'])){$user=M('Member')->where(array('username'=>$data['username'],'password'=>$data['password']))->find();if(!empty($user['id'])&&($user['last_login_ip']==get_client_ip())){//cookie帳號密碼是否有效?//IP來源是否相同?login_session($user['id'],$user['username'],$data['last_login_ip']);//用戶自動登錄成功}}}}
優點:大多數場景下可使被XSS攻擊盜取的cookie失效。缺點:由於IP存在多台電腦共用的可能,對綁定做不到十分精細。
3:為COOKIE添加httponly配置
-
最新版本的thinkphp已經支持此參數。
-
此參數可以保證cookie只在http請求中被傳輸,而不被頁面中的腳本獲取,現市面上絕大多數瀏覽器已經支持。
4:HTML5值得觀注的新特性:
-
<iframe src="http://alibaba.com" sandbox>
-
為iframe的增加的sandbox屬性,可以防止不信任的Web頁面執行某些操作.相信這個方法以后會被廣泛使用。
5:富文本過濾
-
富文本過濾是,XSS攻擊最令人頭疼的話題,不僅是小網站,就連BAT這樣的巨頭也是三天兩頭的被其困擾.
更多ThinkPHP相關技術文章,請訪問ThinkPHP使用教程欄目進行學習!
以上就是thinkphp過濾xss的詳細內容,更多請關注php中文網其它相關文章!
==============================================================================================

● XSS(跨站腳本攻擊)兩種形式:輸入JS代碼或者HTML代碼導致頁面亂。
● XSS(跨站腳本攻擊)可以用於竊取其他用戶的Cookie信息,要避免此類問題,可以采用如下解決方案:
直接過濾所有的JavaScript腳本;
轉義Html元字符,使用htmlentities、htmlspecialchars等函數;
系統的擴展函數庫提供了XSS安全過濾的remove_xss方法;
新版對URL訪問的一些系統變量已經做了XSS處理。
用戶提交的表單信息時候,該表單里邊有可能存在相關的“代碼”(html/css/js等代碼),這樣代碼會在信息顯示的時候對頁面效果造成干擾。
1、下載htmlpurifier,解壓后將library文件夾放到ThinkPhp的插件文件夾並在分組的common文件夾中創建function.php
2、在function,php中創建防止xss攻擊方法
3.我們可以將從post中得到的數據先通過hThinkphp系統自帶的I()方法來進行數據過濾然后在通過調用函數fanXSS進行過濾即可
舉以下的例子:
在thinphp開發后台過程中需要添加編輯器,要讓編輯器正常顯示就要設置I函數不過濾。
現在的問題來了,如果不過濾就會被XSS攻擊如果過濾在線編輯器就不好使了,解決的辦法應該是有選擇性的過濾,
我們可以一個開源的過濾的包:htmlpurifier包。
把下載的包解壓到跟目錄改名為HTMLpurifier

創建一個函數

然后修改配置文件config.php讓I函數使用這個函數來過濾:

現在網站中I函數過濾時使用的就是我們寫的這個函數:有選擇性的過濾只過濾危險代碼。
網站就很安全了!
本文來自ThinkPHP框架技術文章欄目:http://www.php.cn/phpkj/thinkphp/
以上就是thinkphp中防止xss攻擊的方法的詳細內容,更多請關注php中文網其它相關文章!
