一天一题:说说你对XSS攻击的了解?

2,060 阅读2分钟

1.XSS攻击是如何产生的?

黑客在你的浏览器中插入一段恶意 JavaScript 脚本,窃取你的隐私信息、冒充你的身份进行操作。这就是 XSS 攻击(Cross-Site Scripting,跨站脚本攻击)

因为浏览器无法区分脚本是被恶意注入的还是正常的内容,它都会执行,况且 HTML 非常灵活,可以在任何时候对它进行修改。

2.知道XSS有哪几种类型吗?

  • 反射型 XSS (也叫非持久型)
  • 基于 DOM 的 XSS
  • 存储型 XSS (也叫持久型 XSS)

3.分别说一下它们的实现原理

反射型:顾名思义,恶意 JavaScript 脚本属于用户发送给网站请求中的一部分,随后网站又将这部分返回给用户,恶意脚本在页面中被执行。一般发生在前后端一体的应用中,服务端逻辑会改变最终的网页代码。

基于DOM型:目前更流行前后端分离的项目,反射型 XSS 无用武之地。但这种攻击不需要经过服务器,我们知道,网页本身的 JavaScript 也是可以改变 HTML 的,黑客正是利用这一点来实现插入恶意脚本。

存储型:又叫持久型 XSS,顾名思义,黑客将恶意 JavaScript 脚本长期保存在服务端数据库中,用户一旦访问相关页面数据,恶意脚本就会被执行。常见于搜索、微博、社区贴吧评论等。

4.说一说它们之间的区别

反射型的 XSS 的恶意脚本存在 URL

存储型 XSS 的恶意代码存在数据库里。

而基于DOM型的XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,其他两种 XSS 都属于服务端的安全漏洞。

5.黑客可以通过XSS攻击做哪些事儿?

  • 盗取用户 Cookie
  • 未授权操作
  • 修改 DOM
  • 刷浮窗广告
  • 发动 XSS 蠕虫攻击
  • 劫持用户行为,进一步渗透内网 (...太多了)

6.XSS攻击如何进行防护?

  • 一切用户输入皆不可信,在输出时进行验证
  • 将 HTML 元素内容、属性以及 URL 请求参数、CSS 值进行编码
  • 当编码影响业务时,使用白名单规则进行检测和过滤
  • 使用 W3C 提出的 CSP (Content Security Policy,内容安全策略),定义域名白名单
  • 设置 Cookie 的 HttpOnly 属性