thinkphp過濾xss


 

什么是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. 1

    2

    3

    4

    $auto=I('post.auto');//用戶設置了自動登錄

    if(!empty($auto)){

    cookie('auto',encrypt(serialize($data)));//將登錄信息保存到cookie,其中$data里含有加密后的帳號,密碼,和用戶的IP,這里的cookie已在全局中設置過期日期為一周

    }

  3. 用戶關閉瀏覽器再次訪問網站時,進行自動登錄

  4. 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配置

  1. 最新版本的thinkphp已經支持此參數。

  2. 此參數可以保證cookie只在http請求中被傳輸,而不被頁面中的腳本獲取,現市面上絕大多數瀏覽器已經支持。

4:HTML5值得觀注的新特性:

  1. <iframe src="http://alibaba.com" sandbox>

  2. 為iframe的增加的sandbox屬性,可以防止不信任的Web頁面執行某些操作.相信這個方法以后會被廣泛使用。

5:富文本過濾

  1. 富文本過濾是,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

91b2e2c48c76509590d7c0a811bc6ff.png

創建一個函數

4dc8f7e40624d8a0c2c9fcb9a7ff9e2.png

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

bfa521f3258815c64a69d85ab183f7b.png

現在網站中I函數過濾時使用的就是我們寫的這個函數:有選擇性的過濾只過濾危險代碼。

 

網站就很安全了!

本文來自ThinkPHP框架技術文章欄目:http://www.php.cn/phpkj/thinkphp/

以上就是thinkphp中防止xss攻擊的方法的詳細內容,更多請關注php中文網其它相關文章!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM