2013-07-06 67 views
0

我想知道这件事的安全性。我只想要允许最大大小为64 KB的gif图像。使用accept属性安全吗?即accept="image/gif"安全上传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

绝对不是,因为人们可以在客户端更改页面代码并将所需的任何内容提交给服务器。这也适用于文件大小。您应该验证文件服务器端,检查其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

不信任。

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

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

你需要做好准备,以防止(至少):

  • 错误的文件类型(一个机器人可能会快速测试这一点)。
  • 文件太大(机器人可能会很快测试)。
  • 文件名称中的字符在服务器的文件系统上无效(很少,但出现)。
  • 文件中的恶意内容(如果您准备让公众对这些内容感到担忧)。