【问题标题】:Prevent PHP from opening documents above documentroot防止 PHP 打开 documentroot 以上的文档
【发布时间】:2013-01-14 00:00:18
【问题描述】:

希望有人能对此有所了解。

我的 php 脚本目前可以使用 require_once(../../passowrds.php); 等相对路径打开文档根目录上方的文件;

1) 是否有强制在文档根目录上方打开绝对路径?

2)访问文档根目录以上文件最安全的方法是什么?

提前致谢

【问题讨论】:

  • “高于文档根目录”是什么意思
  • @TheCOMPLETEPHPNewbie “文档根目录”是网络服务器指向的目录,可能是“/var/www/myapp/htdocs”; “上面”位于目录“/var/www/myapp”、“/var/www”、“/var”和“/”。 (而且,隐含地,它们的子级,例如“/var/www/someonelsesapp”)
  • 了解您的场景背景会很有用:您是否打算允许不受信任的用户上传他们自己的 PHP 文件,并希望限制他们可以运行的代码?如果是这样,您是否考虑过他们也可以运行file_get_contents 或类似方法并以这种方式“窃取”代码?
  • 用户不会上传代码,只是运行我当前的脚本。
  • 我设置网站的方式是拥有多个包含文件。这使我能够将重要的代码保留在文档根目录中,但将敏感文档保留在根目录之上。

标签: php permissions document-root


【解决方案1】:

要求文件写入的最安全方法 $a = 'samplevalue'; 以及写入 which passowrds.php 的顶部; if($a != 'samplevalue'){ header('位置:http://www.example.com/'); }

passowrds.php :

if($r_key != 'a23b24c25samplekey' or empty($r_key)){ header('Location: http://www.example.com/'); exit(); } // r_key not equal a23b24c25samplekey or empty forward main page
bla.. bla.. bla..

sample.php:

  $r_key = 'a23b24c25samplekey';
  require_once(../../passowrds.php);

并且可以用于相对路径;

   $path = $_SERVER['DOCUMENT_ROOT'];
   $path .= "/yourfolder/passowrwds.php";
   require_once($path);

require_once(../../passowrds.php);比 $path = $_SERVER['DOCUMENT_ROOT']; 最安全 $path .= "/yourfolder/passowrwds.php"; require_once($path);

【讨论】:

  • 谢谢,我想这应该会有所帮助
  • 我不知道这个答案应该解决什么问题。换句话说,我看不出这是什么成果。
  • 您的 if 目标是阻止访问包含文件的根目录;创建所有目录的空索引。因此,在不知道文件名的情况下无法访问该文件。此外,如果您使用上述关键系统重要文件,如 index.php 用户无法访问。对不起,我没有帮助。我的英语有点弱。美好的一天。
【解决方案2】:

是否有强制在文档根目录上方打开绝对路径?

我将其解释为“是否可以使用相对路径来防止 above-docroot-access?”。答案是:据我所知,没有手动验证路径字符串(寻找过多的“..”等)

访问文档根目录以上文件的最安全方法是什么?

这取决于你对“最安全”的定义;在什么情况下这可能会导致问题?

但是,一个好的开始是验证控制它的任何用户输入,而不是简单地做例如require_once($_GET["file"]).

【讨论】:

  • @TheCOMPLETEPHPNewbie:它的目的是作为一个答案(尽管不完整)。
  • @JmsBnd:好的,但是您的顾虑是什么导致您提出这个问题?
  • 我正在努力防止用户入侵我的网站并使用相对路径访问密码文档的情况
  • @JmsBnd:如果用户“入侵”您的网站,因为他们可以访问您的 PHP 代码,那么为时已晚。
  • 我想这是真的。只需检查不需要进一步的要求来保证它的安全
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
相关资源
最近更新 更多