xss的防御
反射型xss测试的时候,可以使用扫描器,或者burp进行fuzz
存储型xss测试的时候,可以直接把字典中的payload都塞进去,根据弹窗的编号,就知道是哪个。但这个容易被发现,所以可以先试探一下特殊符号是否被过滤。
DOM型xss测试,主要以阅读js代码为主。在页面上找打输入点的相关dom节点,在开发者选项中搜索一下,根据搜索结果去看是否被相关的JS操作,如果有js的操作,就去看我们的输入操作后输出在哪个地方,就按照常规的xss思路进行构建。
防御一般来说,做实体字符编码,htmlspecialchars(), 函数功能就是把特殊符号,比如尖括号,引号转换成实体编码,这样就不会再输入的地方去干扰页面源代码。
经过实体字符编码后,用户输入的特殊符号在源代码中就变成编码,但是在页面输出的时候,还是会显示成原来的样子。
当输出位置在元素内容里面,并且被实体编码后,基本上就没有xss的可能了。
但是如果输出在事件属性中,还是有可能存在绕过的可能性。
比如在a标签中,,这种形式,没有尖括号也没有引号,就有可能被绕过。如果存在类似这种的情况,需要在链接属性中加上http://或https://的正则表达式来限制。
xss的绕过方式
绕过过滤
1、前端限制,直接用F12开发者选项修改js既可,或者用burpsuite绕过。
2、字符过滤,双写,大小写绕过 通过注释符绕过,也可以通过换行符绕过
绕过编码
1、明确浏览器解析的机制
2、明白机制后,选择对应的编码
(1)输出在标签间的情况:测试<>是否被过滤或转义,若无则直接
(8)当我们的XSSpayload位于这些标签中间时,并不会解析,除非我们把它们闭合掉。