gpt4 book ai didi

php - 如何使用 Php 删除查询字符串 URL 中的空字节?

转载 作者:可可西里 更新时间:2023-11-01 00:58:09 24 4
gpt4 key购买 nike

我想知道如何删除 URL 中的空字节 (\0)。我知道从 Php 5.3.4 开始,这个安全漏洞已经修复,但也许某些东西可以从运行 php 5.3 或更低版本的其他服务器上的恶意用户传递。使用查询字符串可能会发生这种情况,我想了解如何保护我的 URL 以发布我的脚本,而不会对此错误产生安全隐患。

示例:http://www.example.com/download.php?text=\0

我有两个假设:

A) $text = str_replace("\0", "", $text);

B) $text = str_replace('\0', '', $text);

什么版本是安全和正确的?甲还是乙?谢谢。

PS:我在 CentOS 上运行 php 5.6.17...使用 Apache 2.4。

最佳答案

这与安全无关,但与 php 处理字符串的方式有关:

  • 计算双引号字符串
  • 不计算单引号字符串

\是转义字符,所以后面的字符被转义。

要在双引号字符串中匹配它,您必须在前面加上一个额外的反斜杠:\\0

编辑:

你说“在 php 中删除空字节”,然后说“如果我把 $text = str_replace('\0', '', $text);\0 将被删除”。

这意味着在您的字符串中没有空字节,而是一个反斜杠后跟一个零(≈ 空字节的表示)。

例子:

echo strlen( 'http://www.example.com/download.php?text=' );     // output: 41
echo strlen( "http://www.example.com/download.php?text=\0" ); // output: 42 (Null)
echo strlen( 'http://www.example.com/download.php?text=\0' ); // output: 43

echo strlen( '\0' ); // output: 2
echo strlen( "\0" ); // output: 1 (Null)

还有:

echo strlen(trim( "http://www.example.com/download.php?text=\0" ));

会输出,41,因为trim移除了空字节

echo strlen(trim( 'http://www.example.com/download.php?text=\0' ));

将输出 43,因为 trim 不会删除 \0

关于php - 如何使用 Php 删除查询字符串 URL 中的空字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35344303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com