【发布时间】:2017-02-18 10:16:40
【问题描述】:
我的网站上有一个上传表单。我实际上并没有真正包含或排除文件类型。
我使用的是这个:
$fileUploadName = $target_dir.md5(uniqid($target_file.rand(),true)).".".$imageFileType;
这将保留文件类型,但将文件名更改为一些随机的神秘名称,例如 790cd5a974bf570ff6a303c3dc5be90f。
这样,黑客无法上传hack.php 文件并使用www.example.com/uploaded_files/hack.php 打开它,因为它已更改为例如790cd5a974bf570ff6a303c3dc5be90f.php。在我看来,这种方式是完全安全的。我这样说是安全的吗?
我认为只有一个自执行文件可能是一个问题。自执行文件是否存在?
【问题讨论】:
-
应用Kerckhoff's Principle“攻击者知道系统的一切,除了(加密)密钥”,您的攻击者可能知道您使用文件名的MD5校验和,因此可以推断出上传的文件名.
-
为什么在任何情况下都允许执行上传的文件?
-
@miken32 我不明白你的意思。当然我要避免黑客可以上传文件然后执行。为避免这种情况,我正在使用 md5(uniqid($filename)) 更改真实文件名。这样,我希望黑客不能通过浏览器调用和执行文件,因为他不知道(实际)文件名。当然,如果它是一个自执行文件,这将不起作用。但是做。甚至存在自执行文件?
-
@JonathanLeffler 我想你错过了我正在混合
MD5、uniqid()和$target_file。我想这应该是够保存的,不可破解的,不是吗? – 大卫 21 分钟前