我的朋友在我的脚本中发现了一个问题,它提供了对根文件的访问.
这个url给出了passwd文件:
http://site.com/attachment.PHP?file=../../../../../../etc/passwd
如何逃脱这个安全漏洞?
有几种不同的解决方案.
如果只能有文件名,则basename()解决方案可行.
如果只能有文件名,则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,strlen($basedir)) !== $basedir) { header ("HTTP/1.0 403 Forbidden"); exit; }
还有一个有用的PHP配置选项open_basedir