PHP代码审计笔记-XSS跨站脚本

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 脚本:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190401A0ACZY00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券