【问题标题】:GET ContentType in Classic ASP在经典 ASP 中获取 ContentType
【发布时间】:2014-02-28 13:42:13
【问题描述】:

我一直在谷歌上搜索如何获取要上传的文件的 ContentType,但无济于事。我需要使用 Classic ASP 来完成这项工作。我总是从谷歌看到的是

response.ContentType = something

我的主要目标是在上传图片之前对其进行验证。只有 .jpg、.gif 和 .png 才是有效的图像。因此,有效的 ContentType 是“image/jpeg”、“image/gif”和“image/png”。

我不想仅仅依赖文件扩展名,因为黑客可以简单地将扩展名 .exe 更改为 .jpg。

请帮忙,谢谢!

添加: 我只是在使用这个 html 控件:

<input type="file" name="inputfile" />

【问题讨论】:

  • 你能准确描述你的尝试吗?对于文件上传,期望请求内容类型始终为multipart/form-data。你永远不应该依赖内容类型,因为它很容易伪造。
  • 内容类型只能是以下之一:“image/jpeg”、“image/gif”和“image/png”。或者您知道在上传之前验证图像的其他方法吗?
  • 什么内容类型?通过 html 表单上传文件的请求内容类型?
  • 那么内容类型应该是multipart/form-data。要检查文件的有效性,您需要在上传后在服务器上进行例如; stackoverflow.com/questions/15874740/…

标签: security file-upload asp-classic content-type


【解决方案1】:

浏览器可以在字段的multipart/form-data 子部分的Content-Type 标头中上传文件类型。

Classic ASP 本身不支持文件上传 - 您使用什么来接收文件?有许多库/控件实现了这一点,任何检索该子部分标头的机制都将取决于该代码是什么。

然而,这一点在很大程度上没有实际意义,因为:

(a) 文件上传Content-Type 标头非常不可靠。浏览器可以并且会随心所欲地发送错误的值,并且用户通常几乎无法纠正问题。 (例如,在 Windows 上,安装的应用程序可以轻松劫持 MIME 类型关联,使其远离默认值,即使是全新安装,IE 通常也会发送错误的 JPEG 类型。)

(b) 攻击者可以像欺骗文件扩展名一样容易地欺骗 Content-Type。

很少有充分的理由关注提交的 Content-Type。充其量您可以将其用作用户可以手动覆盖的默认值。

您检查文件类型的目的是什么?

    1234563完全没有(因为通常服务器会根据名称和位置决定在服务器端执行哪些文件)。这实际上很难做到 100% 正确,因此通常最好不要使用用户输入作为本地文件名的基础(而是使用生成的文件名,如 123.jpeg 用于存储在数据库中的对象作为主键 @ 987654326@)。
  • 如果您试图阻止上传损坏的图像或不支持的图像格式,您应该使用图像加载库检查文件的内容,看看它是否是有效的图像。

  • 如果您试图阻止人们上传 HTML 或插件内容来进行跨站点脚本攻击,那么您几乎无法通过检查文件、文件名或内容来解决此问题。可以创建“变色龙”文件是有效的图像,同时还包含浏览器在某些情况下可能解释为脚本的内容。如果您必须允许不受信任的用户上传一般文件,那么最好的办法是为他们提供不同的域,这样跨站点脚本就不会放弃任何有价值的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多