我的 friend 在我的脚本中发现了一个问题,它为根文件提供了访问权限。

此网址提供了passwd文件:

http://site.com/attachment.php?file=../../../../../../etc/passwd

如何逃避此安全漏洞?

最佳答案

有几种不同的解决方案。
如果只能有一个文件名,则可以使用basename()解决方案。

但是,如果可以采用路径,则需要更复杂的解决方案

//assume current directory, but can be set anything. Absolute path of course
$basedir   = dirname(__FILE__);
//assume our files are below document root.
//Otherwise use it's root dir instead of DOCUMENT_ROOT
$filename  = realpath($_SERVER['DOCUMENT_ROOT'].$_GET['file']);
if (substr($filename,0,strlen($basedir)) !== $basedir) {
  header ("HTTP/1.0 403 Forbidden");
  exit;
}

还有一个有用的PHP配置选项open_basedir

10-08 03:39