这种 PHP 判断漏洞 BUG 是不是无解了?

2020-05-13 20:11:49 +08:00
 jiangchuankyo
<?php
header("Content-type: text/html; charset=gbk");
$a = '度和';
if(strpos($a, '群')) {
echo '存在';
}else{
echo '不存在';
}
?>

文件是 GBK 的, 判断显示存在, 这是我在写敏感词过滤时无意发现的, 这种 BUG 太严重了,

因为度的后半个字与和的前半个字切割下来就是群字, 当然存在这种 BUG 的字是数不胜数的, 这个只是我偶然才发现的其中之一,

同样测试, str_replace, preg_match(), strstr() 等一切与字符串沾边的函数都具有该 BUG,

如果你的文件是 GBK 编码, 或就算是 UTF8 编码但你处理的字符串是 GBK 是也会有该 BUG, 这种底层编码 BUG 是不是无解的
825 次点击
所在节点    问与答
2 条回复
dickfu
2020-05-14 00:15:19 +08:00
也就是说楼主并不知道 `mb_strpos()` 这种东西的存在呗?
jiangchuankyo
2020-05-14 09:23:35 +08:00
mb_strpos() 测试同样显示判断存在

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/671369

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX