XSS 攻擊時怎麼繞過 htmlspecialchars 函數呢?
01-07
xss攻擊很多場景下htmlspecialchars過濾未必能奏效。場景1:源碼如下:
&
&
htmlspecialchars默認配置是不過濾單引號的。只有設置了:quotestyle 選項為ENT_QUOTES才會過濾單引號,如果此時你的輸出為
&
&
&
$(document).ready(function(){
$("#text").html(".htmlspecialchars($name).");
})
&";
?&>
$("#text").html(".htmlspecialchars($name).");
修改為
$("#text").html(".json_encode(htmlspecialchars($name)).");
處理之後,裡邊的代碼就不會被當成js執行。
場景3:客戶端造成的htmlspecialchars失效:
Opera瀏覽器跨域字符集繼承漏洞此類漏洞已經不是單憑htmlspecialchars函數就能防禦的了。上面3個場景僅僅只是較為常見的,還有一些別的場景可能會導致htmlspecialchars失效。尤其是各種編碼轉換、富文本、進入資料庫再取出資料庫這些地方等等。最後,建議題主結合實際場景,去進行不同的環境測試,最後得出是否能繞過的結論。:)繞不過。
所謂繞過就是挑程序員忘記正確轉碼的地方下手。
注意並非htmlspecialchars就萬事大吉,不同的地方需要不同的轉碼。所以所謂繞過htmlspecialchars也可能指那個漏洞點用htmlspecialchars轉碼壓根不正確。詳見:DOM-based XSS 與 存儲性XSS、反射型XSS有什麼區別? - 賀師俊的回答看來我要小心使用htmlspecialchars了
具體繞過與否要看場景。
官網是這麼說的,對於單引號的轉義必須加上第二個參數ENT_QUOTES。
舉個栗子:上面的htmlspecialchars沒有指定第二個參數。當指定第二個參數時,
不懂php 如果是類似jinjia2里safe標籤那種的話,那則無法繞過。畢竟人家就是用來sanitize用戶輸入的,而這正是防範xss的最常見手段。
安全開發技術課程-XSS跨站腳本攻擊漏洞及解決辦法XSS跨站腳本攻擊漏洞及解決辦法
推薦閱讀:
※XSS 攻擊有哪些黑魔法?
※如何評價 XSS 在黑客攻防中的地位或重要性?
※Content Security Policy (CSP) 是什麼?為什麼它能抵禦 XSS 攻擊?