【问题标题】:Internet Explorer file upload fails mime-type checkInternet Explorer 文件上传失败 mime 类型检查
【发布时间】:2011-08-06 16:22:03
【问题描述】:

我拼凑了来自各种互联网资源的一些脚本,以使表单能够正常工作。我遇到了一个我无法解决的问题。我创建的表单允许用户在字段中提交他们的数据,外加一个图片附件(验证:.EPS 或 .JPG 格式)。

该脚本在 Firefox 和 Safari 中运行良好,但在 Internet Explorer 中却不行。在 IE 中,无论您是否附加了正确类型的图像,它都会返回错误文件类型的错误。因此,出于某种原因,IE 似乎没有像 PHP 要求的那样验证文件类型。

<?php
/* ....
   snip
   .... */
      $filetype=$_FILES["prosp_client_logo"]["type"];
/* ....
   snip
   .... */
      elseif($filetype=="application/postscript" or $filetype=="image/jpg" or $filetype=="image/jpeg") {
/* ....
   snip
   .... */
?>

如果您需要任何说明,请告诉我。

【问题讨论】:

  • 您好,其中有很多代码无法解决您所描述的问题。您能否将其缩减为仅处理上传文件并返回错误的代码(并仔细检查您的修剪代码是否发生错误)。
  • 这不是你问的,但肯定有人会告诉你,也可能是我。您应该阅读您的脚本容易受到攻击的 SQL 注入攻击。每当您将变量传递给 SQL 查询时,您应该首先将其传递给 mysql_real_escape_string()。你的代码中的例子是`$newentry="INSERT INTO TestTable (...) VALUES ('NULL','$user_name', '$user_email', '$filename')";` 首先你应该调用$user_name = mysql_real_escape_string($user_name);等所有这些变量。
  • 谢谢,我感觉我的脚本不安全。我会尝试插入该代码。
  • @preinheimer - 我已经对它进行了相当大的修剪(它的形式要长得多),但是因为我不确定我可能在哪里绊倒了 IE,所以留下了很多。我知道它的结构不是很好。我将尝试进一步修剪,但欢迎任何对我在这里提出建议的人。谢谢!
  • @BrianChicago76:我已经为你完成了修剪。 :)

标签: php internet-explorer file-upload mime-types


【解决方案1】:

http://www.php.net/manual/en/features.file-upload.php#75932

Richard Davey rich at corephp dot co dot uk 22-Jun-2007 12:05
[...] 您可能倾向于根据 $_FILES 数组中报告的 mime 类型来验证更新。但是请注意这一点 - 它是由 浏览器 设置的,而不是由 PHP 或 Web 服务器设置的,并且浏览器并不一致(有什么新功能?!)

IE 将为附件发送自己的mime-type(基于其文件系统关联),这通常与您在代码中所期望的不同。此数据也可能被欺骗,因此最好不要相信浏览器对文件mime-type 的说法。

还有:

http://www.php.net/manual/en/features.file-upload.php#53133

keith 在 phpdiary dot org 2005 年 5 月 24 日 11:14
[...] 我最好的选择是让您检查文件的扩展名并使用 exif_imagetype() 检查有效图像。许多人建议使用 getimagesize() 如果文件确实是图像则返回数组,否则返回 false,但 exif_imagetype() 更快。 (说明书是这么说的)

【讨论】:

  • 感谢您的建议。你能提供一串代码,或者我可以在 PHP.net 上找到如何做吗?
  • @BrianChicago76:查看getimagesize()(或者,最好是exif_imagetype())的PHP.net手册条目
  • 如果你能告诉我在哪里插入验证,即 exif_imagetype(),以及我应该删除哪些代码,那将是一个巨大的帮助。正如我所说,我是一个巨大的 n00b。谢谢,伙计们。
  • @jnpcl:exif_imagetype() 似乎没有 postscript (EPS) 作为图像类型常量下的选项。有没有办法验证图像文件是否为 EPS?谢谢。
  • @BrianChicago76:看起来最好的方法是安装FileInfo PECL 扩展并使用它的功能。所有其他方法似乎已被弃用,或者需要运行 shell 命令。
猜你喜欢
  • 2015-01-06
  • 1970-01-01
  • 2018-09-11
  • 2014-02-20
  • 2019-09-07
  • 2014-09-18
  • 2011-06-15
  • 2012-10-09
  • 2018-11-07
相关资源
最近更新 更多