我有一个奇怪的问题$_GET
方法。我有一个PHP代码:
$fopen("files/" . $_GET['file'], "r");
当我写文件路径参数我的自我它的运行很好,但是当我从$ _GET方法来获取文件名就说明了我一些错误,如路径是错误的。
- 它有什么问题?
- 是否有
$_GET
方法的任何特殊编码将其解码为正确的字符串样式。我试过urldecode,但没有做任何改变。
我有一个奇怪的问题$_GET
方法。我有一个PHP代码:
$fopen("files/" . $_GET['file'], "r");
当我写文件路径参数我的自我它的运行很好,但是当我从$ _GET方法来获取文件名就说明了我一些错误,如路径是错误的。
$_GET
方法的任何特殊编码将其解码为正确的字符串样式。我试过urldecode,但没有做任何改变。不要经常使用用户输入而无需验证,尤其是不能在主机上打开文件!我无法夸大这是多么危险。如果某人在应用程序中输入了值为'../../../../../etc/password'的GET字符串,该怎么办?
我陷入了困境。你是对的。我不知道为什么我这样做,而我有我的数据库中存储的变量,可以用来获取文件ID和下一个...感谢无论如何,你们所有人! – MahanGM 2011-04-13 16:37:05
在底部说:
可能还有更多。它也取决于你使用的系统(Win,Unix,Mac ..)。
这应该是对问题的评论,而不是回答。 – Treffynnon 2011-04-13 13:42:02
嗨,我意识到,但我没有看到添加注释按钮的问题。我是盲人还是ff 4不喜欢stackoverflow? :-) – Bery 2011-04-13 13:47:58
@Bery Naah。你只是没有足够的声誉。 – Emmerman 2011-04-13 13:52:38
第一条规则是消毒您的输入。像这样使用$ _GET只是要求麻烦。 做正确的事情。将$ _GET值放入一个变量中,确认它是有效的输入,然后尝试打开文件。
你知道,你指出了一个好东西,我会解决它。顺便说一下,我验证了我的数据,它确实是正确的。 – MahanGM 2011-04-13 16:32:42
你是否试图打印你得到的? – 2011-04-13 13:40:25
(a)您使用什么URL来查看页面? (b)'var_dump($ _ GET);'显示了什么?还要注意,$ _GET不是一种方法,它是一个变量,特别是PHP的[Superglobals](http://php.net/manual/en/language.variables.superglobals.php)之一。 – 2011-04-13 13:41:01
'echo“文件/”。 $ _GET ['file'];'向我们展示结果 – Emmerman 2011-04-13 13:41:34