IEが投げてくるMIME Typeたち。

「IE9や他のブラウザだと大丈夫なんですが、IE8では画像アップロード出来ません。」という話を聞いて、原因を調べてみたらこちらのようでした。

IEでjpegとPNG画像をアップロードする際、MIME Type(Content Type)が普通と違う件 – kanonjiの日記

この情報は、ブラウザの自己申告なため、悪意をもって全然別のMIME Typeを送信する事も可能*1ですが、IEもMIME Typeを偽装?してきます。

で、ドキュメント探したらここらへんみたい。

MIME Type Detection in Internet Explorer

When uploading files from the client to the Web server, Windows Internet Explorer uses FindMimeFromData to determine a MIME type.

うっっっz

>> pp Rack::Mime::MIME_TYPES
{".3gp"=>"video/3gpp",
 ".a"=>"application/octet-stream",
 ".ai"=>"application/postscript",
 ".aif"=>"audio/x-aiff",
 ".aiff"=>"audio/x-aiff",
 ".asc"=>"application/pgp-signature",
 ".asf"=>"video/x-ms-asf",
 ".asm"=>"text/x-asm",
 ".asx"=>"video/x-ms-asf",
 ".atom"=>"application/atom+xml",
 ".au"=>"audio/basic",
 ".avi"=>"video/x-msvideo",
 ".bat"=>"application/x-msdownload",
 ".bin"=>"application/octet-stream",
 ".bmp"=>"image/bmp",
 ".bz2"=>"application/x-bzip2",
 ".c"=>"text/x-c",
 ".cab"=>"application/vnd.ms-cab-compressed",
 ".cc"=>"text/x-c",
 ".chm"=>"application/vnd.ms-htmlhelp",
 ".class"=>"application/octet-stream",
 ".com"=>"application/x-msdownload",
 ".conf"=>"text/plain",
 ".cpp"=>"text/x-c",
 ".crt"=>"application/x-x509-ca-cert",
 ".css"=>"text/css",
 ".csv"=>"text/csv",
 ".cxx"=>"text/x-c",
 ".deb"=>"application/x-debian-package",
 ".der"=>"application/x-x509-ca-cert",
 ".diff"=>"text/x-diff",
 ".djv"=>"image/vnd.djvu",
 ".djvu"=>"image/vnd.djvu",
 ".dll"=>"application/x-msdownload",
 ".dmg"=>"application/octet-stream",
 ".doc"=>"application/msword",
 ".dot"=>"application/msword",
 ".dtd"=>"application/xml-dtd",
 ".dvi"=>"application/x-dvi",
 ".ear"=>"application/java-archive",
 ".eml"=>"message/rfc822",
 ".eps"=>"application/postscript",
 ".exe"=>"application/x-msdownload",
 ".f"=>"text/x-fortran",
 ".f77"=>"text/x-fortran",
 ".f90"=>"text/x-fortran",
 ".flv"=>"video/x-flv",
 ".for"=>"text/x-fortran",
 ".gem"=>"application/octet-stream",
 ".gemspec"=>"text/x-script.ruby",
 ".gif"=>"image/gif",
 ".gz"=>"application/x-gzip",
 ".h"=>"text/x-c",
 ".hh"=>"text/x-c",
 ".htm"=>"text/html",
 ".html"=>"text/html",
 ".ico"=>"image/vnd.microsoft.icon",
 ".ics"=>"text/calendar",
 ".ifb"=>"text/calendar",
 ".iso"=>"application/octet-stream",
 ".jar"=>"application/java-archive",
 ".java"=>"text/x-java-source",
 ".jnlp"=>"application/x-java-jnlp-file",
 ".jpeg"=>"image/jpeg",
 ".jpg"=>"image/jpeg",
 ".js"=>"application/javascript",
 ".json"=>"application/json",
 ".log"=>"text/plain",
 ".m3u"=>"audio/x-mpegurl",
 ".m4v"=>"video/mp4",
 ".man"=>"text/troff",
 ".mathml"=>"application/mathml+xml",
 ".mbox"=>"application/mbox",
 ".mdoc"=>"text/troff",
 ".me"=>"text/troff",
 ".mid"=>"audio/midi",
 ".midi"=>"audio/midi",
 ".mime"=>"message/rfc822",
 ".mml"=>"application/mathml+xml",
 ".mng"=>"video/x-mng",
 ".mov"=>"video/quicktime",
 ".mp3"=>"audio/mpeg",
 ".mp4"=>"video/mp4",
 ".mp4v"=>"video/mp4",
 ".mpeg"=>"video/mpeg",
 ".mpg"=>"video/mpeg",
 ".ms"=>"text/troff",
 ".msi"=>"application/x-msdownload",
 ".odp"=>"application/vnd.oasis.opendocument.presentation",
 ".ods"=>"application/vnd.oasis.opendocument.spreadsheet",
 ".odt"=>"application/vnd.oasis.opendocument.text",
 ".ogg"=>"application/ogg",
 ".p"=>"text/x-pascal",
 ".pas"=>"text/x-pascal",
 ".pbm"=>"image/x-portable-bitmap",
 ".pdf"=>"application/pdf",
 ".pem"=>"application/x-x509-ca-cert",
 ".pgm"=>"image/x-portable-graymap",
 ".pgp"=>"application/pgp-encrypted",
 ".pkg"=>"application/octet-stream",
 ".pl"=>"text/x-script.perl",
 ".pm"=>"text/x-script.perl-module",
 ".png"=>"image/png",
 ".pnm"=>"image/x-portable-anymap",
 ".ppm"=>"image/x-portable-pixmap",
 ".pps"=>"application/vnd.ms-powerpoint",
 ".ppt"=>"application/vnd.ms-powerpoint",
 ".ps"=>"application/postscript",
 ".psd"=>"image/vnd.adobe.photoshop",
 ".py"=>"text/x-script.python",
 ".qt"=>"video/quicktime",
 ".ra"=>"audio/x-pn-realaudio",
 ".rake"=>"text/x-script.ruby",
 ".ram"=>"audio/x-pn-realaudio",
 ".rar"=>"application/x-rar-compressed",
 ".rb"=>"text/x-script.ruby",
 ".rdf"=>"application/rdf+xml",
 ".roff"=>"text/troff",
 ".rpm"=>"application/x-redhat-package-manager",
 ".rss"=>"application/rss+xml",
 ".rtf"=>"application/rtf",
 ".ru"=>"text/x-script.ruby",
 ".s"=>"text/x-asm",
 ".sgm"=>"text/sgml",
 ".sgml"=>"text/sgml",
 ".sh"=>"application/x-sh",
 ".sig"=>"application/pgp-signature",
 ".snd"=>"audio/basic",
 ".so"=>"application/octet-stream",
 ".svg"=>"image/svg+xml",
 ".svgz"=>"image/svg+xml",
 ".swf"=>"application/x-shockwave-flash",
 ".t"=>"text/troff",
 ".tar"=>"application/x-tar",
 ".tbz"=>"application/x-bzip-compressed-tar",
 ".tcl"=>"application/x-tcl",
 ".tex"=>"application/x-tex",
 ".texi"=>"application/x-texinfo",
 ".texinfo"=>"application/x-texinfo",
 ".text"=>"text/plain",
 ".tif"=>"image/tiff",
 ".tiff"=>"image/tiff",
 ".torrent"=>"application/x-bittorrent",
 ".tr"=>"text/troff",
 ".txt"=>"text/plain",
 ".vcf"=>"text/x-vcard",
 ".vcs"=>"text/x-vcalendar",
 ".vrml"=>"model/vrml",
 ".war"=>"application/java-archive",
 ".wav"=>"audio/x-wav",
 ".wma"=>"audio/x-ms-wma",
 ".wmv"=>"video/x-ms-wmv",
 ".wmx"=>"video/x-ms-wmx",
 ".wrl"=>"model/vrml",
 ".wsdl"=>"application/wsdl+xml",
 ".xbm"=>"image/x-xbitmap",
 ".xhtml"=>"application/xhtml+xml",
 ".xls"=>"application/vnd.ms-excel",
 ".xml"=>"application/xml",
 ".xpm"=>"image/x-xpixmap",
 ".xsl"=>"application/xml",
 ".xslt"=>"application/xslt+xml",
 ".yaml"=>"text/yaml",
 ".yml"=>"text/yaml",
 ".zip"=>"application/zip"}

おいそんなもんねーぞ

タイトルとURLをコピーしました