$ _GET和fopen的问题

时间:2011-04-13 13:37:48

标签: php

$_GET方法存在一个奇怪的问题。我有一个像这样的PHP代码:

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

当我写文件路径参数时我自己运行良好但是当我从$ _GET方法获取文件名时它会向我显示一些错误,例如路径错误。

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

3 个答案:

答案 0 :(得分:3)

排名第一的规则是清理您的输入。像这样使用$ _GET只是在寻找麻烦。 做正确的事。将$ _GET值放入变量中,验证它是否有效输入然后尝试打开该文件。

答案 1 :(得分:2)

正如底部所说:

  1. 尝试使用print,print_r或var_dump
  2. 转储$ _GET
  3. 尝试sanitize the input
  4. 删除代码中的前导$(** $ ** fopen)
  5. 使用if(is_file($ path)
  6. 测试指定目录中是否存在文件
  7. 不是文件扩展或权限导致的问题吗?
  8. 还有更多。它还取决于您使用的系统(Win,Unix,Mac ..)。

答案 2 :(得分:1)

不要在没有验证的情况下使用用户输入,特别是不要在主机上打开文件!我不能夸大这是多么危险。如果有人在您的应用程序中输入值为“../../../../../etc/password”的GET字符串,该怎么办?