XSS 攻击防御

2021-09-08  本文已影响0人  菜鸡前端

1. XSS介绍

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

2. 攻击原理

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

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

2.1 反射型XSS

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

2.2 存储型XSS

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

2.3 基于 DOM 的 XSS

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

3. XSS 攻击的危害

4. 防范措施

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 校验,过滤不安全的内容。

5. 通用的防御方法

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

5.1 使用 HTTPOnly cookie 标志

避免 cookie 被脚本读取

5.2 使用 CSP 策略

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

上一篇下一篇

猜你喜欢

热点阅读