什么是XSS?
XSS是Cross-Site Scripting(跨站脚本攻击)的简称。它是通过在目标网站注入恶意的脚本,使其在用户的浏览器上执行,恶意的脚本在执行过程中可能会发送用户cookie信息或者session给攻击者。通过这种攻击方式,可以获取用户的敏感信息,如密码。
为了和 CSS 区分,这里把攻击的第一个字母改成了 X,于是叫做 XSS。
XSS攻击的三种形式?
根据XSS攻击的方式分为三种类型:
- 存储型XSS
- 反射型XSS
反射型XSS的关键在于将请求发送到web服务器时,恶意代码是作为参数的一部分。
- DOM型XSS
与存储型XSS与反射型XSS的不同,存储型XSS和反射型XSS关注的是恶意代码的来源,而Dom型XSS关注的是恶意代码是如何能够执行的。
DOM指的是Document Object Model(文档对象模型)的简称,JavaScript在修改浏览器页面的元素的时候就是通过修改DOM中的元素来实现的。
如上是来自w3c的图片,如我们需要修改<a>标签对应的链接,我们就只需要修改DOM文档中对应的<a>标签。
存储型XSS和反射型XSS是不是都是Dom型XSS呢?
存储型XSS并不一定是Dom型Xss,比如攻击者将恶意代码提交都web服务器,但是web服务器采用JSP这类
技术时,恶意代码在后台就直接输出到了HTML中,不会再在前台修改DOM。
同理,反射型XSS将恶意代码提交到了web服务器,同事web服务器也采用JSP这类技术时,恶意代码在
后台就会直接拼接到了HTML中,不会再在前台修改DOM。
所以存储型XSS和DOM型XSS都不完全是Dom型XSS。
为什么网上很多资料说dom型xss属于反射型xss?
反射型xss主要是指恶意代码作为web请求的参数传送到web服务器之后,浏览器打开新的页面时执行
恶意代码。在web服务器没有使用类似于JSP这类技术时,web请求完之后,请求参数可能会通过DOM的
形式注入。所以说DOM型XSS是反射型XSS中的一种。
如何预防XSS?
预防XSS攻击有几个关键点
-
防止用户提交的恶意代码生效
使用转义可以在一定程度上防止恶意代码生效。通常攻击者注入的代码都需要使用 & < > " ' /等字符来截断前面代码段。所以我们可以对这些字符进行转义。& --> & < --> < > --> > " --> " ' --> ' / --> /
- 防止浏览器执行恶意代码
防止浏览器执行恶意代码可以使用纯前端渲染。 - 防止恶意代码获取用户的敏感信息
设置HTTP-ONLY可以限制JavaScript不能获取Cookie。
参考:
FreeBuf 文章:如何防止XSS攻击?
Cross Site Scripting Prevention Cheat Sheet
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。