Sebastian Nagel created TIKA-4351: ------------------------------------- Summary: More restrictive MIME type validation Key: TIKA-4351 URL: https://issues.apache.org/jira/browse/TIKA-4351 Project: Tika Issue Type: Improvement Components: core, mime Affects Versions: 3.0.0 Reporter: Sebastian Nagel
Background: - [~tallison] started a [discussion on the Common Crawl user group|https://groups.google.com/g/common-crawl/c/0FANtRcJOts/m/q5KtncIcBgAJ] about strange and obviously erroneous "identified" MIME types in Common Crawl data which were identified in Nutch using Tika's magic detector. See [o.a.nutch.util.MimeUtil#autoResolveContentType|https://github.com/apache/nutch/blob/e1b8dbe909b0f8c181dcb5ee0e7e072f27f82cbb/src/java/org/apache/nutch/util/MimeUtil.java#L153] for the source code. - the issue is tracked on Nutch's site in NUTCH-3089 - however, implementing a complex MIME type validation seems out of Nutch's scope and is eventually better done and maintained by Tika While looking at more examples, digging deeper and trying to improve the detection code in Nutch, I came up with the following points regarding the validation of the MIME type in [MimeTypes#forName|https://tika.apache.org/3.0.0/api/org/apache/tika/mime/MimeTypes.html#forName(java.lang.String)]. The method is used both from Nutch and Tika (in [MimeTypes#detect(...)|https://tika.apache.org/3.0.0/api/org/apache/tika/mime/MimeTypes.html#detect(java.io.InputStream,org.apache.tika.metadata.Metadata)]): - "forName" accepts non-ASCII Unicode characters as part of the MIME type ({{foo/bär}}) - not covered by [RFC 2045|https://datatracker.ietf.org/doc/html/rfc2045#section-5.1] which allows only US_ASCII characters. Of course, one might argue, that already the HTTP header parser should filter such headers away, but ... - the grammar in RFC 2045 is lazy interpreted, that is a type or subtype may include the allowed characters in any order - (sub)types not registered at IANA are accepted even if they do not start with "x-" / "X-" / "x." - [RFC 6838|https://datatracker.ietf.org/doc/html/rfc6838#section-4.2] is more restrictive, e.g., it requires that (sub)types start with a letter or number - Nutch passes the Content-Type HTTP header value and the URL as metadata hints to MimeTypes.detect(inputstream, metadata). This helped to improve the detection especially for types which are subclasses of application/zip. At least, in the past, this was necessary to handle various Office document types. -- This message was sent by Atlassian Jira (v8.20.10#820010)