XSS攻击
Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。
根据攻击的来源,XSS 攻击可分为存储型、反射型和 DOM 型三种
# 存储型攻击(持久型跨站)
持久型跨站是最直接的危害类型,跨站代码存储在服务器。
存储型攻击常发生在微博论坛等用户发帖、提交文章评论等地方。
# 反射型攻击(非持久型跨站)
非持久型跨站:反射型跨站脚本漏洞,最普遍的类型。属于服务端安全漏洞。
反射型攻击主要发生在一些带有诱导性的链接的按钮邮件等。
# DOM型攻击
DOM型攻击:属于客户端安全漏洞。
# 如何防范?
- 客户端对用户输入的内容进行安全符转义,服务端对上交内容进行安全转义。
- 服务端渲染开启模板引擎自带的 HTML 转义功能。
- 避免内联事件,尽量不要使用
onLoad="onload()"
、onClick="go()"
这种拼接内联事件的写法。在JavaScript 中通过.addEventlistener()
事件绑定会更安全。 - 避免拼接 HTML,前端采用拼接 HTML 的方法比较危险,如果框架允许,使用 createElement、setAttribute 之类的方法实现。或者采用比较成熟的渲染框架,如 Vue/React 等。
- 时刻保持警惕在插入位置为 DOM 属性、链接等位置时,要打起精神,严加防范。
- 通过 CSP、输入长度配置、接口安全措施等方法,增加攻击的难度,降低攻击的后果。
- 主动检测和发现,可使用 XSS 攻击字符串和自动扫描工具寻找潜在的 XSS 漏洞。
- 尽量避免三方跨域提交内容到服务端
- 设置 HTTP-only Cookie: 禁止 JavaScript 读取某些敏感 Cookie,攻击者完成 XSS 注入后也无法窃取此 Cookie。
- 使用验证码:防止脚本冒充用户提交危险操作。