[
https://issues.apache.org/jira/browse/TIKA-216?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jukka Zitting resolved TIKA-216.
--------------------------------
Resolution: Fixed
Fix Version/s: 0.4
Assignee: Jukka Zitting
There is now a SecureContentHandler decorator class that implements a simple zip bomb prevention heuristic. By default the class throws an exception for any input documents that produce over 100 output characters per input byte, a compression ratio that no normal document is expected to reach. There is a default threshold of 1M output characters after which the zip bomb detection gets activated. This threshold avoids false positives for otherwise normal documents that for some reason start with a sequence of highly compressible data.
The SecureContentHandler decorator class is used together with the CountingInputStream from Commons IO. See below for sample usage:
CountingInputStream count = new CountingInputStream(stream);
SecureContentHandler secure = new SecureContentHandler(handler, count);
try {
parser.parse(count, secure, metadata);
} catch (SAXException e) {
secure.throwIfCauseOf(e);
throw e;
}
I added this to the AutoDetectParser, so all clients that use AutoDetectParser or tools based on that are automatically protected against simple zip bombs.
> Zip bomb prevention
> -------------------
>
> Key: TIKA-216
> URL:
https://issues.apache.org/jira/browse/TIKA-216> Project: Tika
> Issue Type: New Feature
> Components: parser
> Reporter: Jukka Zitting
> Assignee: Jukka Zitting
> Fix For: 0.4
>
>
> It would be good to have a mechanism that automatically detects a "zip bomb", i.e. a compressed document that expands to excessive amounts of extracted text. The classic example is the 42.zip file that's just 42kB in size, but expands to about 4 *petabytes* when all layers are fully uncompressed.
> A simple preventive measure could be a Parser decorator that counts the number of input bytes and the output characters, and fails with a TikaException when the ratio exceeds some configurable limit.
> As another preventive measure, the decorator could also keep track of the time (and perhaps even memory, if possible) it takes to process the input document. A TikaException would be thrown if processing time exceeds some configurable limit.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.