pikachuxss之过滤、htmlspecialchars

本文探讨了XSS跨站脚本攻击的过滤机制,通过实例展示了如何利用大小写绕过、htmlspecialchars函数的局限性进行XSS攻击。同时,提到了浏览器对JavaScript注入的响应,以及如何构造有效payload来规避过滤。文章最后总结了XSS常见的绕过手法,对于理解Web安全和提升防护能力具有指导意义。

pikachu

xss之过滤

xss过滤就是提交上来的数据中的敏感词汇直接过滤掉,如

尝试了许多的命令如:

插入script:<scr<script>ipt>alert("XSS")</scr<script>ipt>
结果出现:别说这些’>'的话,不要怕,就是干!

加入href超链接:<a href="javascript:alert(1)">XSS Test</a>
出现:别说这些’'的话,不要怕,就是干!

下面是尝试:

image-20220912181311749

都没有成功,但是我忘了最常见的大小写绕过:<ScrIpt>alert("XSS")</scRiPt>结果就出现了:

image-20220912181556805

查看了源码才发现,仅仅是对<script进行过滤:
image-20220912181708804

随后可以任意进行插入命令如:<button onclick="alert('xss')">点我</button>
显示:image-20220912182024242

大佬总结

(2条消息) XSS常见的绕过手法_Redredredfish的博客-优快云博客_xss绕过

xss之htmlspecialchars

**htmlspecialchars() 函数:**把预定义的字符 “<” (小于)和 “>” (大于)转换为 HTML 实体,把 < 和 > 转换为实体常用于防止浏览器将其用作 HTML 元素。

该函数默认不过滤单引号,只有设置才可以过滤单引号;

学习构造payload:'onclick='alert(111)' 出现:
image-20220912201834508

题外又发现了payload:javascript:alert(1) 出现:
image-20220912201958168
源码:
在这里插入图片描述

### 如何使用 `htmlspecialchars` 防止 XSS 攻击 为了有效防止跨站脚本攻击(XSS),在 PHP Web 应用程序中,`htmlspecialchars()` 是一种常用且有效的手段。该函数能够将特殊字符转换成 HTML 实体,从而避免恶意代码被执行。 #### 函数说明 `htmlspecialchars()` 可以把预定义的字符 "<" (小于号), ">" (大于号), "&" (和号) 以及双引号 ("") 转换成对应的 HTML 实体[^1]。 #### 参数解释 - **string**: 待转换的字符串。 - **flags** (可选): 表示应使用的额外标志位,默认为 `ENT_COMPAT | ENT_HTML401`。推荐设置为 `ENT_QUOTES` 来同时处理单引号和双引号。 - **encoding** (可选): 指定所采用的字符集编码方式,默认为 ISO-8859-1。建议显式声明 UTF-8 编码以确保兼容性。 - **double_encode** (可选): 如果设为 false,则不会重复编码已存在的实体;默认情况下会再次编码已经存在过的实体。 #### 示例代码 下面给出了一段完整的 PHP 代码片段,用于展示如何接收 GET 请求中的用户输入,并对其进行适当的安全处理后再显示出来: ```php <?php // 假设从 URL 查询参数获取用户提交的数据 $userInput = isset($_GET['input']) ? $_GET['input'] : ''; // 对潜在危险的 HTML 特殊字符进行转义 $safeOutput = htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8'); // 向浏览器发送经过安全处理后的响应内容 echo '<p>您输入的内容是:</p>'; echo "<div>" . $safeOutput . "</div>"; ?> ``` 这段代码首先检查是否存在名为 `input` 的查询参数,如果存在则将其赋值给 `$userInput` 变量。接着调用了 `htmlspecialchars()` 方法对可能含有恶意脚本的原始数据进行了过滤,最后才放心地将结果呈现给了访问者。 通过这种方式,在任何地方只要涉及到向客户端输出动态生成的内容时都应当考虑应用类似的防护措施,以此保障整个系统的安全性[^3]。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值