2013-10-04 74 views
0

我有一个php脚本,上传图片到服务器上的一个目录。但是我看到一些评论提到图像不应该上传到根目录以达到安全考虑。我不确定如果我上传到目前正在上传的目录中可能会出现的安全漏洞。这里是图像存储的路径。的htdocs /图像/ filenames.jpg。 A screenshot of my directory is shown so that it would be clear图片上传目录安全

请以安全的方式告知我以何种方式存储图像。

+0

如果您将文件夹的chmod设置为644并且使用时间戳重命名图像,则应该没问题 – JTC

+0

如果chmod设置为644,则允许用户将文件上载到此目录,因为这里是http:// www。 draac.com/chmodchart.html这个词将只能读取。当多个用户同时上传时,是否会有重复的时间戳? – codeGEN

+0

它是基于某人可能上传php文件或其他可执行文件的假设而增加的安全性。在webroot外部有一个上传目录会将这些文件放出或到达。 您可以在上传过程中将目录chmod改为755,然后再设置回644。 – Daniel

回答

1

关于图片上传的安全问题已经有很多话题,但首先应该做的是目录644的许可。接下来,需要注意名称,如注释中所建议的,时间戳是相当好的方法,但它必须与一些随机生成的值(或使用包括毫秒的时间戳)结合使用,但是如果您需要将图像有意义的名称,您必须清理用户提供的名称,过滤掉空字节,目录遍历和其他危险字符(我将白名单和限制图像名称的长度,或随机生成一个字符串)。

而不是把图像放在web根目录之外,我更喜欢使用.htaccessphp_flag engine off选项来关闭目录中的任何php执行。除了使用PHP脚本来提供图片(这是一种相当安全的方法,如果实施正确的话),将图片放在网页根目录之外也会使其无法直接访问,因此您将无法在<img>标记中使用它们。

最后,您要检查是否正在上传有效图片,通常使用GD图书馆,特别是getimagesize,只有在上传有效图片时才会返回图片大小。

同时检查此topic上的图像上传的安全性。

+0

目前我的所有图片都在web根目录下,如/htdocs/images/filename.png。我已经使用.htaccess文件用下面的命令 AddHandler的CGI脚本.PHP特等的.py的.jsp的.asp的.htm的.shtml .SH的CGI 选项-ExecCGI 将这个足以和也我再使用GD lib调整图像大小并删除用户原始图像。 – codeGEN