【问题标题】:HTML file upload: is there a way to force content-type="application/octet-stream"HTML 文件上传:有没有办法强制 content-type="application/octet-stream"
【发布时间】:2011-04-22 12:06:46
【问题描述】:

由于嵌入式限制,我们在服务器端自定义处理文件上传。

Firefox 浏览器中使用的 HTML 文件上传代码:

<html>
<body>
    <form action="http:///192.168.1.1/upload.cgi" name="form_1" method="post" enctype="multipart/form-data" >
        <input type="file" id="file" name="filename" content-type="application/octet-stream">
        <input type="submit" name="mysubmit" value="Send">
    </form>
<body>
</html> 

如果所选文件名为“fish.jpg”,则服务器将其内容类型接收为“image/jpeg”。如果文件被重命名为“fish”而没有文件扩展名,服务器将其内容类型接收为“application/octet-stream”,这就是我们想要的。

有没有办法在 HTML 页面中强制“应用程序/八位字节流”(使用或不使用常规 JavaScript)?

提前致谢, 伯特

【问题讨论】:

  • 为什么?如果您要将任何传入数据视为“某些字节可能代表某些东西但我们不知道是什么”,那么为什么不忽略您收到的内容类型而不是试图强制浏览器声明它不不知道它在发送什么?

标签: javascript html


【解决方案1】:

没有。没有content-type="..." 属性。无论是否使用 JavaScript,您都无法影响浏览器在 multipart/form-data 子部分中选择 Content-Type 标头。

为什么重要?对于服务器端脚本来说,用Content-Type 做很多事情是个坏主意,因为它经常不准确。处理 image/jpeg 上传与 application/octet-stream 的任何不同是不应该做的事情,尤其是因为浏览器可能选择将 JPEG 上传为 application/octet-stream 或其他东西(特别是,IE 通常喜欢发送 image/pjpeg )。

如果您控制服务器端并且获得正确的文件上传类型至关重要,则应该有一个界面供用户手动选择它。 (您可以使用 JavaScript 文件扩展嗅探和/或 Content-Type 来设置默认值,但不要依赖任何一个。)

【讨论】:

    【解决方案2】:

    有没有办法强制 HTML 中的“应用程序/八位字节流” 页(有或没有正则 JavaScript)?

    你不应该像那样在 html 中设置 content-type。坏人可以轻松上传绕过它。方法是进行适当的服务器端验证。

    【讨论】:

    • 如何进行“正确的服务器端验证”?
    猜你喜欢
    • 1970-01-01
    • 2012-06-25
    • 2012-09-11
    • 2013-12-28
    • 2012-05-07
    • 2011-01-26
    • 1970-01-01
    相关资源
    最近更新 更多