xss攻防

867 阅读3分钟

前言

跨站脚本工具Cross-site scripting(XSS)是一种安全漏洞,攻击者可以利用这种漏洞在网站上注入恶意的客户端代码。从而,攻击者可以突破网站的访问权限,冒充受害者。是最为常见的Web应用程序漏洞之一

容易发生XSS攻击的两种情况:

  1. 数据从一个不可导的链接进入到一个web应用程序。
  2. 没有过滤掉恶意代码的动态内容被发送给web用户。

恶意内容一般是JavaScript,但是,有时候也会包括HTMLFLASHXSS攻击的形式千差万别,但是,它们的共同点为:将一些隐私数据像cookie、session发送给攻击者,将受害者重定向到一个由攻击者控制的网站,在受害者的机器上进行一些恶意操作。

XSS攻击类型

XSS攻击可以分为3类:

  1. 存储型(持久型)
  2. 反射型(非持久型)
  3. 基于DOM
  • 存储型XSS:注入脚本永久存储在目标服务器上。当浏览器请求数据时,脚本从服务器上传回并执行。

  • 反射型XSS:当用户点击一个恶意链接,或者提交一个表单,或者进入一个恶意网站时,注入脚本进入被攻击者的网站。Web服务器将注入脚本,比如一个错误信息,搜索结果等,返回到用户的浏览器上。浏览器会执行这段脚本,因为,它认为这个响应来自可信任的服务器。

  • 基于DOM的XSS被执行的恶意脚本会修改页面脚本结构。

X-XSS-Protection

这个header能在用户浏览器中开启基本的XSS防御。它不能避免一切XSS攻击,但它可以防范基本的XSS。例如,如果浏览器检测到查询字符串中包含类似<script>标签之类的内容,则会阻止这种疑似 XSS 攻击代码的执行。这个 header 可以设置三种不同的值:0、1 和 1; mode=block。如果你想了解更多关于如何选择模式的知识,请查看 X-XSS-Protection 及其潜在危害 一文

防御

如何防御跨站脚本攻击?

  • 表单提交时按照预期格式进行数据验证
  • 服务端接收数据时验证,渲染时转码
  • 尽量减少动态改变DOM结构的操作
  • 头部设置HttpOnly Cookie
  • 使用WAF(Web Application Firewall)

基于现代框架,可以引入xss组件提供全套XSS相关前端API,

参考文档:

  1. github.com/leizongmin/…
  2. jsxss.com/zh/index.ht…
npm install xss --save

针对XSS的防御,必须遵循的准则就是:不要相信用户输入的任何东西,不要将用户输入的数据变为代码执行,从而混淆了原本的语义。要根治xss攻击。需要了解xss所在的不同场景。

  • 减少xss危害的方法:

  1. 添加httponly属性
  2. 系统后台增加ip访问限制。主要针对获取cookie伪造管理员登入方式。