隨便講講XSS攻擊

做爲一個前端工程師,XSS漏洞不該該只是安所有門的工做。在項目上馬的時候就應該對可能涉及的安全問題有所預防纔是有一個好前端。- -
 
什麼是XSS
•跨站腳本攻擊(Cross-site scripting, XSS)
• 是一種網站應用程序的安全漏洞攻擊,是代碼注入的一種。它容許惡意用戶將代碼注入到網頁上,其餘用戶在觀看網頁時就會受到影響。這類攻擊一般包含了HTML以及用戶端腳本語言。
 
XSS分類
• 反射型
• 存儲型
• 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)
}
直接上代碼通俗易懂。
相關文章
相關標籤/搜索