首頁 > php框架 > ThinkPHP > thinkphp過濾xss

thinkphp過濾xss

步履不停
發布: 2019-08-16 18:11:23
原創
5049 人瀏覽過

thinkphp過濾xss

什麼是XSS:這裡通俗的講,就像是SQL注入一樣,XSS攻擊也可以算是對HTML和JS的一種注入。你本來希望得到是從用戶那得到一段有用的文本文字,但用戶提交給你的卻是別有用心的可執行javasc ript或其它腳本(這裡並沒有把破壞樣式或文檔文本當作攻擊),當你再把這些提交的內容顯示到頁面上時,XSS攻擊就發生了。

關於XSS的攻擊方式和場景層出不窮,本文也只是做的普及一些基本的安全防護知識(不涉及flash腳本攻擊),如果想徹底研究這種攻擊方式推薦一本書<>,如果沒時間看書的話就把本文看完吧。

本文的需掌握的基礎知識: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. $auto=I(&#39;post.auto&#39;);//用户设置了自动登录
    if(!empty($auto)){
    cookie(&#39;auto&#39;,encrypt(serialize($data)));//将登录信息保存到cookie,其中$data里含有加密后的帐号,密码,和用户的IP,这里的cookie已在全局中设置过期日期为一周
    }
    登入後複製
  3. 使用者關閉瀏覽器再次造訪網站時,進行自動登入


  4. if (!is_login()) {//是否未登录状态?
    $auth=cookie(&#39;auto&#39;);
    if(!empty($auth)){//是否未有自动登录cookie?
    $data=unserialize(decrypt($auth));
    if(!empty($data) && !empty($data[&#39;username&#39;]) && !empty($data[&#39;password&#39;]) && !empty($data[&#39;last_login_ip&#39;])){
    $user=M(&#39;Member&#39;)->where(array(&#39;username&#39;=>$data[&#39;username&#39;],&#39;password&#39;=>$data[&#39;password&#39;]))->find();
    if(!empty($user[&#39;id&#39;])&&($user[&#39;last_login_ip&#39;]==get_client_ip())){//cookie帐号密码是否有效?//IP来源是否相同?
    login_session($user[&#39;id&#39;], $user[&#39;username&#39;], $data[&#39;last_login_ip&#39;]);//用户自动登录成功
    }
    }
    }
    }
    登入後複製

#優點:大多數場景下可使被XSS攻擊盜取的cookie失效。缺點:由於IP存在多台電腦共用的可能,因此對綁定做不到十分精細。

3:為COOKIE新增httponly設定

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

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

4:HTML5值得觀註的新功能: