0x01 最简单的XSS
输入即输出,漏洞代码示例:
测试语句:
安全建议:将输出到页面的参数转义为html实体编码。
0x02 编码解码
编码解码输出时,可能导致XSS编码绕过的情况。
漏洞代码示例:
测试语句:
这边代码逻辑中,问题根源在于最后一句的url解码输出,导致存在三重url编码绕过的情况。
根据实际情况,给出安全建议:HTML ENCODE处理后直接输出变量,无需再次url解码。
0x03 HTML不规范
HTML代码编写不规范,可能导致的问题,我们来看一个案例:
漏洞代码示例:
获取参数,在一个input元素的属性里输出这个变量,我们注意到这里使用的是单引号闭合,而函数默认只是转化双引号("), 不对单引号(')做转义。
因此,可以用单引号闭合,
测试语句:
针对这种情况的修复安全建议:将HTML标签的属性值用双引号引起来。
0x04 黑名单过滤
通过在全局引入过滤函数,提供黑名单过滤,
漏洞代码示例:
从html编写不规范,我们可以使用单引号闭合,然后去进一步构造触发事件,可是常见的XSS事件大多都被过滤了,
怎么快速地去找到可以拿来利用的XSS触发事件呢? 答:XSS FUZZ。
前提是要收集积累一些触发事件,利用自己编写python脚本进行fuzz:
虽然fuzz出来很多事件,但要结合具体输出位置去分析,找到合适的事件,最终得出Payload。
测试语句:
0x05 漏洞防护
针对具体的漏洞情况去分析漏洞原因,给出修复建议,详见如上。常见的xss修复方法如下:
1、PHP提供了两个函数htmlentities()和htmlspecialchars() ,把一些预定义的字符转换为 HTML 实体。
防御代码示例:
2、其它的通用的补充性防御手段
最后,附XSS FUZZ 脚本:
领取专属 10元无门槛券
私享最新 技术干货