[
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.