反射式XSS和存储式XSS的区别在于: 反射式XSS不存储黑客注入的xss脚本,直接将其返回给用户。而存储式xss会将黑客注入的xss脚本存储到自己后台的数据库服务器中。当用户访问正常网站的时候,网站的服务器从数据库中读取出黑客注入的xss脚本,然后返回给用户,从而导致用户执行了这一段脚本。
1、反射式跨站脚本攻击
反射式XSS的攻击路径是:前端-->后端-->前端
2、存储式跨站脚本攻击
存储式XSS的攻击路径是:前端-->后端-->数据库-->后端-->前端
3、DOM跨站脚本攻击
DOM跨站脚本攻击也是属于反射式XSS的一种,但因为其比较特殊,因此将DOM-based XSS单列出来。 DOM-based XSS是基于文档对象模型 (Document Object Model,DOM)的一种XSS漏洞,DOM-based XSS的输出点在DOM上。
3.1 什么是文档对象模型DOM呢?
文档对象模型DOM是HTML和XML文档之间的编程接口,它提供了对文档的结构化的表述,DOM定义了访问和操作HTML文档的标准方法。DOM可以将一份HTML文档以树结构表示出来。你可以编写javascript代码遍历这个树结构,去遍历/获取/修改对应的节点、对象和值。
在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑从而修改页面的元素。也就是说,客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用。
4、XSS防御
XSS防御的总体思路是:对输入 (和URL参数)进行过滤,对输出进行编码 。 也就是对提交的所有内容进行过滤,对url中的参数进行过滤,过滤掉会导致脚本执行的相关内容;然后对动态输出到页面的内容进行html编码,使脚本无法在浏览器中执行。 虽然对输入过滤可以被绕过,但是也还是会拦截很大一部分的XSS攻击 。