Open suukii opened 4 years ago
常见于带有用户保存数据的网站功能,比如论坛的发帖功能,商品评论等,用户的输入会被提交到服务器并保存到数据库中,攻击的步骤如下:
反射型 XSS 和存储型 XSS 的区别是:
反射型 XSS 攻击一般是利用 URL 传递参数的功能,比如网站的搜索或者跳转,攻击步骤如下:
DOM型 XSS 的攻击步骤是:
DOM型 XSS 与前两种 XSS 的不同在于,在 DOM型 XSS 中,取出和执行恶意代码这两个步骤都发生在用户浏览器,属于前端 JavaScript 自身的安全漏洞,而前两种 XSS 则属于服务端的安全漏洞。
这两种攻击都是从在服务端取出恶意代码后,插入到响应的 HTML 中,导致浏览器在解析 HTML 的过程中执行了恶意代码,所以要防御这两种攻击,就要隔绝恶意代码被插入 HTML 的可能,一般有两种常用的防御手段:
纯前端渲染的过程
转义 HTML
要使用专业的转义库,对 HTML 模板中的各处插入点都进行充分的转义
DOM 型 XSS 攻击实际上是前端的 JavaScript 代码本身不够严谨,把不可信的数据当作代码执行了。
避免把不可信的数据插入到页面中,所以在使用 .innerHTML
,.outerHTML
和 document.write()
的时候要注意,最好尽量使用 .textContent
和 setAttribute()
明确告诉浏览器我们要设置的内容是文本和属性,这样浏览器就不会把轻易地被欺骗,执行隐藏其中的恶意代码了。
有一些 API 能够把字符串当作代码来执行,比如 JS 的 eval
, setTimeout
, setInterval
等,DOM 内联事件 onload
, onclick
等,还有 <a>
标签的 href
属性,所以要避免把不可信的数据拼到字符串中传给这些 API
addEventListener()
概念
全称是 Cross-Site Scripting(跨站脚本攻击),是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户浏览器中运行,从而获取用户的敏感信息如 Cookie 和 SessionID 等,或者利用这些信息冒充用户向网站发起攻击者定义的请求。
XSS 的本质是:恶意代码未经过滤,和网站正常的代码混在一起,浏览器无法分辨哪些是可信脚本,哪些是恶意脚本,导致恶意脚本被执行。
攻击来源
在处理输入时,以下内容都不信:
XSS 分类