【问题标题】:How to restrict files with multiple extension to be uploaded如何限制上传多个扩展名的文件
【发布时间】:2018-10-31 12:03:13
【问题描述】:

我正在使用 Kendo 上传器将文件上传到我的应用程序中。我已确保仅允许上传我的配置中定义的扩展名,否则会显示错误消息。我的代码看起来像这样

var validExtensions = [".pdf", ".doc", ".docx", ".pptx", ".xls", ".xlsx", ".txt"];

$('#uploader').kendoUpload({
  multiple: false,
  select: function (e) {
    if (validExtensions.indexOf(e.files[0].extension.toLowerCase()) <= -1) {
      alert("File type not allowed!");
      e.preventDefault();
      return false;
    }
  }
});

这可以很好地接受仅具有给定扩展名的文件。但是安全团队提出了一个问题,他们正在评估以避免上传具有多个扩展名的文件(例如 fileName.msi.txtfileName.exe.doc)。

我知道我们可以根据 .并进行评估,但我想知道我们是否有更清洁的方法来实现这一目标?

谢谢

【问题讨论】:

  • 这不是“多重扩展”。您可以将点放在文件名中任何您喜欢的位置(在 Windows 系统上)。文件扩展名始终只是最后一个点之后的最后一个字符。您可以轻松地编写一个正则表达式来过滤具有多个点的文件名,但是它并不比停止名称中包含“1”的文件更安全。如果您想要更有效的东西,那么在上传之前和之后验证文件的 MIME 类型会是一个更好的主意。请记住,重命名文件扩展名很简单。伪造 MIME 类型的情况更少。

标签: javascript jquery kendo-ui kendo-upload


【解决方案1】:

很遗憾,您无法仅根据文件名称确定有效文件。文件名可以随意命名,因此没有无法通过快速重命名来规避的过滤。

如果您使用的是 HTML 5,您可以选择&lt;input type="file"&gt; 元素的access the MIME type

例如:

<input type="file" onchange="handleFiles(this.files)">
<script>
function handleFiles(files) {
    var selectedFile = files[0];

    console.log(
        "The selected file has the name "
        + selectedFile.name
        + " and is of the type "
        + selectedFile.type + "."
    );
}
</script>

它不会识别您列表中的所有内容,但您可以确保例如 PDF 和 .txt 文件与他们所说的一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-08
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多