2011-04-13 44 views
0

我有一个奇怪的问题$_GET方法。我有一个PHP代码:

$fopen("files/" . $_GET['file'], "r"); 

当我写文件路径参数我的自我它的运行很好,但是当我从$ _GET方法来获取文件名就说明了我一些错误,如路径是错误的。

  1. 它有什么问题?
  2. 是否有$_GET方法的任何特殊编码将其解码为正确的字符串样式。我试过urldecode,但没有做任何改变。
+4

你是否试图打印你得到的? – 2011-04-13 13:40:25

+3

(a)您使用什么URL来查看页面? (b)'var_dump($ _ GET);'显示了什么?还要注意,$ _GET不是一种方法,它是一个变量,特别是PHP的[Superglobals](http://php.net/manual/en/language.variables.superglobals.php)之一。 – 2011-04-13 13:41:01

+0

'echo“文件/”。 $ _GET ['file'];'向我们展示结果 – Emmerman 2011-04-13 13:41:34

回答

1

不要经常使用用户输入而无需验证,尤其是不能在主机上打开文件!我无法夸大这是多么危险。如果某人在应用程序中输入了值为'../../../../../etc/password'的GET字符串,该怎么办?

+0

我陷入了困境。你是对的。我不知道为什么我这样做,而我有我的数据库中存储的变量,可以用来获取文件ID和下一个...感谢无论如何,你们所有人! – MahanGM 2011-04-13 16:37:05

2

在底部说:

  1. 尝试转储$ _GET与打印的print_r或后续代码var_dump
  2. 尝试sanitize the input
  3. 在你的代码删除开头$(** $ ** fopen)
  4. 测试指定目录中是否存在if(is_file($ path)
  5. 是不是由文件扩展或权限造成的问题?

可能还有更多。它也取决于你使用的系统(Win,Unix,Mac ..)。

+1

这应该是对问题的评论,而不是回答。 – Treffynnon 2011-04-13 13:42:02

+0

嗨,我意识到,但我没有看到添加注释按钮的问题。我是盲人还是ff 4不喜欢stackoverflow? :-) – Bery 2011-04-13 13:47:58

+0

@Bery Naah。你只是没有足够的声誉。 – Emmerman 2011-04-13 13:52:38

3

第一条规则是消毒您的输入。像这样使用$ _GET只是要求麻烦。 做正确的事情。将$ _GET值放入一个变量中,确认它是有效的输入,然后尝试打开文件。

+0

你知道,你指出了一个好东西,我会解决它。顺便说一下,我验证了我的数据,它确实是正确的。 – MahanGM 2011-04-13 16:32:42