我的网站上有一个上传表格。我实际上并没有真正包含或排除文件类型。
相反,我使用它:
$fileUploadName = $target_dir.md5(uniqid($target_file.rand(),true)).".".$imageFileType;
这将保留文件类型,但将文件名更改为一些随机隐藏的内容,例如790cd5a974bf570ff6a303c3dc5be90f
。
通过这种方式,黑客无法上传hack.php
文件,并使用www.example.com/uploaded_files/hack.php
将其打开,因为它已更改为790cd5a974bf570ff6a303c3dc5be90f.php
。在我看来,这种方式完全安全。我是对的,这样安全吗?
我认为只有一个自执行文件可能是个问题。自执行文件是否存在?
答案 0 :(得分:0)
您还应该检查上传文件的mime类型和扩展名(尽管上传时很容易伪造)。 如果您只想要图像,还可以通过执行如下脚本来检查图像宽度和长度参数:
$size = getimagesize($target_file);
如果这不返回正确的值,则表示没有图像文件。
您可能想要了解像Gifar这样的危险图片。
答案 1 :(得分:0)
将上传的文件放在自己的文件夹中,例如/etc/web/uploads/<Random>
(../uploads),而网站根目录为/etc/web/public/
,或者如果您可以使用.htaccess
在uploads文件夹中创建一个放Deny from all
此外,uniqid和rand不会生成加密安全值我还会检查上传的文件是否仍为图片Link to someones isimage function http://php.net/manual/en/function.uniqid.php http://php.net/manual/en/function.rand.php
使用file_get_contents
获取用户图片