我最近遇到了通过我网站上的表单上传恶意代码的问题 . 此表单应仅允许上传图像 . 做了一些阅读后,我实施了以下检查 .
-
在tmp上传文件中使用getimageresize() . 如果返回false,则终止上传过程 .
-
chmod将上传的图像设为644,使其无法执行 .
-
上传的文件名被更改(前面有一个随机数),因此它与用户上传的文件名不完全相同 .
我已经读过在服务器端检查mime类型也是一个好主意 . 我似乎无法访问我的服务器上的finfo_file()或mime_content_type() .
这些听起来像是为了阻止恶意代码被上传和执行而采取的好措施吗?我还有其他措施吗?
2 回答
对于大多数人来说,你的#1似乎已经足够好了,而且很可能 .
但是,如果您想要额外的安全性(以更多内存消耗为代价,我担心),您可以将图像保存在不可访问的文件夹(docroot之外),并编写一个呈现文件的简单脚本 . 这需要你将图像加载到内存中(这就是PHP所做的),所以我不会真的建议它,除非你真的害怕有人仍然会破解你 .
正如我所说,你的第一个建议应该是诀窍 . 此外,#3没用,当您在DOM中插入图像时,您将使用随机数公开新名称:)
在Eduard Luca所说的基础上 Build 起来的东西 . 我建议的是你
确保您只接受有效的文件扩展名类型 . 仅此一项无法保存您,但如果有人上传
.php
文件,这将变得很重要关闭上传目录的PHP处理 . 这样你仍然可以直接显示图像,而PHP文件将出现403错误 . 这可以通过Apache中的站点配置来完成