美文网首页
XSS 攻击防御

XSS 攻击防御

作者: 菜鸡前端 | 来源:发表于2021-09-08 17:38 被阅读0次

1. XSS介绍

百度百科:XSS 跨站脚本攻击(Cross Site Scripting),恶意攻击者往Web页面里插入恶意Script代码或者链接地址,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

2. 攻击原理

按照攻击过程来分类,XSS 攻击可以分为:

  • 反射型 XSS
  • 存储型 XSS
  • 基于 DOM 的 XSS

反射和存储 XSS 是服务器端注入问题,而基于 DOM 的 XSS 是客户端(浏览器)端注入问题

2.1 反射型XSS

客户端发出请求后,XSS代码出现在url中作为输入提交到服务器,XSS代码随着响应内容一起被发送到客户端,最后浏览器执行XSS代码。这种XSS的攻击方式一般是骗人点链接,恶意代码在url中。

2.2 存储型XSS

恶意代码被当做正常数据插入到数据库中,当用户正常访问页面的时候,恶意代码从数据库中被取出,在当前页面被触发。用户不会发现自己被攻击,比如订单留言功能。

2.3 基于 DOM 的 XSS

对于DOM XSS,攻击是在客户端直接在运行时注入到应用程序中的。详情见这里

3. XSS 攻击的危害

  • 盗取受害者 cookie,登录他人账户;
  • 钓鱼操作,操控js代码可以动态生成一个html文档;
  • 收集你的隐私数据,回传到攻击者服务器;
  • 劫持访问,在恶意脚本中插入JS代码,重定向到其他页面,比如真人XXX在线发牌;

4. 防范措施

  • 除了在允许的位置,永远不要插入不受信任的数据
  • 在将不受信任的数据插入 HTML 元素内容之前进行 HTML 编码
  • 在谷歌浏览中默认开启XSS保护。

4.1 永远不要插入不受信任的数据

任何可疑的地方都要进行转义处理。

脚本
<script>...NEVER PUT UNTRUSTED DATA HERE...</script>

注释
<!--...NEVER PUT UNTRUSTED DATA HERE...-->

属性名称
<div ...NEVER PUT UNTRUSTED DATA HERE...=test />

标签名称
<NEVER PUT UNTRUSTED DATA HERE... href="/test" />

 CSS
<style>
...NEVER PUT UNTRUSTED DATA HERE...
</style>

4.2 对插入的文本进行 HTML 编码

对 实体标签进行编码处理,比如 XML 中的 5 个重要字符(&, <, >, ", ')

 & --> &amp;
 < --> &lt;
 > --> &gt;
 " --> &quot;
 ' --> &#x27;

4.3 URL 参数编码

<a href="http://www.somesite.com?test=...ENCODE UNTRUSTED DATA BEFORE PUTTING HERE...">link</a >

4.3 过滤可疑的代码

对字符串进行 DOM parse 校验,过滤不安全的内容。

  • 移除用户上传的 dom 属性,如 onerror
  • 移除用户上传的 style 节点,script节点,iframe节点
  • 限制 URL 输入,假如通过 GET 请求访问该 url 会导致攻击成功,那就不能允许用户输入URL地址,否责这个请求很容易发起,比如 填写头像地址;

5. 通用的防御方法

XSS 的防御措施可以归纳为:输入过滤,输出转义,另外还可以配合下面的措施尽量减少 XSS 的危害性。

5.1 使用 HTTPOnly cookie 标志

避免 cookie 被脚本读取

5.2 使用 CSP 策略

配置 content-security-content,限制可以访问的业务域名,可以防止信息被其他服务收集。

相关文章

网友评论

      本文标题:XSS 攻击防御

      本文链接:https://www.haomeiwen.com/subject/cvpvwltx.html