+</pre>
+ </td>
+ </tr>
+ </table>
+ </dd>
+ </dl>
+ </div>
+ </div>
+ <div class="SECT3">
+ <h4 class="SECT3">
+ <a name="EXTERNAL-FILTER">8.5.14. external-filter</a>
+ </h4>
+ <div class="VARIABLELIST">
+ <dl>
+ <dt>
+ Typical use:
+ </dt>
+ <dd>
+ <p>
+ Modify content using a programming language of your choice.
+ </p>
+ </dd>
+ <dt>
+ Effect:
+ </dt>
+ <dd>
+ <p>
+ All instances of text-based type, most notably HTML and
+ JavaScript, to which this action applies, can be filtered
+ on-the-fly through the specified external filter. By
+ default plain text documents are exempted from filtering,
+ because web servers often use the <tt class=
+ "LITERAL">text/plain</tt> MIME type for all files whose
+ type they don't know.)
+ </p>
+ </dd>
+ <dt>
+ Type:
+ </dt>
+ <dd>
+ <p>
+ Multi-value.
+ </p>
+ </dd>
+ <dt>
+ Parameter:
+ </dt>
+ <dd>
+ <p>
+ The name of an external content filter, as defined in the
+ <a href="filter-file.html">filter file</a>. External
+ filters can be defined in one or more files as defined by
+ the <tt class="LITERAL"><a href=
+ "config.html#FILTERFILE">filterfile</a></tt> option in the
+ <a href="config.html">config file</a>.
+ </p>
+ <p>
+ When used in its negative form, and without parameters,
+ <span class="emphasis"><i class="EMPHASIS">all</i></span>
+ filtering with external filters is completely disabled.
+ </p>
+ </dd>
+ <dt>
+ Notes:
+ </dt>
+ <dd>
+ <p>
+ External filters are scripts or programs that can modify
+ the content in case common <tt class="LITERAL"><a href=
+ "actions-file.html#FILTER">filters</a></tt> aren't powerful
+ enough. With the exception that this action doesn't use
+ pcrs-based filters, the notes in the <tt class="LITERAL"><a
+ href="actions-file.html#FILTER">filter</a></tt> section
+ apply.
+ </p>
+ <div class="WARNING">
+ <table class="WARNING" border="1" width="90%">
+ <tr>
+ <td align="CENTER">
+ <b>Warning</b>
+ </td>
+ </tr>
+ <tr>
+ <td align="LEFT">
+ <p>
+ Currently external filters are executed with <span
+ class="APPLICATION">Privoxy</span>'s privileges.
+ Only use external filters you understand and trust.
+ </p>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <p>
+ This feature is experimental, the <tt class="LITERAL"><a
+ href=
+ "filter-file.html#EXTERNAL-FILTER-SYNTAX">syntax</a></tt>
+ may change in the future.
+ </p>
+ </dd>
+ <dt>
+ Example usage:
+ </dt>
+ <dd>
+ <p>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++external-filter{fancy-filter}
+</pre>
+ </td>
+ </tr>
+ </table>
+ </dd>
+ </dl>
+ </div>
+ </div>
+ <div class="SECT3">
+ <h4 class="SECT3">
+ <a name="FAST-REDIRECTS">8.5.15. fast-redirects</a>
+ </h4>
+ <div class="VARIABLELIST">
+ <dl>
+ <dt>
+ Typical use:
+ </dt>
+ <dd>
+ <p>
+ Fool some click-tracking scripts and speed up indirect
+ links.
+ </p>
+ </dd>
+ <dt>
+ Effect:
+ </dt>
+ <dd>
+ <p>
+ Detects redirection URLs and redirects the browser without
+ contacting the redirection server first.
+ </p>
+ </dd>
+ <dt>
+ Type:
+ </dt>
+ <dd>
+ <p>
+ Parameterized.
+ </p>
+ </dd>
+ <dt>
+ Parameter:
+ </dt>
+ <dd>
+ <ul>
+ <li>
+ <p>
+ <span class="QUOTE">"simple-check"</span> to just
+ search for the string <span class=
+ "QUOTE">"http://"</span> to detect redirection URLs.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="QUOTE">"check-decoded-url"</span> to
+ decode URLs (if necessary) before searching for
+ redirection URLs.
+ </p>
+ </li>
+ </ul>
+ </dd>
+ <dt>
+ Notes:
+ </dt>
+ <dd>
+ <p>
+ Many sites, like yahoo.com, don't just link to other sites.
+ Instead, they will link to some script on their own
+ servers, giving the destination as a parameter, which will
+ then redirect you to the final target. URLs resulting from
+ this scheme typically look like: <span class=
+ "QUOTE">"http://www.example.org/click-tracker.cgi?target=http%3a//www.example.net/"</span>.
+ </p>
+ <p>
+ Sometimes, there are even multiple consecutive redirects
+ encoded in the URL. These redirections via scripts make
+ your web browsing more traceable, since the server from
+ which you follow such a link can see where you go to. Apart
+ from that, valuable bandwidth and time is wasted, while
+ your browser asks the server for one redirect after the
+ other. Plus, it feeds the advertisers.
+ </p>
+ <p>
+ This feature is currently not very smart and is scheduled
+ for improvement. If it is enabled by default, you will have
+ to create some exceptions to this action. It can lead to
+ failures in several ways:
+ </p>
+ <p>
+ Not every URLs with other URLs as parameters is evil. Some
+ sites offer a real service that requires this information
+ to work. For example a validation service needs to know,
+ which document to validate. <tt class=
+ "LITERAL">fast-redirects</tt> assumes that every URL
+ parameter that looks like another URL is a redirection
+ target, and will always redirect to the last one. Most of
+ the time the assumption is correct, but if it isn't, the
+ user gets redirected anyway.
+ </p>
+ <p>
+ Another failure occurs if the URL contains other parameters
+ after the URL parameter. The URL: <span class=
+ "QUOTE">"http://www.example.org/?redirect=http%3a//www.example.net/&foo=bar"</span>.
+ contains the redirection URL <span class=
+ "QUOTE">"http://www.example.net/"</span>, followed by
+ another parameter. <tt class="LITERAL">fast-redirects</tt>
+ doesn't know that and will cause a redirect to <span class=
+ "QUOTE">"http://www.example.net/&foo=bar"</span>.
+ Depending on the target server configuration, the parameter
+ will be silently ignored or lead to a <span class=
+ "QUOTE">"page not found"</span> error. You can prevent this
+ problem by first using the <tt class="LITERAL"><a href=
+ "actions-file.html#REDIRECT">redirect</a></tt> action to
+ remove the last part of the URL, but it requires a little
+ effort.
+ </p>
+ <p>
+ To detect a redirection URL, <tt class=
+ "LITERAL">fast-redirects</tt> only looks for the string
+ <span class="QUOTE">"http://"</span>, either in plain text
+ (invalid but often used) or encoded as <span class=
+ "QUOTE">"http%3a//"</span>. Some sites use their own URL
+ encoding scheme, encrypt the address of the target server
+ or replace it with a database id. In theses cases <tt
+ class="LITERAL">fast-redirects</tt> is fooled and the
+ request reaches the redirection server where it probably
+ gets logged.
+ </p>
+ </dd>
+ <dt>
+ Example usage:
+ </dt>
+ <dd>
+ <p>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
+ { +fast-redirects{simple-check} }
+ one.example.com
+
+ { +fast-redirects{check-decoded-url} }
+ another.example.com/testing
+</pre>
+ </td>
+ </tr>
+ </table>
+ </dd>
+ </dl>
+ </div>
+ </div>
+ <div class="SECT3">
+ <h4 class="SECT3">
+ <a name="FILTER">8.5.16. filter</a>
+ </h4>
+ <div class="VARIABLELIST">
+ <dl>
+ <dt>
+ Typical use:
+ </dt>
+ <dd>
+ <p>
+ Get rid of HTML and JavaScript annoyances, banner
+ advertisements (by size), do fun text replacements, add
+ personalized effects, etc.
+ </p>
+ </dd>
+ <dt>
+ Effect:
+ </dt>
+ <dd>
+ <p>
+ All instances of text-based type, most notably HTML and
+ JavaScript, to which this action applies, can be filtered
+ on-the-fly through the specified regular expression based
+ substitutions. (Note: as of version 3.0.3 plain text
+ documents are exempted from filtering, because web servers
+ often use the <tt class="LITERAL">text/plain</tt> MIME type
+ for all files whose type they don't know.)
+ </p>
+ </dd>
+ <dt>
+ Type:
+ </dt>
+ <dd>
+ <p>
+ Multi-value.
+ </p>
+ </dd>
+ <dt>
+ Parameter:
+ </dt>
+ <dd>
+ <p>
+ The name of a content filter, as defined in the <a href=
+ "filter-file.html">filter file</a>. Filters can be defined
+ in one or more files as defined by the <tt class=
+ "LITERAL"><a href=
+ "config.html#FILTERFILE">filterfile</a></tt> option in the
+ <a href="config.html">config file</a>. <tt class=
+ "FILENAME">default.filter</tt> is the collection of filters
+ supplied by the developers. Locally defined filters should
+ go in their own file, such as <tt class=
+ "FILENAME">user.filter</tt>.
+ </p>
+ <p>
+ When used in its negative form, and without parameters,
+ <span class="emphasis"><i class="EMPHASIS">all</i></span>
+ filtering is completely disabled.
+ </p>
+ </dd>
+ <dt>
+ Notes:
+ </dt>
+ <dd>
+ <p>
+ For your convenience, there are a number of pre-defined
+ filters available in the distribution filter file that you
+ can use. See the examples below for a list.
+ </p>
+ <p>
+ Filtering requires buffering the page content, which may
+ appear to slow down page rendering since nothing is
+ displayed until all content has passed the filters. (The
+ total time until the page is completely rendered doesn't
+ change much, but it may be perceived as slower since the
+ page is not incrementally displayed.) This effect will be
+ more noticeable on slower connections.
+ </p>
+ <p>
+ <span class="QUOTE">"Rolling your own"</span> filters
+ requires a knowledge of <a href=
+ "http://en.wikipedia.org/wiki/Regular_expressions" target=
+ "_top"><span class="QUOTE">"Regular Expressions"</span></a>
+ and <a href="http://en.wikipedia.org/wiki/Html" target=
+ "_top"><span class="QUOTE">"HTML"</span></a>. This is very
+ powerful feature, and potentially very intrusive. Filters
+ should be used with caution, and where an equivalent <span
+ class="QUOTE">"action"</span> is not available.
+ </p>
+ <p>
+ The amount of data that can be filtered is limited to the
+ <tt class="LITERAL"><a href=
+ "config.html#BUFFER-LIMIT">buffer-limit</a></tt> option in
+ the main <a href="config.html">config file</a>. The default
+ is 4096 KB (4 Megs). Once this limit is exceeded, the
+ buffered data, and all pending data, is passed through
+ unfiltered.
+ </p>
+ <p>
+ Inappropriate MIME types, such as zipped files, are not
+ filtered at all. (Again, only text-based types except plain
+ text). Encrypted SSL data (from HTTPS servers) cannot be
+ filtered either, since this would violate the integrity of
+ the secure transaction. In some situations it might be
+ necessary to protect certain text, like source code, from
+ filtering by defining appropriate <tt class=
+ "LITERAL">-filter</tt> exceptions.
+ </p>
+ <p>
+ Compressed content can't be filtered either, but if <span
+ class="APPLICATION">Privoxy</span> is compiled with zlib
+ support and a supported compression algorithm is used (gzip
+ or deflate), <span class="APPLICATION">Privoxy</span> can
+ first decompress the content and then filter it.
+ </p>
+ <p>
+ If you use a <span class="APPLICATION">Privoxy</span>
+ version without zlib support, but want filtering to work on
+ as much documents as possible, even those that would
+ normally be sent compressed, you must use the <tt class=
+ "LITERAL"><a href=
+ "actions-file.html#PREVENT-COMPRESSION">prevent-compression</a></tt>
+ action in conjunction with <tt class="LITERAL">filter</tt>.
+ </p>
+ <p>
+ Content filtering can achieve some of the same effects as
+ the <tt class="LITERAL"><a href=
+ "actions-file.html#BLOCK">block</a></tt> action, i.e. it
+ can be used to block ads and banners. But the mechanism
+ works quite differently. One effective use, is to block ad
+ banners based on their size (see below), since many of
+ these seem to be somewhat standardized.
+ </p>
+ <p>
+ <a href="contact.html">Feedback</a> with suggestions for
+ new or improved filters is particularly welcome!
+ </p>
+ <p>
+ The below list has only the names and a one-line
+ description of each predefined filter. There are <a href=
+ "filter-file.html#PREDEFINED-FILTERS">more verbose
+ explanations</a> of what these filters do in the <a href=
+ "filter-file.html">filter file chapter</a>.
+ </p>
+ </dd>
+ <dt>
+ Example usage (with filters from the distribution <tt class=
+ "FILENAME">default.filter</tt> file). See <a href=
+ "filter-file.html#PREDEFINED-FILTERS">the Predefined Filters
+ section</a> for more explanation on each:
+ </dt>
+ <dd>
+ <p>
+ <a name="FILTER-JS-ANNOYANCES"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{js-annoyances} # Get rid of particularly annoying JavaScript abuse.
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-JS-EVENTS"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{js-events} # Kill JavaScript event bindings and timers (Radically destructive! Only for extra nasty sites).
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-HTML-ANNOYANCES"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{html-annoyances} # Get rid of particularly annoying HTML abuse.
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-CONTENT-COOKIES"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{content-cookies} # Kill cookies that come in the HTML or JS content.
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-REFRESH-TAGS"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{refresh-tags} # Kill automatic refresh tags if refresh time is larger than 9 seconds.
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-UNSOLICITED-POPUPS"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{unsolicited-popups} # Disable only unsolicited pop-up windows.
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-ALL-POPUPS"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{all-popups} # Kill all popups in JavaScript and HTML.
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-IMG-REORDER"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{img-reorder} # Reorder attributes in <img> tags to make the banners-by-* filters more effective.
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-BANNERS-BY-SIZE"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{banners-by-size} # Kill banners by size.
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-BANNERS-BY-LINK"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{banners-by-link} # Kill banners by their links to known clicktrackers.
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-WEBBUGS"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{webbugs} # Squish WebBugs (1x1 invisible GIFs used for user tracking).
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-TINY-TEXTFORMS"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{tiny-textforms} # Extend those tiny textareas up to 40x80 and kill the hard wrap.
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-JUMPING-WINDOWS"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{jumping-windows} # Prevent windows from resizing and moving themselves.
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-FRAMESET-BORDERS"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{frameset-borders} # Give frames a border and make them resizable.
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-IFRAMES"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{iframes} # Removes all detected iframes. Should only be enabled for individual sites.
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-DEMORONIZER"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{demoronizer} # Fix MS's non-standard use of standard charsets.
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-SHOCKWAVE-FLASH"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{shockwave-flash} # Kill embedded Shockwave Flash objects.
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-QUICKTIME-KIOSKMODE"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{quicktime-kioskmode} # Make Quicktime movies saveable.
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-FUN"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{fun} # Text replacements for subversive browsing fun!
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-CRUDE-PARENTAL"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{crude-parental} # Crude parental filtering. Note that this filter doesn't work reliably.
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-IE-EXPLOITS"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{ie-exploits} # Disable some known Internet Explorer bug exploits.
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-SITE-SPECIFICS"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{site-specifics} # Cure for site-specific problems. Don't apply generally!
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-NO-PING"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{no-ping} # Removes non-standard ping attributes in <a> and <area> tags.
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-GOOGLE"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{google} # CSS-based block for Google text ads. Also removes a width limitation and the toolbar advertisement.
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-YAHOO"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{yahoo} # CSS-based block for Yahoo text ads. Also removes a width limitation.
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-MSN"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{msn} # CSS-based block for MSN text ads. Also removes tracking URLs and a width limitation.
+</pre>
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a name="FILTER-BLOGSPOT"></a>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++filter{blogspot} # Cleans up some Blogspot blogs. Read the fine print before using this.
+</pre>
+ </td>
+ </tr>
+ </table>
+ </dd>
+ </dl>
+ </div>
+ </div>
+ <div class="SECT3">
+ <h4 class="SECT3">
+ <a name="FORCE-TEXT-MODE">8.5.17. force-text-mode</a>
+ </h4>
+ <div class="VARIABLELIST">
+ <dl>
+ <dt>
+ Typical use:
+ </dt>
+ <dd>
+ <p>
+ Force <span class="APPLICATION">Privoxy</span> to treat a
+ document as if it was in some kind of <span class=
+ "emphasis"><i class="EMPHASIS">text</i></span> format.
+ </p>
+ </dd>
+ <dt>
+ Effect:
+ </dt>
+ <dd>
+ <p>
+ Declares a document as text, even if the <span class=
+ "QUOTE">"Content-Type:"</span> isn't detected as such.
+ </p>
+ </dd>
+ <dt>
+ Type:
+ </dt>
+ <dd>
+ <p>
+ Boolean.
+ </p>
+ </dd>
+ <dt>
+ Parameter:
+ </dt>
+ <dd>
+ <p>
+ N/A
+ </p>
+ </dd>
+ <dt>
+ Notes:
+ </dt>
+ <dd>
+ <p>
+ As explained <tt class="LITERAL"><a href=
+ "actions-file.html#FILTER">above</a></tt>, <span class=
+ "APPLICATION">Privoxy</span> tries to only filter files
+ that are in some kind of text format. The same restrictions
+ apply to <tt class="LITERAL"><a href=
+ "actions-file.html#CONTENT-TYPE-OVERWRITE">content-type-overwrite</a></tt>.
+ <tt class="LITERAL">force-text-mode</tt> declares a
+ document as text, without looking at the <span class=
+ "QUOTE">"Content-Type:"</span> first.
+ </p>
+ <div class="WARNING">
+ <table class="WARNING" border="1" width="90%">
+ <tr>
+ <td align="CENTER">
+ <b>Warning</b>
+ </td>
+ </tr>
+ <tr>
+ <td align="LEFT">
+ <p>
+ Think twice before activating this action.
+ Filtering binary data with regular expressions can
+ cause file damage.
+ </p>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </dd>
+ <dt>
+ Example usage:
+ </dt>
+ <dd>
+ <p>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
++force-text-mode
+
+</pre>
+ </td>
+ </tr>
+ </table>
+ </dd>
+ </dl>
+ </div>
+ </div>
+ <div class="SECT3">
+ <h4 class="SECT3">
+ <a name="FORWARD-OVERRIDE">8.5.18. forward-override</a>
+ </h4>
+ <div class="VARIABLELIST">
+ <dl>
+ <dt>
+ Typical use:
+ </dt>
+ <dd>
+ <p>
+ Change the forwarding settings based on User-Agent or
+ request origin
+ </p>
+ </dd>
+ <dt>
+ Effect:
+ </dt>
+ <dd>
+ <p>
+ Overrules the forward directives in the configuration file.
+ </p>
+ </dd>
+ <dt>
+ Type:
+ </dt>
+ <dd>
+ <p>
+ Parameterized.
+ </p>
+ </dd>
+ <dt>
+ Parameter:
+ </dt>
+ <dd>
+ <ul>
+ <li>
+ <p>
+ <span class="QUOTE">"forward ."</span> to use a direct
+ connection without any additional proxies.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="QUOTE">"forward 127.0.0.1:8123"</span> to
+ use the HTTP proxy listening at 127.0.0.1 port 8123.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="QUOTE">"forward-socks4a 127.0.0.1:9050
+ ."</span> to use the socks4a proxy listening at
+ 127.0.0.1 port 9050. Replace <span class=
+ "QUOTE">"forward-socks4a"</span> with <span class=
+ "QUOTE">"forward-socks4"</span> to use a socks4
+ connection (with local DNS resolution) instead, use
+ <span class="QUOTE">"forward-socks5"</span> for socks5
+ connections (with remote DNS resolution).
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="QUOTE">"forward-socks4a 127.0.0.1:9050
+ proxy.example.org:8000"</span> to use the socks4a proxy
+ listening at 127.0.0.1 port 9050 to reach the HTTP
+ proxy listening at proxy.example.org port 8000. Replace
+ <span class="QUOTE">"forward-socks4a"</span> with <span
+ class="QUOTE">"forward-socks4"</span> to use a socks4
+ connection (with local DNS resolution) instead, use
+ <span class="QUOTE">"forward-socks5"</span> for socks5
+ connections (with remote DNS resolution).
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="QUOTE">"forward-webserver
+ 127.0.0.1:80"</span> to use the HTTP server listening
+ at 127.0.0.1 port 80 without adjusting the request
+ headers.
+ </p>
+ <p>
+ This makes it more convenient to use Privoxy to make
+ existing websites available as onion services as well.
+ </p>
+ <p>
+ Many websites serve content with hardcoded URLs and
+ can't be easily adjusted to change the domain based on
+ the one used by the client.
+ </p>
+ <p>
+ Putting Privoxy between Tor and the webserver (or an
+ stunnel that forwards to the webserver) allows to
+ rewrite headers and content to make client and server
+ happy at the same time.
+ </p>
+ <p>
+ Using Privoxy for webservers that are only reachable
+ through onion addresses and whose location is supposed
+ to be secret is not recommended and should not be
+ necessary anyway.
+ </p>
+ </li>
+ </ul>
+ </dd>
+ <dt>
+ Notes:
+ </dt>
+ <dd>
+ <p>
+ This action takes parameters similar to the <a href=
+ "config.html#FORWARDING">forward</a> directives in the
+ configuration file, but without the URL pattern. It can be
+ used as replacement, but normally it's only used in cases
+ where matching based on the request URL isn't sufficient.
+ </p>
+ <div class="WARNING">
+ <table class="WARNING" border="1" width="90%">
+ <tr>
+ <td align="CENTER">
+ <b>Warning</b>
+ </td>
+ </tr>
+ <tr>
+ <td align="LEFT">
+ <p>
+ Please read the description for the <a href=
+ "config.html#FORWARDING">forward</a> directives
+ before using this action. Forwarding to the wrong
+ people will reduce your privacy and increase the
+ chances of man-in-the-middle attacks.
+ </p>
+ <p>
+ If the ports are missing or invalid, default values
+ will be used. This might change in the future and
+ you shouldn't rely on it. Otherwise incorrect
+ syntax causes Privoxy to exit. Due to design
+ limitations, invalid parameter syntax isn't
+ detected until the action is used the first time.
+ </p>
+ <p>
+ Use the <a href=
+ "http://config.privoxy.org/show-url-info" target=
+ "_top">show-url-info CGI page</a> to verify that
+ your forward settings do what you thought the do.
+ </p>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </dd>
+ <dt>
+ Example usage:
+ </dt>
+ <dd>
+ <p>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
+# Use an ssh tunnel for requests previously tagged as
+# <span class="QUOTE">"User-Agent: fetch libfetch/2.0"</span> and make sure
+# resuming downloads continues to work.
+#
+# This way you can continue to use Tor for your normal browsing,
+# without overloading the Tor network with your FreeBSD ports updates
+# or downloads of bigger files like ISOs.
+#
+# Note that HTTP headers are easy to fake and therefore their
+# values are as (un)trustworthy as your clients and users.
+{+forward-override{forward-socks5 10.0.0.2:2222 .} \
+ -hide-if-modified-since \
+ -overwrite-last-modified \
+}
+TAG:^User-Agent: fetch libfetch/2\.0$
+
+</pre>
+ </td>
+ </tr>
+ </table>
+ </dd>
+ </dl>
+ </div>
+ </div>
+ <div class="SECT3">
+ <h4 class="SECT3">
+ <a name="HANDLE-AS-EMPTY-DOCUMENT">8.5.19.
+ handle-as-empty-document</a>
+ </h4>
+ <div class="VARIABLELIST">
+ <dl>
+ <dt>
+ Typical use:
+ </dt>
+ <dd>
+ <p>
+ Mark URLs that should be replaced by empty documents <span
+ class="emphasis"><i class="EMPHASIS">if they get
+ blocked</i></span>
+ </p>
+ </dd>
+ <dt>
+ Effect:
+ </dt>
+ <dd>
+ <p>
+ This action alone doesn't do anything noticeable. It just
+ marks URLs. If the <tt class="LITERAL"><a href=
+ "actions-file.html#BLOCK">block</a></tt> action <span
+ class="emphasis"><i class="EMPHASIS">also
+ applies</i></span>, the presence or absence of this mark
+ decides whether an HTML <span class=
+ "QUOTE">"BLOCKED"</span> page, or an empty document will be
+ sent to the client as a substitute for the blocked content.
+ The <span class="emphasis"><i class=
+ "EMPHASIS">empty</i></span> document isn't literally empty,
+ but actually contains a single space.
+ </p>
+ </dd>
+ <dt>
+ Type:
+ </dt>
+ <dd>
+ <p>
+ Boolean.
+ </p>
+ </dd>
+ <dt>
+ Parameter:
+ </dt>
+ <dd>
+ <p>
+ N/A
+ </p>
+ </dd>
+ <dt>
+ Notes:
+ </dt>
+ <dd>
+ <p>
+ Some browsers complain about syntax errors if JavaScript
+ documents are blocked with <span class=
+ "APPLICATION">Privoxy's</span> default HTML page; this
+ option can be used to silence them. And of course this
+ action can also be used to eliminate the <span class=
+ "APPLICATION">Privoxy</span> BLOCKED message in frames.
+ </p>
+ <p>
+ The content type for the empty document can be specified
+ with <tt class="LITERAL"><a href=
+ "actions-file.html#CONTENT-TYPE-OVERWRITE">content-type-overwrite{}</a></tt>,
+ but usually this isn't necessary.
+ </p>
+ </dd>
+ <dt>
+ Example usage:
+ </dt>
+ <dd>
+ <p>
+ </p>
+ <table border="0" bgcolor="#E0E0E0" width="90%">
+ <tr>
+ <td>
+<pre class="SCREEN">
+# Block all documents on example.org that end with ".js",
+# but send an empty document instead of the usual HTML message.
+{+block{Blocked JavaScript} +handle-as-empty-document}