网站上传防止黑客入侵
问题描述:
我的网站上有一个上传表单。实际上我并没有真正包含或排除文件类型。网站上传防止黑客入侵
相反,我使用的是这样的:
$fileUploadName = $target_dir.md5(uniqid($target_file.rand(),true)).".".$imageFileType;
这将保留该文件类型,但更改文件名随机的一些神秘的类似790cd5a974bf570ff6a303c3dc5be90f
。
这样黑客就不能上传hack.php
文件,并用www.example.com/uploaded_files/hack.php
打开它,因为它已经更改为例如。 790cd5a974bf570ff6a303c3dc5be90f.php
。在我看来,这是完全安全的。我说得对,这样安全吗?
我认为只有自动执行文件可能是一个问题。自执行文件是否存在?
答
您还应该检查上传文件的MIME类型和扩展名(尽管上传时可能很容易伪造)。 如果你希望只图像,你也可以通过执行这样的脚本检查图像的宽度和长度参数:
$size = getimagesize($target_file);
如果不返回正确的价值观,这是没有图像文件。
你可能想告诉你自己关于像Gifar这样的危险图形。在有自己的文件夹一样/etc/web/uploads/<Random>
(../uploads)
答
认沽上传的文件,而该网站的根是/etc/web/public/
或者您可以使用.htaccess
创建一个在上传文件夹,并把Deny from all
也uniqid和RAND不加密生成安全值,我还要检查上传的文件是一个图像反正Link to someones isimage functionhttp://php.net/manual/en/function.uniqid.phphttp://php.net/manual/en/function.rand.php
使用file_get_contents
,以获得用户的图像
应用[Kerckhoff的原理](https://en.wikipedia.org/wiki/Kerckhoffs 's_principle)“的攻击者知道除(密码)键以外的系统的所有信息“,攻击者可能知道您使用了文件名的MD5校验和,因此可以推断上传的文件名。 –
为什么在任何情况下都会允许执行上传的文件? – miken32
@ miken32我不明白你的意思。当然,我想避免黑客可以上传文件,然后执行。为了避免这种情况,我使用md5(uniqid($ filename))来改变真正的文件名。这样,我希望黑客不能通过浏览器调用和执行文件,因为他不知道(实际)文件名。当然,如果它是一个自我执行文件,这将不起作用。但是呢。自执行文件甚至存在? – David