安全上传gif图片

时间:2013-07-06 03:51:55

标签: php

我想知道这个的安全性。我只想要允许最大64 KB的gif图像。使用accept属性是否安全?即accept="image/gif"

非常小的php:

if (isset($_REQUEST['upload'])) {
move_uploaded_file($_FILES['file']['tmp_name'], '../images/logos/'.str_replace(" ", "_", $name).'.gif');
}

我的表单如下:

<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="65536">
<input type="file" name="file" size="40" accept="image/gif">
</form>

现在使用accept属性安全吗?

2 个答案:

答案 0 :(得分:2)

绝对不是,因为可以在客户端更改页面代码并将任何他们想要的内容提交给您的服务器。这也适用于文件大小。您应该验证文件服务器端,检查其MIME内容类型。你最好用getimagesize()函数来做到这一点。

改进服务器端代码:

if (isset($_REQUEST['upload'])) { 
    list(,, $image_type) = @getimagesize($_FILES['file']['tmp_name']);

    if (filesize($_FILES['file']['tmp_name']) <= 65536
            && $image_type === IMAGETYPE_GIF) {
        move_uploaded_file($_FILES['file']['tmp_name'],
            sprintf('../images/logos/%s.gif', str_replace(' ', '_', $name)));
    }
}

您可以改进更多分裂检查并向用户发出错误消息。我会留给你的。

答案 1 :(得分:1)

不信任任何人。

如果内容来自网络,请在获得内容时认为一切都是错误的。

对于Web应用程序,HTML中的任何内容都不应被视为服务器端的真正安全机制。 HTML和JS提供的工具非常有用,可以提供良好的用户体验,并有助于减少发送回服务器的基本错误的数量,但不好的演员只会绕过你的HTML / JS保护并发送什么他们喜欢。更有趣的是,即使在流量较低的网站上,机器人也会测试基本错误的表格,如果你不小心可以用垃圾填满你的服务器。

你需要做好准备防范(至少):

  • 错误的文件类型(机器人很可能会快速测试)。
  • 文件太大(机器人很可能也会对此进行快速测试)。
  • 文件名中的字符在服务器的文件系统中无效(很少见,但会出现)。
  • 文件中的恶意内容(如果您希望公众可以使用这些内容,则会对其中的内容产生很大的担忧。)