thinkphp等框架開發中容易忽略的xss攻擊

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

  1.  <script>
  2. (function(){
  3. var a = {:$_GET['b']};
  4. //....
  5. })()
  6. </script>

如果把接收的參數寫成:””;alert(document.cookie);//,那麼攻擊就成功了,
有了這個漏洞之後如何利用,首先構造一個獲取cookie然後跳轉到指定服務器進行進行信息收集,然後再跳轉回一個不易被懷疑的頁面(但如果要做的事比較多,腳本比較多怎麼辦,
像當年新浪的xss一樣,引入js腳本)。有沒有更高級的做法,答案是有的,用jsonp就不用跳轉了,這個我沒有試驗,另外還有一種方式,就是把鏈接生成二維碼,
通過掃描二維碼的方式也不易被發現,所以大家沒事不要隨便掃二維碼,不要以爲在微信中就認爲鏈接不可見,get到鏈接的方法就是分享頁面給自己,然後通過郵件轉發就能看到鏈接.
優缺點:
優點:
效率高
缺點:
不便於維護,缺乏安全性
解決方案:

  1. 使用全局過濾
  2. 要求使用統一的函數進行參數接收,就算不用I函數也可以自定義一個函數
  3. 添加驗證碼等操作

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

  • 在一個web項目裏,由於多人合作,不一定能每一個細節都做的很好,所以
  • cookie啓用httponly屬性,thinkphp裏似乎要3.2.3版本纔有,沒有也沒關係,可以自己加上,在新版本的thinkphp找到cookie函數,跟舊版本的對比下就知道了,另外
    需要在配置裏配置’COOKIE_HTTPONLY’ => true,這個可以在大部分瀏覽器保證cookie不被偷走

bug終結者
你以爲這樣就完了嗎,往下看:
thinkphp(3.2.3core版測試,默認過濾’DEFAULT_FILTER’=>’htmlspecialchars’,)裏I函數也無能爲力的地方就是
不過濾單引號

  1.  
  2. (function(){
  3. var a = '{:$_GET["b"]}';
  4. var b = '{:I("b")}';//變量輸入 ';alert(document.cookie);//
  5. console.log(a);
  6. console.log(b);
  7. })()

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章