• 是一種網站應用程序的安全漏洞攻擊,是代碼注入的一種。它容許惡意用戶將代碼注入到網頁上,其餘用戶在觀看網頁時就會受到影響。這類攻擊一般包含了HTML以及用戶端腳本語言。
• 反射型
• 存儲型
• DOM型
防治XSS,我的以爲核心內容就是不能相信任何用戶輸入的數據。
因此凡是前端要操做用戶數據的地方,所有要轉義。
固然。簡單一句話,固然不容易處理這樣的狀況。由於若是每個方法都要去作一個encode那真是程序員的災難。
那就分狀況討論下。
咱們會在什麼地方碰到XSS:
凡是數據能夠被用戶構造的位置。
1.用戶輸入數據,而後被輸出。
若是用戶輸入<script>location.href='www.cnblog.com/bugluo'</script>,被轉發圍脖,嗯嗯。用戶全跑我這來了。
因此咱們能夠怎麼作?
若,咱們使用smarty這樣的後端模板。咱們能夠在編譯平臺作相似上線前自動加encode方法的功能。
若,咱們使用前端直接生成html,拼接html時,注意用$.text()方法,而不要使用$.html(''),或者使用cratedom的方式。
2.富文本編輯器。
富文本編輯器很是容易出現一個問題,就是dom被構造,例如:
<a onclick="location.href='你懂的'"></a>
事件中:eval setTimeout/setInterval document.write new Function() String.fromCharCode 前端模板
有這麼多xss攻擊的漏洞地方,咱們該怎麼防範呢?
1.不要相信用戶的任何輸入
2.過濾
3.轉義
不要相信用戶的任何輸入:白名單機制,只有被容許的事件纔可以去執行,只有被容許的內容纔可以顯示
過濾掉任何可能形成xss的內容。
將特殊的字符轉義:
$^*()+={}[]|/:<>.?'"
文本過濾,因爲XSS漏洞會慢慢被挖掘出來,綿綿不絕。因此白名單機制可以更好的知足防XSS的需求,可是會形成可配置性大大下降。
轉義:
function smarty_modifier(str){
$str = strval(str);
return str_replace(array('\\','&',……,array('\\\\','$amp;',……),str)
}
直接上代碼通俗易懂。