0

我想知道这个的安全性。我只想允许最大大小为 64 KB 的 gif 图像。使用接受属性是否安全?IEaccept="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属性是否安全?

4

2 回答 2

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)));
    }
}

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

于 2013-07-06T03:56:54.383 回答
1

什么都不相信。

如果内容来自网络,当你得到它时假设一切都是错误的。

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

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

  • 错误的文件类型(机器人可能会快速测试)。
  • 文件太大(机器人也可能会很快测试)。
  • 文件名中在服务器文件系统上无效的字符(很少见,但会出现)。
  • 文件中的恶意内容(如果您要允许公众使用它们,会非常担心其中的内容)。
于 2013-07-06T04:22:04.093 回答