【发布时间】:2012-05-31 18:04:08
【问题描述】:
我正在构建一个允许登录用户上传产品图片的小型网络应用程序。我正在尝试正确构建,并且在过去一些天真的实现之后,决定将所有上传的内容添加到我的公共文件夹中。
\app (public folder)
-\index.php
\includes
\config
\uploads
如果恶意用户设法上传 PHP 文件,服务器将无法访问或提供该文件。
话虽如此,我将如何在网页上提供这些图片?做这个的最好方式是什么?在过去,我使用了一个 getImage.php 文件,该文件将采用一个 ID 参数(以及一些生成值的哈希值以避免用户只是猜测 ID),它看起来像“getImage.php?id=555&c=44j54k3h5”。服务端抓取DB中的图片信息(真实路径)并加载内容,重建header,发送图片。
此方法是否存在任何安全问题?有没有办法让它更漂亮?有一个查找 /images/imagename.jpg 并将它们发送到我的 getImage.php 文件的 htaccess 重写规则会添加安全漏洞吗?任何关于最佳实践的建议都将不胜感激。
【问题讨论】:
-
您在上传文件时对文件进行了哪些类型的安全检查?
-
好吧,我还没有构建它,我想先确保我没有忽略一些巨大的步骤。我将检查扩展,并从那里通过使用 getimagesize() 查找它们的尺寸来确保它们是图像,因为这似乎是一种常见的方法......够了吗?
-
getimagesize()相当慢,检查文件扩展名并不是万无一失的。我使用一个图像上传类来检查大量不同的东西以确保文件不是恶意软件。让我看看能不能找到...
标签: php file-upload