首页 文章

PHP图像上传安全问题

提问于
浏览
0

我最近遇到了通过我网站上的表单上传恶意代码的问题 . 此表单应仅允许上传图像 . 做了一些阅读后,我实施了以下检查 .

  • 在tmp上传文件中使用getimageresize() . 如果返回false,则终止上传过程 .

  • chmod将上传的图像设为644,使其无法执行 .

  • 上传的文件名被更改(前面有一个随机数),因此它与用户上传的文件名不完全相同 .

我已经读过在服务器端检查mime类型也是一个好主意 . 我似乎无法访问我的服务器上的finfo_file()或mime_content_type() .

这些听起来像是为了阻止恶意代码被上传和执行而采取的好措施吗?我还有其他措施吗?

2 回答

  • 0

    对于大多数人来说,你的#1似乎已经足够好了,而且很可能 .

    但是,如果您想要额外的安全性(以更多内存消耗为代价,我担心),您可以将图像保存在不可访问的文件夹(docroot之外),并编写一个呈现文件的简单脚本 . 这需要你将图像加载到内存中(这就是PHP所做的),所以我不会真的建议它,除非你真的害怕有人仍然会破解你 .

    正如我所说,你的第一个建议应该是诀窍 . 此外,#3没用,当您在DOM中插入图像时,您将使用随机数公开新名称:)

  • 0

    在Eduard Luca所说的基础上 Build 起来的东西 . 我建议的是你

    • 确保您只接受有效的文件扩展名类型 . 仅此一项无法保存您,但如果有人上传 .php 文件,这将变得很重要

    • 关闭上传目录的PHP处理 . 这样你仍然可以直接显示图像,而PHP文件将出现403错误 . 这可以通过Apache中的站点配置来完成

    <Directory "/path/to/upload">
    php_admin_flag engine off
    AllowOverride None
    DirectoryIndex Off
    RewriteEngine On
    RewriteRule \.php$ - [F,L] 
    </Directory>
    

相关问题