X-Git-Url: http://www.privoxy.org/gitweb/?a=blobdiff_plain;f=doc%2Fsource%2Fuser-manual.sgml;h=ee41b2a53df0f74907a5094b786af5a7401c04fb;hb=6f3341e6839658e923d8ed9535371d12e7c10959;hp=6d9c5d6c26ebb2e66447c3c9933b26af94eef35f;hpb=d4601b54301b53e501fdf17958267dddd6438e9c;p=privoxy.git
diff --git a/doc/source/user-manual.sgml b/doc/source/user-manual.sgml
index 6d9c5d6c..ee41b2a5 100644
--- a/doc/source/user-manual.sgml
+++ b/doc/source/user-manual.sgml
@@ -10,14 +10,15 @@
+
-
-
+
+
-
-
+
+
@@ -30,15 +31,11 @@
Privoxy">
]>
- Copyright &my-copy; 2001-2017 by
+ Copyright &my-copy; 2001-2023 by
Privoxy Developers
-$Id: user-manual.sgml,v 2.221 2017/05/20 09:27:54 fabiankeil Exp $
-
-OS/2
-
-
- First, make sure that no previous installations of
- Junkbuster and / or
- Privoxy are left on your
- system. Check that no Junkbuster
- or Privoxy objects are in
- your startup folder.
-
-
-
-
- Then, just double-click the WarpIN self-installing archive, which will
- guide you through the installation process. A shadow of the
- Privoxy executable will be placed in your
- startup folder so it will start automatically whenever OS/2 starts.
-
-
-
- The directory you choose to install Privoxy
- into will contain all of the configuration files.
-
-
-
Mac OS X
@@ -332,12 +302,16 @@ How to install the binary packages depends on your operating system:
-FreeBSD
+FreeBSD and ElectroBSD
Privoxy is part of FreeBSD's Ports Collection, you can build and install
it with cd /usr/ports/www/privoxy; make install clean.
+
+ If your system is configured to install binary packages you can
+ try to install &my-app; with pkg install privoxy.
+
@@ -346,30 +320,235 @@ How to install the binary packages depends on your operating system:
Building from Source
- The most convenient way to obtain the Privoxy sources
- is to download the source tarball from our
- project download
- page.
-
-
-
- If you like to live on the bleeding edge and are not afraid of using
- possibly unstable development versions, you can check out the up-to-the-minute
- version directly from the
- CVS repository.
-
+ The most convenient way to obtain the Privoxy source
+ code is to download the source tarball from our
+
+ project download page,
+ or you can get the up-to-the-minute, possibly unstable, development version from
+ https://www.privoxy.org/.
&buildsource;
+
+ Windows
+
+ Setup
+
+ Install the Cygwin utilities needed to build Privoxy.
+ If you have a 64 bit CPU (which most people do by now), get the
+ Cygwin setup-x86_64.exe program here
+ (the .sig file is here).
+
+
+ Run the setup program and from View / Category select:
+
+
+Devel
+ autoconf 2.5
+ automake 1.15
+ binutils
+ cmake
+ gcc-core
+ gcc-g++
+ git
+ make
+ mingw64-i686-gcc-core
+ mingw64-i686-zlib
+Editors
+ vim
+Libs
+ libxslt: GNOME XSLT library (runtime)
+Net
+ curl
+ openssh
+Text
+ docbook-dssl
+ docbook-sgml31
+ docbook-utils
+ openjade
+Utils
+ gnupg
+Web
+ w3m
+
+
+
+ If you haven't already downloaded the Privoxy source code, get it now:
+
+
+mkdir <root-dir>
+cd <root-dir>
+git clone https://www.privoxy.org/git/privoxy.git
+
+
+
+ Get the source code (.zip or .tar.gz) for tidy from
+
+ https://github.com/htacg/tidy-html5/releases,
+ unzip into <root-dir> and build the software:
+
+
+cd <root-dir>
+cd tidy-html5-x.y.z/build/cmake
+cmake ../.. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIB:BOOL=OFF -DCMAKE_INSTALL_PREFIX=/usr/local
+make && make install
+
+
+
+ If you want to be able to make a Windows release package, get the NSIS .zip file from
+
+
+ https://sourceforge.net/projects/nsis/files/NSIS%203/
+ and extract the NSIS directory to /<root-dir>/nsis/.
+ Then edit the windows/GNUmakefile to set the location
+ of the NSIS executable - eg:
+
+
+# Path to NSIS
+MAKENSIS = /<root-dir>/nsis/makensis.exe
+
+
+
+ Get the latest 8.x PCRE code from
+ PCRE
+ https://sourceforge.net/projects/pcre/files/pcre/
+ and build the static PCRE libraries with
+
+
+export CFLAGS="-O2 -fstack-protector-strong -D_FORTIFY_SOURCE=2"
+export LDFLAGS="-fstack-protector-strong"
+export CPPFLAGS="-DPCRE_STATIC"
+
+./configure --host=i686-w64-mingw32 \
+ --prefix=/usr/local/i686-w64-mingw32 \
+ --enable-utf --enable-unicode-properties \
+ --enable-jit \
+ --enable-newline-is-anycrlf \
+ --enable-pcre16 \
+ --enable-pcre32 \
+ --disable-pcregrep-libbz2 \
+ --disable-pcregrep-libz \
+ --disable-pcretest-libreadline \
+ --disable-stack-for-recursion \
+ --enable-static --disable-shared \
+ && make
+
+
+
+
+
+ If you want to be able to have Privoxy do TLS Inspection, get the latest
+ 2.28.x MBED-TLS library source code from
+
+ https://github.com/Mbed-TLS/mbedtls/tags,
+ extract the tar file into <root-dir>
+ and build the static libraries with
+
+export WINDOWS_BUILD=1
+# build for a Windows platform
+
+unset DEBUG
+
+export CC=i686-w64-mingw32-gcc
+export LD=i686-w64-mingw32-gcc
+export CFLAGS="-O2 -fstack-protector-strong -D_FORTIFY_SOURCE=2"
+export LDFLAGS="${LDFLAGS} -fstack-protector-strong"
+
+make lib
+# build the libraries
+
+
+
+
+
+ Get the brotli library from
+
+ https://github.com/google/brotli/releases
+ and build the static libraries with
+
+./bootstrap
+# to create the GNU autotools files
+
+autoconf
+
+export CFLAGS="-O2 -fstack-protector-strong -D_FORTIFY_SOURCE=2"
+export LDFLAGS="${LDFLAGS} -fstack-protector-strong"
+
+./configure --host=i686-w64-mingw32 \
+ --prefix=/usr/local/i686-w64-mingw32 \
+ --enable-static \
+ --disable-shared \
+ --with-gnu-ld \
+ --disable-silent-rules \
+ && make
+
+
+
+
+
+
+
+ Build
+
+
+ To build just the Privoxy executable and not the whole installation package, do:
+
+
+cd <root-dir>/privoxy
+./windows/MYconfigure && make
+
+
+
+ Privoxy uses the GNU Autotools
+ for building software, so the process is:
+
+
+autoheader # creates config.h.in
+autoconf # uses config.h.in to create the configure shell script
+./configure [options] # creates GNUmakefile
+make [options] # builds the program
+
+
+
+ The usual configure options for building a native Windows application under cygwin are
+
+
+
+ --host=i686-w64-mingw32
+ --enable-mingw32
+ --enable-zlib
+ --enable-static-linking
+ --disable-pthread
+ --with-brotli
+ --with-mbedtls
+
+
+
+ You can set the CFLAGS and LDFLAGS envars before
+ running configure to set compiler and linker flags. For example:
+
+
+
+$ export CFLAGS="-O2" # set gcc optimization level
+$ export LDFLAGS="-Wl,--nxcompat" # Enable DEP
+$ ./configure --host=i686-w64-mingw32 --enable-mingw32 --enable-zlib \
+> --enable-static-linking --disable-pthread
+$ make # build Privoxy
+
+
+
+ See the Developer's Manual
+ for building a Windows release package.
+
+
+
+
+
+
Keeping your Installation Up-to-Date
@@ -412,7 +591,6 @@ How to install the binary packages depends on your operating system:
versions of Privoxy:
-
@@ -497,11 +675,10 @@ How to install the binary packages depends on your operating system:
that filtering does not work on compressed pages, so if you use, or want to
use, filtering, you will need to force compression off. Example:
-
- { +filter{google} +prevent-compression }
- .google.
-
+{ +filter{google} +prevent-compression }
+.google.
+
Or if you use a number of filters, or filter many sites, you may just want
to turn off compression for all sites in
@@ -529,14 +706,13 @@ How to install the binary packages depends on your operating system:
-->
-Quickstart to Using Privoxy
-
+
@@ -568,7 +744,7 @@ How to install the binary packages depends on your operating system:
Set your browser to use Privoxy as HTTP and
- HTTPS (SSL) proxy
+ HTTPS (SSL) proxy
by setting the proxy configuration for address of
127.0.0.1 and port 8118.
DO NOT activate proxying for FTP or
@@ -581,7 +757,7 @@ How to install the binary packages depends on your operating system:
Flush your browser's disk and memory caches, to remove any cached ad images.
If using Privoxy to manage
- cookies,
+ cookies,
you should remove any currently stored cookies too.
@@ -636,7 +812,6 @@ How to install the binary packages depends on your operating system:
-
@@ -713,7 +888,6 @@ How to install the binary packages depends on your operating system:
set-image-blocker:
-
@@ -788,7 +962,6 @@ How to install the binary packages depends on your operating system:
-
Advanced users will eventually want to explore &my-app;
@@ -834,7 +1007,6 @@ How to install the binary packages depends on your operating system:
A quick and simple step by step example:
-
@@ -858,7 +1030,6 @@ How to install the binary packages depends on your operating system:
-
-
@@ -904,7 +1074,6 @@ How to install the binary packages depends on your operating system:
-
This is a very crude and simple example. There might be good reasons to use a
@@ -941,7 +1110,7 @@ How to install the binary packages depends on your operating system:
Before launching Privoxy for the first time, you
will want to configure your browser(s) to use
Privoxy as a HTTP and HTTPS (SSL)
- proxy. The default is
+ proxy. The default is
127.0.0.1 (or localhost) for the proxy address, and port 8118 (earlier versions
used port 8000). This is the one configuration step that must be done
!
@@ -952,19 +1121,17 @@ How to install the binary packages depends on your operating system:
-
-
@@ -972,8 +1139,7 @@ How to install the binary packages depends on your operating system:
- Tools -> Options -> Advanced -> Network ->Connection -> Settings
-
+ Edit -> Preferences -> Network Settings -> Settings
@@ -982,7 +1148,6 @@ How to install the binary packages depends on your operating system:
Edit -> Preferences -> General -> Connection Settings -> Manual Proxy Configuration
-
@@ -996,7 +1161,6 @@ How to install the binary packages depends on your operating system:
Edit -> Preferences -> Advanced -> Proxies -> HTTP Proxy
-
@@ -1016,7 +1180,6 @@ How to install the binary packages depends on your operating system:
-
-
After doing this, flush your browser's disk and memory caches to force a
re-reading of all pages and to get rid of any ads that may be cached. Remove
- any cookies,
+ any cookies,
if you want Privoxy to manage that. You are now
ready to start enjoying the benefits of using
Privoxy!
@@ -1056,11 +1218,9 @@ How to install the binary packages depends on your operating system:
/etc/privoxy/config as its main configuration
file.
-
- # /etc/init.d/privoxy start
+# /etc/init.d/privoxy start
-
@@ -1079,11 +1239,9 @@ How to install the binary packages depends on your operating system:
To start Privoxy manually, run:
-
- # service privoxy onestart
+# service privoxy onestart
-
@@ -1109,11 +1267,9 @@ Click on the &my-app; Icon to start Privoxy. If no co
Example Unix startup command:
-
- # /usr/sbin/privoxy --user privoxy /etc/privoxy/config
+# /usr/sbin/privoxy --user privoxy /etc/privoxy/config
-
Note that if you installed Privoxy through
a package manager, the package will probably contain a platform-specific
@@ -1122,16 +1278,6 @@ Example Unix startup command:
-
-OS/2
-
- During installation, Privoxy is configured to
- start automatically when the system restarts. You can start it manually by
- double-clicking on the Privoxy icon in the
- Privoxy folder.
-
-
-
Mac OS X
@@ -1260,7 +1406,6 @@ must find a better place for this paragraph
command-line options:
-
@@ -1376,7 +1521,6 @@ must find a better place for this paragraph
-
On MS Windows only there are two additional
@@ -1413,20 +1557,18 @@ for details.
(shortcut: http://p.p/),
which is a built-in page and works without Internet access.
You will see the following section:
-
-
+ Privoxy Menu
-
▪ View & change the current configuration
- ▪ View the source code version numbers
+ ▪ View or toggle the tags that can be set based on the client's address
▪ View the request headers.
@@ -1484,9 +1626,9 @@ for details.
Configuration Files Overview
- For Unix, *BSD and Linux, all configuration files are located in
- /etc/privoxy/ by default. For MS Windows, OS/2, and
- AmigaOS these are all in the same directory as the
+ For Unix, *BSD and GNU/Linux, all configuration files are located in
+ /etc/privoxy/ by default. For MS Windows
+ these are all in the same directory as the
Privoxy executable.
@@ -1498,13 +1640,12 @@ for details.
principle configuration files are:
-
The main configuration file is named config
- on Linux, Unix, BSD, OS/2, and AmigaOS and config.txt
+ on GNU/Linux, Unix, BSD, and config.txt
on Windows. This is a required file.
@@ -1556,7 +1697,6 @@ for details.
-
The syntax of the configuration and filter files may change between different
@@ -1642,7 +1782,6 @@ for details.
are three action files included with Privoxy with
differing purposes:
-
@@ -1705,8 +1844,7 @@ for details.
The default profiles, and their associated actions, as pre-defined in
default.action are:
-
-
Default Configurations
+
Default Configurations
@@ -1823,11 +1961,9 @@ for details.
-
-
The list of actions files to be used are defined in the main configuration
@@ -1951,14 +2087,13 @@ for details.
might look like:
-
-
- { +handle-as-image +block{Banner ads.} }
- # Block these as if they were images. Send no block page.
- banners.example.com
- media.example.com/.*banners
- .example.com/images/ads/
-
+
+{ +handle-as-image +block{Banner ads.} }
+# Block these as if they were images. Send no block page.
+banners.example.com
+media.example.com/.*banners
+.example.com/images/ads/
+
You can trace this process for URL patterns and any given URL by visiting Regular
+ Regular
Expressions (POSIX 1003.2).
@@ -2158,7 +2293,7 @@ for details.
themselves. These work similarly to shell globbing type wild-cards:
* represents zero or more arbitrary characters (this is
equivalent to the
- Regular
+ Regular
Expression based syntax of .*),
? represents any single character (this is equivalent to the
regular expression syntax of a simple .), and you can define
@@ -2210,6 +2345,12 @@ for details.
While flexible, this is not the sophistication of full regular expression based syntax.
+
+ When compiled with FEATURE_PCRE_HOST_PATTERNS patterns can be prefixed with
+ PCRE-HOST-PATTERN: in which case full regular expression
+ (PCRE) can be used for the host pattern as well.
+
+
@@ -2220,7 +2361,7 @@ for details.
Privoxy uses modern POSIX 1003.2
- Regular
+ Regular
Expressions for matching the path portion (after the slash),
and is thus more flexible.
@@ -2399,12 +2540,6 @@ for details.
-
-
- This is an experimental feature. The syntax is likely to change in future versions.
-
-
-
Client tag patterns are not set based on HTTP headers but based on
the client's IP address. Users can enable them themselves, but the
@@ -2435,7 +2570,6 @@ for details.
Example:
-
# If the admin defined the client-specific-tag circumvent-blocks,
# and the request comes from a client that previously requested
@@ -2448,7 +2582,6 @@ CLIENT-TAG:^circumvent-blocks$
# the previous one.
{+block{Nobody is supposed to request this.}}
example.org/blocked-example-page
-
@@ -2470,7 +2603,6 @@ example.org/blocked-example-page
following patterns, and -block means don't
block URLs that match the following patterns, even if +block
previously applied.
-
@@ -2486,18 +2618,16 @@ example.org/blocked-example-page
Actions fall into three categories:
-
Boolean, i.e the action can only be enabled or
disabled. Syntax:
-
- +name # enable action name
- -name # disable action name
-
++name # enable action name
+-name # disable action name
+
Example: +handle-as-image
@@ -2509,12 +2639,11 @@ example.org/blocked-example-page
Parameterized, where some value is required in order to enable this type of action.
Syntax:
-
-
- +name{param} # enable action and set parameter to param,
- # overwriting parameter from previous match if necessary
- -name # disable action. The parameter can be omitted
-
+
++name{param} # enable action and set parameter to param,
+ # overwriting parameter from previous match if necessary
+-name # disable action. The parameter can be omitted
+
Note that if the URL matches multiple positive forms of a parameterized action,
the last match wins, i.e. the params from earlier matches are simply ignored.
@@ -2533,13 +2662,12 @@ example.org/blocked-example-page
that can be executed for the same request repeatedly, like adding multiple
headers, or filtering through multiple filters. Syntax:
-
-
- +name{param} # enable action and add param to the list of parameters
- -name{param} # remove the parameter param from the list of parameters
- # If it was the last one left, disable the action.
- -name # disable this action completely and remove all parameters from the list
-
+
++name{param} # enable action and add param to the list of parameters
+-name{param} # remove the parameter param from the list of parameters
+ # If it was the last one left, disable the action.
+-name # disable this action completely and remove all parameters from the list
+
Examples: +add-header{X-Fun-Header: Some text} and
+filter{html-annoyances}
@@ -2547,7 +2675,6 @@ example.org/blocked-example-page
-
If nothing is specified in any actions file, no actions are
@@ -2642,7 +2769,6 @@ example.org/blocked-example-page
Example usage:
- # Add a DNT ("Do not track") header to all requests,
# event to those that already have one.
#
@@ -2653,7 +2779,6 @@ example.org/blocked-example-page
# header may make user-tracking easier.
{+add-header{DNT: 1}}
/
-
@@ -2742,20 +2867,20 @@ example.org/blocked-example-page
Example usage (section):
-
- {+block{No nasty stuff for you.}}
+
+{+block{No nasty stuff for you.}}
# Block and replace with "blocked" page
- .nasty-stuff.example.com
+.nasty-stuff.example.com
{+block{Doubleclick banners.} +handle-as-image}
# Block and replace with image
- .ad.doubleclick.net
- .ads.r.us/banners/
+.ad.doubleclick.net
+.ads.r.us/banners/
{+block{Layered ads.} +handle-as-empty-document}
# Block and then ignore
- adserver.example.net/.*\.js$
-
+adserver.example.net/.*\.js$
+
@@ -2826,9 +2951,7 @@ example.org/blocked-example-page
Example usage:
- +change-x-forwarded-for{block}
-
@@ -2894,6 +3017,21 @@ example.org/blocked-example-page
one. This can be used to rewrite the request destination behind the client's
back, for example to specify a Tor exit relay for certain requests.
+
+ Note that to change the destination host for
+ https-inspected
+ requests a protocol and host has to be added to the URI.
+
+
+ If https inspection
+ is enabled, the protocol can be downgraded from https to http
+ but upgrading a request from http to https is currently not
+ supported.
+
+
+ After detecting a rewrite, &my-app; does not update the actions
+ used for the request based on the new host.
+
Please refer to the filter file chapter
to learn which client-header filters are available by default, and how to
@@ -2906,30 +3044,27 @@ example.org/blocked-example-page
Example usage (section):
-
# Hide Tor exit notation in Host and Referer Headers
{+client-header-filter{hide-tor-exit-notation}}
/
-
-
+
-
-
-client-header-tagger
+
+client-body-filterTypical use:
- Block requests based on their headers.
+ Rewrite or remove client request body.
@@ -2938,9 +3073,8 @@ example.org/blocked-example-page
Effect:
- Client headers to which this action applies are filtered on-the-fly through
- the specified regular expression based substitutions, the result is used as
- tag.
+ All request bodies to which this action applies are filtered on-the-fly through
+ the specified regular expression based substitutions.
@@ -2957,7 +3091,7 @@ example.org/blocked-example-page
Parameter:
- The name of a client-header tagger, as defined in one of the
+ The name of a client-body filter, as defined in one of the
filter files.
@@ -2967,77 +3101,31 @@ example.org/blocked-example-page
Notes:
- Client-header taggers are applied to each header on its own,
- and as the header isn't modified, each tagger sees
- the original.
+ Please refer to the filter file chapter
+ to learn how to create your own client-body filters.
- Client-header taggers are the first actions that are executed
- and their tags can be used to control every other action.
+ The distribution default.filter file contains a selection of
+ client-body filters for example purposes.
-
+
+ The amount of data that can be filtered is limited by the
+ buffer-limit
+ option in the main config file. The
+ default is 4096 KB (4 Megs). Once this limit is exceeded, the whole
+ request body is passed through unfiltered.
+
+
Example usage (section):
-
-
-# Tag every request with the User-Agent header
-{+client-header-tagger{user-agent}}
-/
-
-# Tagging itself doesn't change the action
-# settings, sections with TAG patterns do:
-#
-# If it's a download agent, use a different forwarding proxy,
-# show the real User-Agent and make sure resume works.
-{+forward-override{forward-socks5 10.0.0.2:2222 .} \
- -hide-if-modified-since \
- -overwrite-last-modified \
- -hide-user-agent \
- -filter \
- -deanimate-gifs \
-}
-TAG:^User-Agent: NetBSD-ftp/
-TAG:^User-Agent: Novell ZYPP Installer
-TAG:^User-Agent: RPM APT-HTTP/
-TAG:^User-Agent: fetch libfetch/
-TAG:^User-Agent: Ubuntu APT-HTTP/
-TAG:^User-Agent: MPlayer/
-
-
-
-
-# Tag all requests with the Range header set
-{+client-header-tagger{range-requests}}
-/
-
-# Disable filtering for the tagged requests.
-#
-# With filtering enabled Privoxy would remove the Range headers
-# to be able to filter the whole response. The downside is that
-# it prevents clients from resuming downloads or skipping over
-# parts of multimedia files.
-{-filter -deanimate-gifs}
-TAG:^RANGE-REQUEST$
-
-
-
-# Tag all requests with the client IP address
-#
-# (Technically the client IP address isn't included in the
-# client headers but client-header taggers can set it anyway.
-# For details see the tagger in default.filter)
-{+client-header-tagger{client-ip-address}}
+# Remove "test" everywhere in the request body
+{+client-body-filter{remove-test}}
/
-
-# Change forwarding settings for requests coming from address 10.0.0.1
-{+forward-override{forward-socks5 127.0.1.2:2222 .}}
-TAG:^IP-ADDRESS: 10\.0\.0\.1$
-
-
+
@@ -3046,14 +3134,16 @@ TAG:^IP-ADDRESS: 10\.0\.0\.1$
-
-content-type-overwrite
+
+client-body-taggerTypical use:
- Stop useless download menus from popping up, or change the browser's rendering mode
+
+ Block requests based on the content of the body data.
+
@@ -3061,16 +3151,17 @@ TAG:^IP-ADDRESS: 10\.0\.0\.1$
Effect:
- Replaces the Content-Type: HTTP server header.
+ Client request bodies to which this action applies are filtered on-the-fly through
+ the specified regular expression based substitutions, the result is used as tag.
Type:
-
+
- Parameterized.
+ Multi-value.
@@ -3078,7 +3169,8 @@ TAG:^IP-ADDRESS: 10\.0\.0\.1$
Parameter:
- Any string.
+ The name of a client-body tagger, as defined in one of the
+ filter files.
@@ -3087,59 +3179,254 @@ TAG:^IP-ADDRESS: 10\.0\.0\.1$
Notes:
- The Content-Type: HTTP server header is used by the
- browser to decide what to do with the document. The value of this
- header can cause the browser to open a download menu instead of
- displaying the document by itself, even if the document's format is
- supported by the browser.
-
-
- The declared content type can also affect which rendering mode
- the browser chooses. If XHTML is delivered as text/html,
- many browsers treat it as yet another broken HTML document.
- If it is send as application/xml, browsers with
- XHTML support will only display it, if the syntax is correct.
-
-
- If you see a web site that proudly uses XHTML buttons, but sets
- Content-Type: text/html, you can use &my-app;
- to overwrite it with application/xml and validate
- the web master's claim inside your XHTML-supporting browser.
- If the syntax is incorrect, the browser will complain loudly.
-
-
- You can also go the opposite direction: if your browser prints
- error messages instead of rendering a document falsely declared
- as XHTML, you can overwrite the content type with
- text/html and have it rendered as broken HTML document.
-
-
- By default content-type-overwrite only replaces
- Content-Type: headers that look like some kind of text.
- If you want to overwrite it unconditionally, you have to combine it with
- force-text-mode.
- This limitation exists for a reason, think twice before circumventing it.
+ Please refer to the filter file chapter
+ to learn how to create your own client-body tagger.
- Most of the time it's easier to replace this action with a custom
- server-header filter.
- It allows you to activate it for every document of a certain site and it will still
- only replace the content types you aimed at.
+ Client-body taggers are applied to each request body on its own,
+ and as the body isn't modified, each tagger "sees" the original.
- Of course you can apply content-type-overwrite
- to a whole site and then make URL based exceptions, but it's a lot
- more work to get the same precision.
+ Chunk-encoded request bodies currently can't be tagged.
+ Request bodies larger than the buffer-limit can't be tagged either.
- Example usage (sections):
+ Example usage (section):
-
- # Check if www.example.net/ really uses valid XHTML
-{ +content-type-overwrite{application/xml} }
+
+# Apply blafasel tagger.
+{+client-body-tagger{blafasel}}
+/
+
+# Block request based on the tag created by the blafasel tagger.
+{+block{Request body contains blafasel}}
+TAG:^content contains blafasel$
+
+
+
+
+
+
+
+
+
+
+client-header-tagger
+
+
+
+ Typical use:
+
+
+ Block requests based on their headers.
+
+
+
+
+
+ Effect:
+
+
+ Client headers to which this action applies are filtered on-the-fly through
+ the specified regular expression based substitutions, the result is used as
+ tag.
+
+
+
+
+
+ Type:
+
+
+ Multi-value.
+
+
+
+
+ Parameter:
+
+
+ The name of a client-header tagger, as defined in one of the
+ filter files.
+
+
+
+
+
+ Notes:
+
+
+ Client-header taggers are applied to each header on its own,
+ and as the header isn't modified, each tagger sees
+ the original.
+
+
+ Client-header taggers are the first actions that are executed
+ and their tags can be used to control every other action.
+
+
+
+
+
+ Example usage (section):
+
+
+# Tag every request with the User-Agent header
+{+client-header-tagger{user-agent}}
+/
+
+# Tagging itself doesn't change the action
+# settings, sections with TAG patterns do:
+#
+# If it's a download agent, use a different forwarding proxy,
+# show the real User-Agent and make sure resume works.
+{+forward-override{forward-socks5 10.0.0.2:2222 .} \
+ -hide-if-modified-since \
+ -overwrite-last-modified \
+ -hide-user-agent \
+ -filter \
+ -deanimate-gifs \
+}
+TAG:^User-Agent: NetBSD-ftp/
+TAG:^User-Agent: Novell ZYPP Installer
+TAG:^User-Agent: RPM APT-HTTP/
+TAG:^User-Agent: fetch libfetch/
+TAG:^User-Agent: Ubuntu APT-HTTP/
+TAG:^User-Agent: MPlayer/
+
+
+
+# Tag all requests with the Range header set
+{+client-header-tagger{range-requests}}
+/
+
+# Disable filtering for the tagged requests.
+#
+# With filtering enabled Privoxy would remove the Range headers
+# to be able to filter the whole response. The downside is that
+# it prevents clients from resuming downloads or skipping over
+# parts of multimedia files.
+{-filter -deanimate-gifs}
+TAG:^RANGE-REQUEST$
+
+
+
+# Tag all requests with the client IP address
+#
+# (Technically the client IP address isn't included in the
+# client headers but client-header taggers can set it anyway.
+# For details see the tagger in default.filter)
+{+client-header-tagger{client-ip-address}}
+/
+
+# Change forwarding settings for requests coming from address 10.0.0.1
+{+forward-override{forward-socks5 127.0.1.2:2222 .}}
+TAG:^IP-ADDRESS: 10\.0\.0\.1$
+
+
+
+
+
+
+
+
+
+
+content-type-overwrite
+
+
+
+ Typical use:
+
+ Stop useless download menus from popping up, or change the browser's rendering mode
+
+
+
+
+ Effect:
+
+
+ Replaces the Content-Type: HTTP server header.
+
+
+
+
+
+ Type:
+
+
+ Parameterized.
+
+
+
+
+ Parameter:
+
+
+ Any string.
+
+
+
+
+
+ Notes:
+
+
+ The Content-Type: HTTP server header is used by the
+ browser to decide what to do with the document. The value of this
+ header can cause the browser to open a download menu instead of
+ displaying the document by itself, even if the document's format is
+ supported by the browser.
+
+
+ The declared content type can also affect which rendering mode
+ the browser chooses. If XHTML is delivered as text/html,
+ many browsers treat it as yet another broken HTML document.
+ If it is send as application/xml, browsers with
+ XHTML support will only display it, if the syntax is correct.
+
+
+ If you see a web site that proudly uses XHTML buttons, but sets
+ Content-Type: text/html, you can use &my-app;
+ to overwrite it with application/xml and validate
+ the web master's claim inside your XHTML-supporting browser.
+ If the syntax is incorrect, the browser will complain loudly.
+
+
+ You can also go the opposite direction: if your browser prints
+ error messages instead of rendering a document falsely declared
+ as XHTML, you can overwrite the content type with
+ text/html and have it rendered as broken HTML document.
+
+
+ By default content-type-overwrite only replaces
+ Content-Type: headers that look like some kind of text.
+ If you want to overwrite it unconditionally, you have to combine it with
+ force-text-mode.
+ This limitation exists for a reason, think twice before circumventing it.
+
+
+ Most of the time it's easier to replace this action with a custom
+ server-header filter.
+ It allows you to activate it for every document of a certain site and it will still
+ only replace the content types you aimed at.
+
+
+ Of course you can apply content-type-overwrite
+ to a whole site and then make URL based exceptions, but it's a lot
+ more work to get the same precision.
+
+
+
+
+
+ Example usage (sections):
+
+ # Check if www.example.net/ really uses valid XHTML
+{ +content-type-overwrite{application/xml} }
www.example.net/
# but leave the content type unmodified if the URL looks like a style sheet
@@ -3147,7 +3434,6 @@ www.example.net/
www.example.net/.*\.css$
www.example.net/.*style
-
@@ -3226,12 +3512,10 @@ new action
Example usage (section):
- # Block the non-existent "Privacy-Violation:" client header
{ +crunch-client-header{Privacy-Violation:} }
/
-
-
+
@@ -3308,14 +3592,13 @@ new action
Example usage (section):
- # Let the browser revalidate cached documents but don't
# allow the server to use the revalidation headers for user tracking.
{+hide-if-modified-since{-60} \
+overwrite-last-modified{randomize} \
+crunch-if-none-match}
-/
-
+/
+
@@ -3383,9 +3666,7 @@ new action
Example usage:
- +crunch-incoming-cookies
-
@@ -3462,11 +3743,10 @@ new action
Example usage (section):
- # Crunch server headers that try to prevent caching
{ +crunch-server-header{no-cache} }
-/
-
+/
+
@@ -3533,9 +3813,7 @@ new action
Example usage:
- +crunch-outgoing-cookies
-
@@ -3603,14 +3881,82 @@ new action
Example usage:
- +deanimate-gifs{last}
-
+
+
+
+delay-response
+
+
+
+ Typical use:
+
+ Delay responses to the client to reduce the load
+
+
+
+
+ Effect:
+
+
+ Delays responses to the client by sending the response in ca. 10 byte chunks.
+
+
+
+
+
+ Type:
+
+
+ Parameterized.
+
+
+
+
+ Parameter:
+
+
+ Number of milliseconds
+
+
+
+
+
+ Notes:
+
+
+ Sometimes when JavaScript code is used to fetch advertisements
+ it doesn't respect Privoxy's blocks and retries to fetch the
+ same resource again causing unnecessary load on the client.
+
+
+ This action delays responses to the client and can be combined
+ with blocks
+ to slow down the JavaScript code, thus reducing
+ the load on the client.
+
+
+ When used without blocks
+ the action can also be used to simulate a slow internet connection.
+
+
+
+
+
+ Example usage:
+
+ +delay-response{100}
+
+
+
+
+
+
downgrade-http-version
@@ -3675,16 +4021,15 @@ new action
Example usage (section):
- {+downgrade-http-version}
problem-host.example.com
-
+
external-filter
@@ -3758,6 +4103,12 @@ problem-host.example.com
linkend="external-filter-syntax">syntax
may change in the future.
+
+ If you want to apply external filters to images or other content
+ that isn't text-based, enable the
+ force-text-mode
+ action as well.
+
@@ -3765,9 +4116,7 @@ problem-host.example.com
Example usage:
- +external-filter{fancy-filter}
-
@@ -3872,7 +4221,7 @@ problem-host.example.com
looks for the string http://, either in plain text
(invalid but often used) or encoded as http%3a//.
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
+ of the target server or replace it with a database id. In these cases
fast-redirects is fooled and the request reaches the
redirection server where it probably gets logged.
@@ -3882,14 +4231,13 @@ problem-host.example.com
Example usage:
-
- { +fast-redirects{simple-check} }
- one.example.com
+{ +fast-redirects{simple-check} }
+one.example.com
- { +fast-redirects{check-decoded-url} }
- another.example.com/testing
-
+{ +fast-redirects{check-decoded-url} }
+another.example.com/testing
+
@@ -3969,15 +4317,15 @@ problem-host.example.com
Rolling your own
filters requires a knowledge of
- Regular
+ Regular
Expressions and
- HTML.
+ HTML.
This is very powerful feature, and potentially very intrusive.
Filters should be used with caution, and where an equivalent
action is not available.
- The amount of data that can be filtered is limited to the
+ The amount of data that can be filtered is limited by the
buffer-limit
option in the main config file. The
default is 4096 KB (4 Megs). Once this limit is exceeded, the buffered
@@ -4031,112 +4379,128 @@ problem-host.example.com
- +filter{js-annoyances} # Get rid of particularly annoying JavaScript abuse.
+ +filter{js-annoyances} # Get rid of particularly annoying JavaScript abuse.
- +filter{js-events} # Kill JavaScript event bindings and timers (Radically destructive! Only for extra nasty sites).
+ +filter{js-events} # Kill JavaScript event bindings and timers (Radically destructive! Only for extra nasty sites).
- +filter{html-annoyances} # Get rid of particularly annoying HTML abuse.
+ +filter{html-annoyances} # Get rid of particularly annoying HTML abuse.
- +filter{content-cookies} # Kill cookies that come in the HTML or JS content.
+ +filter{content-cookies} # Kill cookies that come in the HTML or JS content.
- +filter{refresh-tags} # Kill automatic refresh tags if refresh time is larger than 9 seconds.
+ +filter{refresh-tags} # Kill automatic refresh tags if refresh time is larger than 9 seconds.
- +filter{unsolicited-popups} # Disable only unsolicited pop-up windows.
+ +filter{unsolicited-popups} # Disable only unsolicited pop-up windows.
- +filter{all-popups} # Kill all popups in JavaScript and HTML.
+ +filter{all-popups} # Kill all popups in JavaScript and HTML.
- +filter{img-reorder} # Reorder attributes in <img> tags to make the banners-by-* filters more effective.
+ +filter{img-reorder} # Reorder attributes in <img> tags to make the banners-by-* filters more effective.
- +filter{banners-by-size} # Kill banners by size.
+ +filter{banners-by-size} # Kill banners by size.
- +filter{banners-by-link} # Kill banners by their links to known clicktrackers.
+ +filter{banners-by-link} # Kill banners by their links to known clicktrackers.
- +filter{webbugs} # Squish WebBugs (1x1 invisible GIFs used for user tracking).
+ +filter{webbugs} # Squish WebBugs (1x1 invisible GIFs used for user tracking).
- +filter{tiny-textforms} # Extend those tiny textareas up to 40x80 and kill the hard wrap.
+ +filter{tiny-textforms} # Extend those tiny textareas up to 40x80 and kill the hard wrap.
- +filter{jumping-windows} # Prevent windows from resizing and moving themselves.
+ +filter{jumping-windows} # Prevent windows from resizing and moving themselves.
- +filter{frameset-borders} # Give frames a border and make them resizable.
+ +filter{frameset-borders} # Give frames a border and make them resizable.
- +filter{iframes} # Removes all detected iframes. Should only be enabled for individual sites.
+ +filter{iframes} # Removes all detected iframes. Should only be enabled for individual sites.
- +filter{demoronizer} # Fix MS's non-standard use of standard charsets.
+ +filter{demoronizer} # Fix MS's non-standard use of standard charsets.
- +filter{shockwave-flash} # Kill embedded Shockwave Flash objects.
+ +filter{shockwave-flash} # Kill embedded Shockwave Flash objects.
- +filter{quicktime-kioskmode} # Make Quicktime movies saveable.
+ +filter{quicktime-kioskmode} # Make Quicktime movies saveable.
- +filter{fun} # Text replacements for subversive browsing fun!
+ +filter{fun} # Text replacements for subversive browsing fun!
- +filter{crude-parental} # Crude parental filtering. Note that this filter doesn't work reliably.
+ +filter{crude-parental} # Crude parental filtering. Note that this filter doesn't work reliably.
- +filter{ie-exploits} # Disable some known Internet Explorer bug exploits.
+ +filter{ie-exploits} # Disable some known Internet Explorer bug exploits.
- +filter{site-specifics} # Cure for site-specific problems. Don't apply generally!
+ +filter{site-specifics} # Cure for site-specific problems. Don't apply generally!
+ +filter{no-ping} # Removes non-standard ping attributes in <a> and <area> tags.
+
+
+
+ +filter{bundeswehr.de} # Hide the cookie and privacy info banner on bundeswehr.de.
+
+
+ +filter{github} # Removes the annoying "Sign-Up" banner and the Cookie disclaimer.
+ +filter{google} # CSS-based block for Google text ads. Also removes a width limitation and the toolbar advertisement.
+
+
+ +filter{imdb} # Removes some ads on IMDb.
- +filter{yahoo} # CSS-based block for Yahoo text ads. Also removes a width limitation.
+ +filter{yahoo} # CSS-based block for Yahoo text ads. Also removes a width limitation.
- +filter{msn} # CSS-based block for MSN text ads. Also removes tracking URLs and a width limitation.
+ +filter{msn} # CSS-based block for MSN text ads. Also removes tracking URLs and a width limitation.
+ +filter{blogspot} # Cleans up some Blogspot blogs. Read the fine print before using this.
+
+
+ +filter{sourceforge} # Reduces the amount of ads for proprietary software on SourceForge.
@@ -4206,11 +4570,9 @@ new action
Example usage:
-
+force-text-mode
-
-
+
@@ -4339,7 +4701,6 @@ new action
Example usage:
-
# Use an ssh tunnel for requests previously tagged as
# User-Agent: fetch libfetch/2.0 and make sure
@@ -4356,8 +4717,7 @@ new action
-overwrite-last-modified \
}
TAG:^User-Agent: fetch libfetch/2\.0$
-
-
+
@@ -4429,13 +4789,11 @@ new action
Example usage:
- # 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}
example.org/.*\.js$
-
-
+
@@ -4510,7 +4868,6 @@ example.org/.*\.js$
Example usage (sections):
- # Generic image extensions:
#
{+handle-as-image}
@@ -4522,7 +4879,6 @@ example.org/.*\.js$
{+block{Nasty banners.} +handle-as-image}
nasty-banner-server.example.com/junk.cgi\?output=trash
-
@@ -4602,13 +4958,12 @@ new action
Example usage (section):
- # Pretend to use Canadian language settings.
{+hide-accept-language{en-ca} \
+hide-user-agent{Mozilla/5.0 (X11; U; OpenBSD i386; en-CA; rv:1.8.0.4) Gecko/20060628 Firefox/1.5.0.4} \
}
-/
-
+/
+
@@ -4692,13 +5047,14 @@ new action
Example usage:
-
- # Disarm the download link in Sourceforge's patch tracker
+
+# Disarm the download link in Sourceforge's patch tracker
{ -filter \
- +content-type-overwrite{text/plain}\
- +hide-content-disposition{block} }
- .sourceforge.net/tracker/download\.php
-
+ +content-type-overwrite{text/plain} \
+ +hide-content-disposition{block} \
+}
+.sourceforge.net/tracker/download\.php
+
@@ -4781,13 +5137,11 @@ new action
Example usage (section):
- # Let the browser revalidate but make tracking based on the time less likely.
{+hide-if-modified-since{-60} \
+overwrite-last-modified{randomize} \
+crunch-if-none-match}
/
-
@@ -4856,10 +5210,9 @@ new action
Example usage:
-
- +hide-from-header{block} or
+ +hide-from-header{block}
+ or+hide-from-header{spam-me-senseless@sittingduck.example.com}
-
@@ -4960,10 +5313,9 @@ new action
Example usage:
-
- +hide-referrer{forge} or
+ +hide-referrer{forge}
+ or+hide-referrer{http://www.yahoo.com/}
-
@@ -5034,17 +5386,160 @@ new action
More information on known user-agent strings can be found at
http://www.user-agents.org/
and
- http://en.wikipedia.org/wiki/User_agent.
+ http://en.wikipedia.org/wiki/User_agent.
Example usage:
+
+ +hide-user-agent{Mozilla/5.0 (X11; ElectroBSD i386; rv:78.0) Gecko/20100101 Firefox/78.0}
+
+
+
+
+
+
+
+
+https-inspection
+
+
+
+ Typical use:
+
+ Filter encrypted requests and responses
+
+
+
+
+ Effect:
+
+
+ Encrypted requests are decrypted, filtered and forwarded encrypted.
+
+
+
+
+
+ Type:
+
+
+ Boolean.
+
+
+
+
+ Parameter:
+
+
+ N/A
+
+
+
+
+
+ Notes:
+
+
+ This action allows &my-app; to filter encrypted requests and responses.
+ For this to work &my-app; has to generate a certificate for the web site
+ and send it to the client which has to accept it.
+
+
+ Before this works the directives in the
+ HTTPS inspection section
+ of the config file have to be configured.
+
+
+ Note that the action has to be enabled based on the CONNECT
+ request which doesn't contain a path. Enabling it based on
+ a pattern with path doesn't work as the path is only seen
+ by &my-app; if the action is already enabled.
+
+
+
+
+
+ Example usage (section):
+
+ {+https-inspection}
+www.example.com
+
+
+
+
+
+
+
+
+
+ignore-certificate-errors
+
+
+
+ Typical use:
+
+ Filter encrypted requests and responses without verifying the certificate
+
+
+
+
+ Effect:
+
+
+ Encrypted requests are forwarded to sites without verifying the certificate.
+
+
+
+
+
+ Type:
+
+
+ Boolean.
+
+
+
+
+ Parameter:
+
+
+ N/A
+
+
+
+
+
+ Notes:
- +hide-user-agent{Netscape 6.1 (X11; I; Linux 2.4.18 i686)}
+ When the
+ +https-inspection
+ action is used &my-app; by default verifies that the remote site uses a valid
+ certificate.
+
+ If the certificate can't be validated by &my-app; the connection is aborted.
+
+
+ This action disables the certificate check so requests to sites
+ with certificates that can't be validated are allowed.
+
+
+ Note that enabling this action allows Man-in-the-middle attacks.
+
+
+
+
+
+ Example usage:
+
+
+ {+ignore-certificate-errors}
+ www.example.org
+
@@ -5120,13 +5615,11 @@ new action
- +limit-connect{443} # Port 443 is OK.
+limit-connect{80,443} # Ports 80 and 443 are OK.
+limit-connect{-3, 7, 20-100, 500-} # Ports less than 3, 7, 20 to 100 and above 500 are OK.
+limit-connect{-} # All ports are OK
+limit-connect{,} # No HTTPS/SSL traffic is allowed
-
@@ -5211,10 +5704,7 @@ new action
Example usages:
-
- +limit-cookie-lifetime{60}
-
-
+ +limit-cookie-lifetime{60}
@@ -5290,9 +5780,10 @@ new action
Note that some (rare) ill-configured sites don't handle requests for uncompressed
documents correctly. Broken PHP applications tend to send an empty document body,
- some IIS versions only send the beginning of the content. If you enable
- prevent-compression per default, you might want to add
- exceptions for those sites. See the example for how to do that.
+ some IIS versions only send the beginning of the content and some content delivery
+ networks let the connection time out.
+ If you enable prevent-compression per default, you might
+ want to add exceptions for those sites. See the example for how to do that.
@@ -5300,26 +5791,25 @@ new action
Example usage (sections):
-
# Selectively turn off compression, and enable a filter
#
{ +filter{tiny-textforms} +prevent-compression }
# Match only these sites
- .google.
- sourceforge.net
- sf.net
+.google.
+sourceforge.net
+sf.net
# Or instead, we could set a universal default:
#
{ +prevent-compression }
- / # Match all sites
+/ # Match all sites
# Then maybe make exceptions for broken sites:
#
{ -prevent-compression }
-.compusa.com/
-
+.compusa.com/
+
@@ -5411,13 +5901,14 @@ new action
Example usage:
-
- # Let the browser revalidate without being tracked across sessions
+
+# Let the browser revalidate without being tracked across sessions
{ +hide-if-modified-since{-60} \
- +overwrite-last-modified{randomize} \
- +crunch-if-none-match}
-/
-
+ +overwrite-last-modified{randomize} \
+ +crunch-if-none-match \
+}
+/
+
@@ -5508,15 +5999,15 @@ new action
Example usages:
-
- # Replace example.com's style sheet with another one
+
+# Replace example.com's style sheet with another one
{ +redirect{http://localhost/css-replacements/example.com.css} }
- example.com/stylesheet\.css
+example.com/stylesheet\.css
# Create a short, easy to remember nickname for a favorite site
# (relies on the browser to accept and forward invalid URLs to &my-app;)
{ +redirect{https://www.privoxy.org/user-manual/actions-file.html} }
- a
+a
# Always use the expanded view for Undeadly.org articles
# (Note the $ at the end of the URL pattern to make sure
@@ -5545,11 +6036,14 @@ example.com/.*toChange=(?!bar)
# Redirect Destination = https://www.illumos.org/issues/4974
i[0-9][0-9][0-9][0-9]*/
+# Redirect requests for the old Tor Hidden Service of the Privoxy website to the new one
+{+redirect{s@^http://jvauzb4sb3bwlsnc.onion/@http://l3tczdiiwoo63iwxty4lhs6p7eaxop5micbn7vbliydgv63x5zrrrfyd.onion/@}}
+jvauzb4sb3bwlsnc.onion/
+
# Redirect remote requests for this manual
# to the local version delivered by Privoxy
{+redirect{s@^http://www@http://config@}}
www.privoxy.org/user-manual/
-
@@ -5623,15 +6117,13 @@ www.privoxy.org/user-manual/
Example usage (section):
-
{+server-header-filter{html-to-xml}}
example.org/xml-instance-that-is-delivered-as-html
{+server-header-filter{xml-to-html}}
example.org/instance-that-is-delivered-as-xml-but-is-not
-
-
+
@@ -5708,7 +6200,6 @@ example.org/instance-that-is-delivered-as-xml-but-is-not
Example usage (section):
-
# Tag every request with the content type declared by the server
{+server-header-tagger{content-type}}
@@ -5721,8 +6212,64 @@ example.org/instance-that-is-delivered-as-xml-but-is-not
# silly example.
{+external-filter{rotate-image} +force-text-mode}
TAG:^image/
-
-
+
+
+
+
+
+
+
+
+
+
+suppress-tag
+
+
+
+ Typical use:
+
+
+ Suppress client or server tag.
+
+
+
+
+
+ Effect:
+
+
+ Server or client tags to which this action applies are not added to the request,
+ thus making all actions that are specific to these request tags inactive.
+
+
+
+
+
+ Type:
+
+
+ Multi-value.
+
+
+
+
+ Parameter:
+
+
+ The result tag of a server-header or client-header tagger, as defined in one of the
+ filter files.
+
+
+
+
+
+ Example usage (section):
+
+
+# Suppress tag produced by range-requests client-header tagger for requests coming from address 10.0.0.1
+{+suppress-tag{RANGE-REQUEST}}
+TAG:^IP-ADDRESS: 10\.0\.0\.1$
+
@@ -5815,9 +6362,7 @@ TAG:^image/
Example usage:
- +session-cookies-only
-
@@ -5917,21 +6462,15 @@ TAG:^image/
Built-in pattern:
- +set-image-blocker{pattern}
-
Redirect to the BSD daemon:
- +set-image-blocker{http://www.freebsd.org/gifs/dae_up3.gif}
-
Redirect to the built-in pattern for better caching:
- +set-image-blocker{http://config.privoxy.org/send-banner?type=pattern}
-
@@ -5998,35 +6537,34 @@ TAG:^image/
Now let's define some aliases...
-
- # Useful custom aliases we can use later.
- #
- # Note the (required!) section header line and that this section
- # must be at the top of the actions file!
- #
- {{alias}}
+# Useful custom aliases we can use later.
+#
+# Note the (required!) section header line and that this section
+# must be at the top of the actions file!
+#
+{{alias}}
- # These aliases just save typing later:
- # (Note that some already use other aliases!)
- #
- +crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
- -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
- +block-as-image = +block{Blocked image.} +handle-as-image
- allow-all-cookies = -crunch-all-cookies -session-cookies-only -filter{content-cookies}
+# These aliases just save typing later:
+# (Note that some already use other aliases!)
+#
++crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
+-crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
++block-as-image = +block{Blocked image.} +handle-as-image
+allow-all-cookies = -crunch-all-cookies -session-cookies-only -filter{content-cookies}
- # These aliases define combinations of actions
- # that are useful for certain types of sites:
- #
- fragile = -block -filter -crunch-all-cookies -fast-redirects -hide-referrer -prevent-compression
+# These aliases define combinations of actions
+# that are useful for certain types of sites:
+#
+fragile = -block -filter -crunch-all-cookies -fast-redirects -hide-referrer -prevent-compression
- shop = -crunch-all-cookies -filter{all-popups}
+shop = -crunch-all-cookies -filter{all-popups}
- # Short names for other aliases, for really lazy people ;-)
- #
- c0 = +crunch-all-cookies
- c1 = -crunch-all-cookies
-
+# Short names for other aliases, for really lazy people ;-)
+#
+c0 = +crunch-all-cookies
+c1 = -crunch-all-cookies
+
...and put them to use. These sections would appear in the lower part of an
@@ -6034,31 +6572,30 @@ TAG:^image/
up for the / pattern):
-
- # These sites are either very complex or very keen on
- # user data and require minimal interference to work:
- #
- {fragile}
- .office.microsoft.com
- .windowsupdate.microsoft.com
- # Gmail is really mail.google.com, not gmail.com
- mail.google.com
-
- # Shopping sites:
- # Allow cookies (for setting and retrieving your customer data)
- #
- {shop}
- .quietpc.com
- .worldpay.com # for quietpc.com
- mybank.example.com
+# These sites are either very complex or very keen on
+# user data and require minimal interference to work:
+#
+{fragile}
+.office.microsoft.com
+.windowsupdate.microsoft.com
+# Gmail is really mail.google.com, not gmail.com
+mail.google.com
- # These shops require pop-ups:
- #
- {-filter{all-popups} -filter{unsolicited-popups}}
- .dabs.com
- .overclockers.co.uk
-
+# Shopping sites:
+# Allow cookies (for setting and retrieving your customer data)
+#
+{shop}
+.quietpc.com
+.worldpay.com # for quietpc.com
+mybank.example.com
+
+# These shops require pop-ups:
+#
+{-filter{all-popups} -filter{unsolicited-popups}}
+.dabs.com
+.overclockers.co.uk
+
Aliases like shop and fragile are typically used for
@@ -6109,7 +6646,6 @@ hal stop here
multiple lines with line continuation.
-
{ \
+change-x-forwarded-for{block} \
@@ -6117,8 +6653,7 @@ hal stop here
+set-image-blocker{pattern} \
}
/ # Match all URLs
-
-
+
The default behavior is now set.
@@ -6145,14 +6680,12 @@ hal stop here
that prevents older &my-app; versions from reading the file:
-
##########################################################################
# Settings -- Don't change! For internal Privoxy use ONLY.
##########################################################################
{{settings}}
for-privoxy-version=3.0.11
-
After that comes the (optional) alias section. We'll use the example
@@ -6160,7 +6693,6 @@ for-privoxy-version=3.0.11
that also explains why and how aliases are used:
-
##########################################################################
# Aliases
@@ -6172,7 +6704,7 @@ for-privoxy-version=3.0.11
#
+crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
-crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
- +block-as-image = +block{Blocked image.} +handle-as-image
+ +block-as-image = +block{Blocked image.} +handle-as-image
mercy-for-cookies = -crunch-all-cookies -session-cookies-only -filter{content-cookies}
# These aliases define combinations of actions
@@ -6180,7 +6712,6 @@ for-privoxy-version=3.0.11
#
fragile = -block -filter -crunch-all-cookies -fast-redirects -hide-referrer
shop = -crunch-all-cookies -filter{all-popups}
-
The first of our specialized sections is concerned with fragile
@@ -6191,7 +6722,6 @@ for-privoxy-version=3.0.11
of actions explicitly:
-
##########################################################################
# Exceptions for sites that'll break under the default action set:
@@ -6203,7 +6733,6 @@ for-privoxy-version=3.0.11
.office.microsoft.com # surprise, surprise!
.windowsupdate.microsoft.com
mail.google.com
-
Shopping sites are not as fragile, but they typically
@@ -6211,7 +6740,6 @@ mail.google.com
carts or item details. Again, we'll use a pre-defined alias:
-
# Shopping sites:
#
@@ -6220,7 +6748,6 @@ mail.google.com
.worldpay.com # for quietpc.com
.jungle.com
.scan.co.uk
-
The fast-redirects
@@ -6228,7 +6755,6 @@ mail.google.com
breaks some sites. So disable it for popular sites where we know it misbehaves:
-
{ -fast-redirects }
login.yahoo.com
@@ -6237,7 +6763,6 @@ edit.*.yahoo.com
.altavista.com/.*(like|url|link):http
.altavista.com/trans.*urltext=http
.nytimes.com
-
It is important that Privoxy knows which
@@ -6252,7 +6777,6 @@ edit.*.yahoo.com
good start:
-
##########################################################################
# Images:
@@ -6263,7 +6787,6 @@ edit.*.yahoo.com
#
{ +handle-as-image }
/.*\.(gif|jpe?g|png|bmp|ico)$
-
And then there are known banner sources. They often use scripts to
@@ -6280,7 +6803,6 @@ edit.*.yahoo.com
action before, it still applies and needn't be repeated:
-
# Known ad generators:
#
@@ -6292,7 +6814,6 @@ ar.atwola.com
.a[0-9].yimg.com/(?:(?!/i/).)*$
bs*.gsanet.com
.qkimg.net
-
One of the most important jobs of Privoxy
@@ -6312,7 +6833,6 @@ bs*.gsanet.com
to keep the example short:
-
##########################################################################
# Block these fine banners:
@@ -6331,7 +6851,6 @@ count*.
# Site-specific patterns (abbreviated):
#
.hitbox.com
-
It's quite remarkable how many advertisers actually call their banner
@@ -6361,7 +6880,6 @@ count*.
with no block action applying.
-
##########################################################################
# Save some innocent victims of the above generic block patterns:
@@ -6385,7 +6903,6 @@ ad[ud]*. # (adult.* and add.*)
#
www.globalintersec.com/adv # (adv = advanced)
www.ugu.com/sui/ugu/adv
-
Filtering source code can have nasty side effects,
@@ -6395,7 +6912,6 @@ www.ugu.com/sui/ugu/adv
disables all filters in one fell swoop!
-
# Don't filter code!
#
@@ -6405,7 +6921,6 @@ bugzilla.
developer.
wiki.
.sourceforge.net
-
The actual default.action is of course much more
@@ -6439,10 +6954,8 @@ wiki.
-
# My user.action file. <fred@example.com>
-
As aliases are local to the actions
@@ -6450,7 +6963,6 @@ wiki.
default.action, unless you repeat them here:
-
# Aliases are local to the file they are defined in.
# (Re-)define aliases for this file:
@@ -6481,8 +6993,6 @@ allow-ads = -block -filter{banners-by-size} -filter{banners-by-link}
# MIME types. We want the browser to force these to be text documents.
handle-as-text = -filter +-content-type-overwrite{text/plain} +-force-text-mode -hide-content-disposition
-
-
Say you have accounts on some sites that you visit regularly, and
you don't want to have to log in manually each time. So you'd like
@@ -6492,30 +7002,27 @@ handle-as-text = -filter +-filter }
- .your-home-banking-site.com
-
+.your-home-banking-site.com
+
Some file types you may not want to filter for various reasons:
-
# Technical documentation is likely to contain strings that might
# erroneously get altered by the JavaScript-oriented filters:
@@ -6527,7 +7034,6 @@ handle-as-text = -filter +-block action. Say you've
@@ -6540,12 +7046,11 @@ stupid-server.example.com/
in default.action anyway:
-
{ +block{Nasty ads.} }
- www.example.com/nasty-ads/sponsor\.gif
- another.example.net/more/junk/here/
-
+www.example.com/nasty-ads/sponsor\.gif
+another.example.net/more/junk/here/
+
The URLs of dynamically generated banners, especially from large banner
@@ -6559,14 +7064,13 @@ stupid-server.example.com/
browser. Use cautiously.
-
{ +block-as-image }
- .doubleclick.net
- .fastclick.net
- /Realmedia/ads/
- ar.atwola.com/
-
+.doubleclick.net
+.fastclick.net
+/Realmedia/ads/
+ar.atwola.com/
+
Now you noticed that the default configuration breaks Forbes Magazine,
@@ -6580,13 +7084,12 @@ stupid-server.example.com/
that misbehave, and add those to our personalized list of troublemakers:
-
{ fragile }
- .forbes.com
- webmail.example.com
- .mybank.com
-
+.forbes.com
+webmail.example.com
+.mybank.com
+
You like the fun text replacements in default.filter,
@@ -6595,11 +7098,10 @@ stupid-server.example.com/
update-safe config, once and for all:
-
{ +filter{fun} }
- / # For ALL sites!
-
+/ # For ALL sites!
+
Note that the above is not really a good idea: There are exceptions
@@ -6616,13 +7118,12 @@ stupid-server.example.com/
sites that you feel provide value to you:
-
{ allow-ads }
- .sourceforge.net
- .slashdot.org
- .osdn.net
-
+.sourceforge.net
+.slashdot.org
+.osdn.net
+
Note that allow-ads has been aliased to
@@ -6638,11 +7139,10 @@ stupid-server.example.com/
it should I choose to.
-
{ handle-as-text }
- /.*\.sh$
-
+/.*\.sh$
+
user.action is generally the best place to define
@@ -6654,11 +7154,9 @@ stupid-server.example.com/
paths and patterns:
-
{ +set-image-blocker{blank} }
/ # ALL sites
-
@@ -6681,18 +7179,21 @@ stupid-server.example.com/
- &my-app; supports three different pcrs-based filter actions:
+ &my-app; supports four different pcrs-based filter actions:
filter to
rewrite the content that is send to the client,
client-header-filter
- to rewrite headers that are send by the client, and
+ to rewrite headers that are send by the client,
server-header-filter
- to rewrite headers that are send by the server.
+ to rewrite headers that are send by the server, and
+ client-body-filter
+ to rewrite client request body.
- &my-app; also supports two tagger actions:
- client-header-tagger
+ &my-app; also supports three tagger actions:
+ client-header-tagger,
+ client-body-tagger
and
server-header-tagger.
Taggers and filters use the same syntax in the filter files, the difference
@@ -6746,7 +7247,8 @@ stupid-server.example.com/
filter file is organized in sections, which are called filters
here. Each filter consists of a heading line, that starts with one of the
keywordsFILTER:,
- CLIENT-HEADER-FILTER: or SERVER-HEADER-FILTER:
+ CLIENT-HEADER-FILTER:, SERVER-HEADER-FILTER: or
+ CLIENT-BODY-FILTER:
followed by the filter's name, and a short (one line)
description of what it does. Below that line
come the jobs, i.e. lines that define the actual
@@ -6770,9 +7272,7 @@ stupid-server.example.com/
like this:
-FILTER: foo Replace all "foo" with "bar"
-
Below that line, and up to the next header line, come the jobs that
@@ -6815,7 +7315,7 @@ stupid-server.example.com/
If you are new to
- Regular
+ Regular
Expressions, you might want to take a look at
the Appendix on regular expressions, and
see the Perl
@@ -6838,9 +7338,7 @@ stupid-server.example.com/
needed:
-s/foo/bar/
-
But wait! Didn't the comment say that all occurrences
@@ -6849,17 +7347,14 @@ stupid-server.example.com/
we'll need to add the g option:
-s/foo/bar/g
-
Our complete filter now looks like this:
-
+
FILTER: foo Replace all "foo" with "bar"
s/foo/bar/g
-
Let's look at some real filters for more interesting examples. Here you see
@@ -6868,14 +7363,12 @@ s/foo/bar/g
-
FILTER: js-annoyances Get rid of particularly annoying JavaScript abuse
# Get rid of JavaScript referrer tracking. Test page: http://www.randomoddness.com/untitled.htm
#
s|(<script.*)document\.referrer(.*</script>)|$1"Not Your Business!"$2|Usg
-
Following the header line and a comment, you see the job. Note that it uses
@@ -6957,12 +7450,10 @@ s|(<script.*)document\.referrer(.*</script>)|$1"Not Your Business!"$2|U
this time only point out the constructs of special interest:
-
# The status bar is for displaying link targets, not pointless blahblah
#
s/window\.status\s*=\s*(['"]).*?\1/dUmMy=1/ig
-\s stands for whitespace characters (space, tab, newline,
@@ -6985,12 +7476,10 @@ s/window\.status\s*=\s*(['"]).*?\1/dUmMy=1/ig
you move your mouse over links.
-
# Kill OnUnload popups. Yummy. Test: http://www.zdnet.com/zdsubs/yahoo/tree/yfs.html
#
s/(<body [^>]*)onunload(.*>)/$1never$2/iU
-
Including the
@@ -7011,14 +7500,12 @@ s/(<body [^>]*)onunload(.*>)/$1never$2/iU
The last example is from the fun department:
-
FILTER: fun Fun text replacements
# Spice the daily news:
#
s/microsoft(?!\.com)/MicroSuck/ig
-
Note the (?!\.com) part (a so-called negative lookahead)
@@ -7028,7 +7515,6 @@ s/microsoft(?!\.com)/MicroSuck/ig
still replacing the word everywhere else.
-
# Buzzword Bingo (example for extended regex syntax)
#
@@ -7044,7 +7530,6 @@ s* industry[ -]leading \
| unrivalled \
*<font color="red"><b>BINGO!</b></font> \
*igx
-
The x option in this job turns on extended syntax, and allows for
@@ -7079,6 +7564,7 @@ pre-defined filters for your convenience:
The purpose of this filter is to get rid of particularly annoying JavaScript abuse.
To that end, it
+
@@ -7102,7 +7588,6 @@ pre-defined filters for your convenience:
-
Use with caution. This is an aggressive filter, and can break sites that
rely heavily on JavaScript.
@@ -7242,9 +7727,9 @@ pre-defined filters for your convenience:
banners-by-link
- This is an experimental filter that attempts to kill any banners if
- their URLs seem to point to known or suspected click trackers. It is currently
- not of much value and is not recommended for use by default.
+ This filter attempts to kill any banners if their URLs seem to point
+ to known or suspected click trackers. It is currently not of much value
+ and is not recommended for use by default.
@@ -7326,7 +7811,7 @@ pre-defined filters for your convenience:
sometimes appear on some pages, or user agents that don't correct for this on
the fly.
@@ -7561,7 +8046,7 @@ pre-defined filters for your convenience:
&my-app; will temporary store the content to filter in the
temporary-directory.
-
+
EXTERNAL-FILTER: cat Pointless example filter that doesn't actually modify the content
/bin/cat
@@ -7587,7 +8072,6 @@ EXTERNAL-FILTER: rotate-image Rotate an image by 180 degree. Test filter with li
EXTERNAL-FILTER: citation-needed Adds a "[citation needed]" tag to an image. The coordinates may need adjustment.
/usr/local/bin/convert - -pointsize 16 -fill white -annotate +17+418 "[citation needed]" -
-
@@ -7660,14 +8144,12 @@ EXTERNAL-FILTER: citation-needed Adds a "[citation needed]" tag to an image. The
is in an alpha or beta development stage:
-
<!-- @if-unstable-start -->
... beta warning HTML code goes here ...
<!-- if-unstable-end@ -->
-
If the "unstable" symbol is set, everything in between and including
@@ -7675,9 +8157,7 @@ EXTERNAL-FILTER: citation-needed Adds a "[citation needed]" tag to an image. The
will disappear, leaving nothing but an empty comment:
-<!-- -->
-
There's also an if-then-else construct and an #include
@@ -7722,17 +8202,63 @@ Requests
Privoxy is free software; you can
- redistribute it and/or modify it under the terms of the
- GNU General Public License, version 2,
- as published by the Free Software Foundation and included in
- the next section.
+ redistribute and/or modify its source code under the terms
+ of the GNU General Public License
+ as published by the Free Software Foundation, either version 2
+ of the license, or (at your option) any later version.
+
+
+
+ The same is true for Privoxy binaries
+ unless they are linked with a
+ mbed TLS version
+ that is licensed under the Apache 2.0 license in which
+ case you can redistribute and/or modify the Privoxy
+ binaries under the terms of the GNU General Public License
+ as published by the Free Software Foundation, either version 3
+ of the license, or (at your option) any later version.
+
+
+
+ Both licenses are included in the next section.
License
+
+GNU General Public License version 2
+
+
+
+GNU General Public License version 3
+
+
+
+Third-party licenses and copyrights
+
+ Privoxy depends on a couple of third-party libraries which have seperate licenses.
+ Please refer to the third-party websites for up-to-date license and copyright
+ information.
+
+
+ Privoxy depends on pcre.
+
+
+ When compiled with FEATURE_BROTLI (optional), Privoxy depends on
+ brotli.
+
-
+ When compiled with FEATURE_HTTPS_INSPECTION (optional),
+ Privoxy depends on a TLS library. The supported libraries are
+ LibreSSL,
+ mbed TLS 2.28.x and
+ OpenSSL.
+
+ When compiled with FEATURE_ZLIB (optional),
+ Privoxy depends on zlib.
+
+
@@ -7821,35 +8347,35 @@ Requests
and then some examples:
-
+. - Matches any single character, e.g. a,
A, 4, :, or @.
-
+
-
+? - The preceding character or expression is matched ZERO or ONE
times. Either/or.
-
+
-
++ - The preceding character or expression is matched ONE or MORE
times.
-
+
-
+* - The preceding character or expression is matched ZERO or MORE
times.
-
+
-
+\ - The escape character denotes that
the following character should be taken literally. This is used where one of the
@@ -7858,25 +8384,25 @@ Requests
sure the period is recognized only as a period (and not expanded to its
meta-character meaning of any single character).
-
+
-
+[ ] - Characters enclosed in brackets will be matched if
any of the enclosed characters are encountered. For instance, [0-9]
matches any numeric digit (zero through nine). As an example, we can combine
this with + to match any digit one of more times: [0-9]+.
-
+
-
+( ) - parentheses are used to group a sub-expression,
or multiple sub-expressions.
-
+
-
+| - The bar character works like an
or conditional statement. A match is successful if the
@@ -7885,7 +8411,7 @@ Requests
and would match either this example or that
example, and nothing else.
-
+
These are just some of the ones you are likely to use when matching URLs with
@@ -8013,7 +8539,6 @@ Requests
rules and other configuration options, and even turn
Privoxy's filtering off, all with
a web browser.
-
@@ -8024,7 +8549,6 @@ Requests
necessary either.
-
@@ -8045,23 +8569,23 @@ Requests
- Show information about the current configuration, including viewing and
- editing of actions files:
+ View and toggle client tags:
@@ -8116,7 +8640,6 @@ Requests
-
@@ -8130,7 +8653,6 @@ Requests
page is requested by your browser:
-
@@ -8239,7 +8761,7 @@ Requests
-
+
NOTE: This is somewhat of a simplistic overview of what happens with each URL
request. For the sake of brevity and simplicity, we have focused on
@@ -8312,13 +8834,12 @@ Requests
configuration may vary):
-
- Matches for http://www.google.com:
+Matches for http://www.google.com:
- In file: default.action [ View ][ Edit ]
+In file: default.action [ View ][ Edit ]
- {+change-x-forwarded-for{block}
+{+change-x-forwarded-for{block}
+deanimate-gifs {last}
+fast-redirects {check-decoded-url}
+filter {refresh-tags}
@@ -8330,19 +8851,18 @@ Requests
+hide-from-header {block}
+hide-referrer {forge}
+session-cookies-only
- +set-image-blocker {pattern}
+ +set-image-blocker {pattern} }
/
- { -session-cookies-only }
- .google.com
+{ -session-cookies-only }
+.google.com
- { -fast-redirects }
- .google.com
+{ -fast-redirects }
+.google.com
In file: user.action [ View ][ Edit ]
(no matches in this file)
-
This is telling us how we have defined our
@@ -8398,15 +8918,127 @@ In file: user.action [ View ][ Edit ]Privoxy is applying all its actions
to google.com:
+
+
+
+Final results:
+
+-add-header
+-block
++change-x-forwarded-for{block}
+-client-header-filter{hide-tor-exit-notation}
+-content-type-overwrite
+-crunch-client-header
+-crunch-if-none-match
+-crunch-incoming-cookies
+-crunch-outgoing-cookies
+-crunch-server-header
++deanimate-gifs {last}
+-downgrade-http-version
+-fast-redirects
+-filter {js-events}
+-filter {content-cookies}
+-filter {all-popups}
+-filter {banners-by-link}
+-filter {tiny-textforms}
+-filter {frameset-borders}
+-filter {demoronizer}
+-filter {shockwave-flash}
+-filter {quicktime-kioskmode}
+-filter {fun}
+-filter {crude-parental}
+-filter {site-specifics}
+-filter {js-annoyances}
+-filter {html-annoyances}
++filter {refresh-tags}
+-filter {unsolicited-popups}
++filter {img-reorder}
++filter {banners-by-size}
++filter {webbugs}
++filter {jumping-windows}
++filter {ie-exploits}
+-filter {google}
+-filter {yahoo}
+-filter {msn}
+-filter {blogspot}
+-filter {no-ping}
+-force-text-mode
+-handle-as-empty-document
+-handle-as-image
+-hide-accept-language
+-hide-content-disposition
++hide-from-header {block}
+-hide-if-modified-since
++hide-referrer {forge}
+-hide-user-agent
+-limit-connect
+-overwrite-last-modified
+-prevent-compression
+-redirect
+-server-header-filter{xml-to-html}
+-server-header-filter{html-to-xml}
+-session-cookies-only
++set-image-blocker {pattern}
+
+
+
+ Notice the only difference here to the previous listing, is to
+ fast-redirects and session-cookies-only,
+ which are activated specifically for this site in our configuration,
+ and thus show in the Final Results.
+
+
+
+ Now another example, ad.doubleclick.net:
+
+
+
+{ +block{Domains starts with "ad"} }
+ad*.
+
+{ +block{Domain contains "ad"} }
+.ad.
+{ +block{Doubleclick banner server} +handle-as-image }
+.[a-vx-z]*.doubleclick.net
+
+
+
+ We'll just show the interesting part here - the explicit matches. It is
+ matched three different times. Two +block{} sections,
+ and a +block{} +handle-as-image,
+ which is the expanded form of one of our aliases that had been defined as:
+ +block-as-image. (Aliases are defined in
+ the first section of the actions file and typically used to combine more
+ than one action.)
+
+
+
+ Any one of these would have done the trick and blocked this as an unwanted
+ image. This is unnecessarily redundant since the last case effectively
+ would also cover the first. No point in taking chances with these guys
+ though ;-) Note that if you want an ad or obnoxious
+ URL to be invisible, it should be defined as ad.doubleclick.net
+ is done here -- as both a +block{}
+ and an
+ +handle-as-image.
+ The custom alias +block-as-image just
+ simplifies the process and make it more readable.
+ One last example. Let's try http://www.example.net/adsl/HOWTO/.
+ This one is giving us problems. We are getting a blank page. Hmmm ...
+
+
+Matches for http://www.example.net/adsl/HOWTO/:
- Final results:
+In file: default.action [ View ][ Edit ]
- -add-header
+{-add-header
-block
+change-x-forwarded-for{block}
-client-header-filter{hide-tor-exit-notation}
@@ -8416,9 +9048,9 @@ In file: user.action [ View ][ Edit ][ View ][ Edit ]
-
-
-
- Notice the only difference here to the previous listing, is to
- fast-redirects and session-cookies-only,
- which are activated specifically for this site in our configuration,
- and thus show in the Final Results.
-
-
-
- Now another example, ad.doubleclick.net:
-
-
-
-
-
- { +block{Domains starts with "ad"} }
- ad*.
-
- { +block{Domain contains "ad"} }
- .ad.
-
- { +block{Doubleclick banner server} +handle-as-image }
- .[a-vx-z]*.doubleclick.net
-
-
-
-
- We'll just show the interesting part here - the explicit matches. It is
- matched three different times. Two +block{} sections,
- and a +block{} +handle-as-image,
- which is the expanded form of one of our aliases that had been defined as:
- +block-as-image. (Aliases are defined in
- the first section of the actions file and typically used to combine more
- than one action.)
-
-
-
- Any one of these would have done the trick and blocked this as an unwanted
- image. This is unnecessarily redundant since the last case effectively
- would also cover the first. No point in taking chances with these guys
- though ;-) Note that if you want an ad or obnoxious
- URL to be invisible, it should be defined as ad.doubleclick.net
- is done here -- as both a +block{}
- and an
- +handle-as-image.
- The custom alias +block-as-image just
- simplifies the process and make it more readable.
-
-
-
- One last example. Let's try http://www.example.net/adsl/HOWTO/.
- This one is giving us problems. We are getting a blank page. Hmmm ...
-
-
-
-
+ +session-cookies-only
+ +set-image-blocker{blank} }
+/
- Matches for http://www.example.net/adsl/HOWTO/:
-
- In file: default.action [ View ][ Edit ]
-
- {-add-header
- -block
- +change-x-forwarded-for{block}
- -client-header-filter{hide-tor-exit-notation}
- -content-type-overwrite
- -crunch-client-header
- -crunch-if-none-match
- -crunch-incoming-cookies
- -crunch-outgoing-cookies
- -crunch-server-header
- +deanimate-gifs
- -downgrade-http-version
- +fast-redirects {check-decoded-url}
- -filter {js-events}
- -filter {content-cookies}
- -filter {all-popups}
- -filter {banners-by-link}
- -filter {tiny-textforms}
- -filter {frameset-borders}
- -filter {demoronizer}
- -filter {shockwave-flash}
- -filter {quicktime-kioskmode}
- -filter {fun}
- -filter {crude-parental}
- -filter {site-specifics}
- -filter {js-annoyances}
- -filter {html-annoyances}
- +filter {refresh-tags}
- -filter {unsolicited-popups}
- +filter {img-reorder}
- +filter {banners-by-size}
- +filter {webbugs}
- +filter {jumping-windows}
- +filter {ie-exploits}
- -filter {google}
- -filter {yahoo}
- -filter {msn}
- -filter {blogspot}
- -filter {no-ping}
- -force-text-mode
- -handle-as-empty-document
- -handle-as-image
- -hide-accept-language
- -hide-content-disposition
- +hide-from-header{block}
- +hide-referer{forge}
- -hide-user-agent
- -overwrite-last-modified
- +prevent-compression
- -redirect
- -server-header-filter{xml-to-html}
- -server-header-filter{html-to-xml}
- +session-cookies-only
- +set-image-blocker{blank} }
- /
-
- { +block{Path contains "ads".} +handle-as-image }
- /ads
+{ +block{Path contains "ads".} +handle-as-image }
+/ads
-
Ooops, the /adsl/ is matching /ads in our
@@ -8601,13 +9112,10 @@ In file: user.action [ View ][ Edit ]
-
-
- { -block }
- /adsl
+{ -block }
+/adsl
-
Now the page displays ;-)
@@ -8621,13 +9129,10 @@ In file: user.action [ View ][ Edit ]
-
-
- { +block{Path starts with "ads".} +handle-as-image }
- /ads
+{ +block{Path starts with "ads".} +handle-as-image }
+/ads
-
That actually was very helpful and pointed us quickly to where the problem
@@ -8641,35 +9146,28 @@ In file: user.action [ View ][ Edit ]+filter:
-
-
- { shop }
- .quietpc.com
- .worldpay.com # for quietpc.com
- .jungle.com
- .scan.co.uk
- .forbes.com
+{ shop }
+.quietpc.com
+.worldpay.com # for quietpc.com
+.jungle.com
+.scan.co.uk
+.forbes.com
-{ shop } is an alias that expands to
{ -filter -session-cookies-only }.
Or you could do your own exception to negate filtering:
-
-
-
- { -filter }
- # Disable ALL filter actions for sites in this section
- .forbes.com
- developer.ibm.com
- localhost
+{ -filter }
+# Disable ALL filter actions for sites in this section
+.forbes.com
+developer.ibm.com
+localhost
-
This would turn off all filtering for these sites. This is best
@@ -8692,14 +9190,13 @@ In file: user.action [ View ][ Edit ]
-
-
- { fragile }
- # Handle with care: easy to break
- mail.google.
- mybank.example.com
-
+
+{ fragile }
+# Handle with care: easy to break
+mail.google.
+mybank.example.com
+