"Fossies" - the Fresh Open Source Software Archive

Member "privoxy_3.0.33/default.filter" (8 Dec 2021, 44939 Bytes) of package /windows/www/privoxy_3.0.33.zip:


As a special service "Fossies" has tried to format the requested text file into HTML format (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

A hint: This file contains one or more very long lines, so maybe it is better readable using the pure text view mode that shows the contents as wrapped lines within the browser window.


    1 #################################################################################
    2 #
    3 #  File        :  default.filter
    4 #
    5 #  Purpose     :  Rules to process the content of web pages
    6 #
    7 #  Copyright   :  Written by and Copyright (C) 2001-2021 the
    8 #                 Privoxy team. https://www.privoxy.org/
    9 #
   10 #                 This program is free software; you can redistribute it
   11 #                 and/or modify it under the terms of the GNU General
   12 #                 Public License as published by the Free Software
   13 #                 Foundation; either version 2 of the License, or (at
   14 #                 your option) any later version.
   15 #
   16 #                 This program is distributed in the hope that it will
   17 #                 be useful, but WITHOUT ANY WARRANTY; without even the
   18 #                 implied warranty of MERCHANTABILITY or FITNESS FOR A
   19 #                 PARTICULAR PURPOSE.  See the GNU General Public
   20 #                 License for more details.
   21 #
   22 #                 The GNU General Public License should be included with
   23 #                 this file.  If not, you can view it at
   24 #                 http://www.gnu.org/copyleft/gpl.html
   25 #                 or write to the Free Software Foundation, Inc., 59
   26 #                 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
   27 #
   28 #################################################################################
   29 #
   30 # Syntax:
   31 #
   32 # Generally filters start with a line like "FILTER: name description".
   33 # They are then referrable from the actionsfile with +filter{name}
   34 #
   35 # FILTER marks a filter as content filter, other filter
   36 # types are CLIENT-HEADER-FILTER, CLIENT-HEADER-TAGGER,
   37 # SERVER-HEADER-FILTER and SERVER-HEADER-TAGGER.
   38 #
   39 # Inside the filters, write one Perl-Style substitution (job) per line.
   40 # Jobs that precede the first FILTER: line are ignored.
   41 #
   42 # For Details see the pcrs manpage contained in this distribution.
   43 # (and the perlre, perlop and pcre manpages)
   44 #
   45 # Note that you are free to choose the delimiter as you see fit.
   46 #
   47 # Note2: In addition to the Perl options gimsx, the following nonstandard
   48 # options are supported:
   49 #
   50 # 'U' turns the default to ungreedy matching.  Add ? to quantifiers to
   51 #     switch back to greedy.
   52 #
   53 # 'T' (trivial) prevents parsing for backreferences in the substitute.
   54 #     Use if you want to include text like '$&' in your substitute without
   55 #     quoting.
   56 #
   57 # 'D' (Dynamic) allows the use of variables. Supported variables are:
   58 #     $host, $listen-address, $origin (the IP address the request came
   59 #     from), $path and $url.
   60 #
   61 #     Note that '$' is a bad choice as delimiter for dynamic filters as you
   62 #     might end up with unintended variables if you use a variable name
   63 #     directly after the delimiter. Variables will be resolved without
   64 #     escaping anything, therefore you also have to be careful not to chose
   65 #     delimiters that appear in the replacement text. For example '<' should
   66 #     be save, while '?' will sooner or later cause conflicts with $url.
   67 #
   68 #################################################################################
   69 
   70 
   71 #################################################################################
   72 #
   73 # js-annoyances: Get rid of particularly annoying JavaScript abuse.
   74 #
   75 #################################################################################
   76 FILTER: js-annoyances Get rid of particularly annoying JavaScript abuse.
   77 
   78 # Note: Most of these jobs would be safer if restricted to a
   79 # <script> context as in:
   80 #
   81 # s/(<script.*)nasty-item(?=.*<\/script>)/$1replacement/sigU
   82 #
   83 # but that would make them match only the first occurrence of
   84 # nasty-item in each <script>. We need nestable jobs!
   85 
   86 # Get rid of Javascript referrer tracking.
   87 # Test page: http://www.javascript-page.com/referrer.html
   88 #
   89 s|(?:\w+\.)+referrer|false.toString()|gisU
   90 
   91 # The status bar is for displaying link targets, not pointless blahblah
   92 #
   93 s@([\W]\s*)((?:this|window)\.(?:default)?status)\s*=\s*((['"]).*?\4)@$1$2 =\
   94  (typeof(this.href) != 'undefined')?($3 + ' URL: ' + this.href):($2)@ig
   95 
   96 s/(?:(?:this|window)\.(?:default)?status)\s*=\s*\w*\s*;//ig
   97 
   98 # Kill OnUnload popups. Yummy.
   99 # Test: http://www.zdnet.com/zdsubs/yahoo/tree/yfs.html
  100 #
  101 s/(<body\s+[^>]*)onunload/$1never/siU
  102 s|(<script.*)window\.onunload(?=.*</script>)|$1never|sigU
  103 
  104 # If we allow window.open, we want normal window features:
  105 # Test: http://www.htmlgoodies.com/beyond/notitle.html
  106 #
  107 s/(open\s*\([^\)]+resizable=)(["']?)(?:no|0)\2/$1$2yes$2/sigU
  108 s/(open\s*\([^\)]+location=)(["']?)(?:no|0)\2/$1$2yes$2/sigU
  109 s/(open\s*\([^\)]+status=)(["']?)(?:no|0)\2/$1$2yes$2/sigU
  110 s/(open\s*\([^\)]+scroll(?:ing|bars)=)(["']?)(?:no|0)\2/$1$2auto$2/sigU
  111 s/(open\s*\([^\)]+menubar=)(["']?)(?:no|0)\2/$1$2yes$2/sigU
  112 s/(open\s*\([^\)]+toolbar=)(["']?)(?:no|0)\2/$1$2yes$2/sigU
  113 s/(open\s*\([^\)]+directories=)(["']?)(?:no|0)\2/$1$2yes$2/sigU
  114 s/(open\s*\([^\)]+fullscreen=)(["']?)(?:yes|1)\2/$1$2no$2/sigU
  115 s/(open\s*\([^\)]+always(?:raised|lowered)=)(["']?)(?:yes|1)\2/$1$2no$2/sigU
  116 s/(open\s*\([^\)]+z-?lock=)(["']?)(?:yes|1)\2/$1$2no$2/sigU
  117 s/(open\s*\([^\)]+hotkeys=)(["']?)(?:yes|1)\2/$1$2no$2/sigU
  118 s/(open\s*\([^\)]+titlebar=)(["']?)(?:no|0)\2/$1$2yes$2/sigU
  119 
  120 
  121 #################################################################################
  122 #
  123 # js-events: Kill JavaScript event bindings and timers (Radically destructive! Only for extra nasty sites).
  124 #
  125 #################################################################################
  126 FILTER: js-events Kill JavaScript event bindings and timers (Radically destructive! Only for extra nasty sites).
  127 
  128 s/(on|event\.)((mouse(over|out|down|up|move))|(un)?load|contextmenu|selectstart)/never/ig
  129 # Not events, but abused on the same type of sites:
  130 s/(alert|confirm)\s*\(/concat(/ig
  131 s/set(timeout|interval)\(/concat(/ig
  132 
  133 #################################################################################
  134 #
  135 # html-annoyances: Get rid of particularly annoying HTML abuse.
  136 #
  137 #################################################################################
  138 FILTER: html-annoyances Get rid of particularly annoying HTML abuse.
  139 
  140 # New browser windows (if allowed -- see no-popups filter below) should be
  141 # resizeable and have a location and status bar
  142 #
  143 s/(<a\s+href[^>]+resizable=)(['"]?)(?:no|0)\2/$1$2yes$2/igU
  144 s/(<a\s+href[^>]+location=)(['"]?)(?:no|0)\2/$1$2yes$2/igU
  145 s/(<a\s+href[^>]+status=)(['"]?)(?:no|0)\2/$1$2yes$2/igU
  146 s/(<a\s+href[^>]+scrolling=)(['"]?)(?:no|0)\2/$1$2auto$2/igU
  147 s/(<a\s+href[^>]+menubar=)(['"]?)(?:no|0)\2/$1$2yes$2/igU
  148 
  149 # The <BLINK> and <MARQUEE> tags were crimes!
  150 #
  151 s-</?(blink|marquee).*>--sigU
  152 
  153 
  154 #################################################################################
  155 #
  156 # content-cookies: Kill cookies that come in the HTML or JS content.
  157 #
  158 #################################################################################
  159 FILTER: content-cookies Kill cookies that come in the HTML or JS content.
  160 
  161 # JS cookies, except those used by antiadbuster.com to detect us:
  162 #
  163 s|(\w+\.)+cookie(?=[ \t\r\n]*=)(?!='aab)|ZappedCookie|ig
  164 
  165 # HTML cookies:
  166 #
  167 s|<meta\s+http-equiv=['"]?set-cookie.*>|<!-- ZappedCookie -->|igU
  168 
  169 
  170 #################################################################################
  171 #
  172 # refresh-tags: Kill automatic refresh tags if refresh time is larger than 9 seconds.
  173 #
  174 #################################################################################
  175 FILTER: refresh-tags Kill automatic refresh tags if refresh time is larger than 9 seconds.
  176 
  177 # Note: Only deactivates refreshes with more than 9 seconds delay to
  178 #       preserve monster-stupid but common redirections via meta tags.
  179 #
  180 s@<meta\s+http-equiv\s*=\s*(['"]?)refresh\1\s+content\s*=\s*(['"]?)\d{2,}\s*(;(?:\s*url\s*=\s*)?([^>\2]*))?\2@<link rev="x-refresh" href="$4"@ig
  181 
  182 
  183 #################################################################################
  184 #
  185 # unsolicited-popups: Disable unsolicited pop-up windows.
  186 #
  187 #################################################################################
  188 FILTER: unsolicited-popups Disable only unsolicited pop-up windows.
  189 
  190 s+([^'"]\s*<head.*>)(?=\s*[^'"])+$1<script>function PrivoxyWindowOpen(){return(null);}</script>+isU
  191 s@([^\w\s.]\s*)((?:map)?(window|this|parent)\.?)?open\s*\(@$1PrivoxyWindowOpen(@ig
  192 s+([^'"]\s*</html>)(?!\s*(\\n|'|"))+$1<script>function PrivoxyWindowOpen(a, b, c){return(window.open(a, b, c));}</script>+iU
  193 
  194 
  195 ##################################################################################
  196 #
  197 # all-popups: Kill all popups in JavaScript and HTML.
  198 #
  199 #################################################################################
  200 FILTER: all-popups Kill all popups in JavaScript and HTML.
  201 
  202 s@((\W\s*)(?:map)?(window|this|parent)\.?)open\s*\\?\(@$1concat(@ig  # JavaScript
  203 #s/\starget\s*=\s*(['"]?)_?(blank|new)\1?/ notarget/ig        # HTML
  204 s/\starget\s*=\s*(['"]?)_?(blank|new)\1?/ /ig        # (X)HTML
  205 
  206 ##################################################################################
  207 #
  208 # img-reorder: Reorder attributes in <img> tags to make the banners-by-* filters more effective.
  209 #
  210 #################################################################################
  211 FILTER: img-reorder Reorder attributes in <img> tags to make the banners-by-* filters more effective.
  212 
  213 # In the first step src is moved to the start, then width is moved to the second
  214 # place to guarantee an order of src, width, height. Also does some white-space
  215 # normalization.
  216 #
  217 # This makes banners-by-size more effective and allows both banners-by-size
  218 # and banners-by-link to preserve the original image URL in the title attribute.
  219 
  220 s|<img\s+?([^>]*)\ssrc\s*=\s*(['"])([^>'" ]+)\2|<img src=$2$3$2 $1|siUg
  221 s|<img\s+?([^>]*)\ssrc\s*=\s*([^'">\\\s]+)|<img src=$2 $1|sig
  222 s|(<img[^>]+height)\s*=\s*|$1=|siUg
  223 
  224 s|<img (src=(?:(['"])[^>'" ]*\2\|[^'">\\\s]+?))([^>]*)\s+width\s*=\s*((["']?)\d+?\5)(?=[\s>])|<img $1 width=$4$3|siUg
  225 
  226 
  227 #################################################################################
  228 #
  229 # banners-by-size: Kill banners by size.
  230 #
  231 #################################################################################
  232 #
  233 # Standard banner sizes taken from http://www.iab.net/iab_banner_standards/bannersizes.html
  234 #
  235 # Note: Use http://config.privoxy.org/send-banner?type=trans for a transparent 1x1 image
  236 #       Use http://config.privoxy.org/send-banner?type=pattern for a grey/white pattern image
  237 #       Use http://config.privoxy.org/send-banner?type=auto  to auto-select.
  238 #
  239 # Note2: Use img-reorder before this filter to ensure maximum matching success
  240 #
  241 #################################################################################
  242 FILTER: banners-by-size Kill banners by size.
  243 
  244 # 88*31
  245 s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)88\4)[^>]*?(height=(['"]?)31\6)[^>]*?(?=/?>)@\
  246   <img src="http://config.privoxy.org/send-banner?type=auto" border="0" title="Killed-$2-by-size" $3 $5@sig
  247 # 120*60, 120*90, 120*240, 120*600
  248 s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)120\4)[^>]*?(height=(['"]?)(?:600?|90|240)\6)[^>]*?(?=/?>)@\
  249   <img src="http://config.privoxy.org/send-banner?type=auto" border="0" title="Killed-$2-by-size" $3 $5@sig
  250 # 125*125
  251 s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)125\4)[^>]*?(height=(['"]?)125\6)[^>]*?(?=/?>)@\
  252   <img src="http://config.privoxy.org/send-banner?type=auto" border="0" title="Killed-$2-by-size" $3 $5@sig
  253 # 160*600
  254 s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)160\4)[^>]*?(height=(['"]?)600\6)[^>]*?(?=/?>)@\
  255   <img src="http://config.privoxy.org/send-banner?type=auto" border="0" title="Killed-$2-by-size" $3 $5@sig
  256 # 180*150
  257 s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)180\4)[^>]*?(height=(['"]?)150\6)[^>]*?(?=/?>)@\
  258   <img src="http://config.privoxy.org/send-banner?type=auto" border="0" title="Killed-$2-by-size" $3 $5@sig
  259 # 234*60, 468*60 (Most Banners!)
  260 s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)(?:234|468)\4)[^>]*?(height=(['"]?)60\6)[^>]*?(?=/?>)@\
  261   <img src="http://config.privoxy.org/send-banner?type=auto" border="0" title="Killed-$2-by-size" $3 $5@sig
  262 # 240*400
  263 s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)240\4)[^>]*?(height=(['"]?)400\6)[^>]*?(?=/?>)@\
  264   <img src="http://config.privoxy.org/send-banner?type=auto" border="0" title="Killed-$2-by-size" $3 $5@sig
  265 # 250*250, 300*250
  266 s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)(?:250|300)\4)[^>]*?(height=(['"]?)250\6)[^>]*?(?=/?>)@\
  267   <img src="http://config.privoxy.org/send-banner?type=auto" border="0" title="Killed-$2-by-size" $3 $5@sig
  268 # 336*280
  269 s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)336\4)[^>]*?(height=(['"]?)280\6)[^>]*?(?=/?>)@\
  270   <img src="http://config.privoxy.org/send-banner?type=auto" border="0" title="Killed-$2-by-size" $3 $5@sig
  271 
  272 # Note: 200*50 was also proposed, but it probably causes too much collateral damage:
  273 #
  274 #s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)200\4)[^>]*?(height=(['"]?)50\6)[^>]*?(?=/?>)@\
  275 #   <img src="http://config.privoxy.org/send-banner?type=auto" border="0" title="Killed-$2-by-size" $3 $5@sig
  276 
  277 
  278 #################################################################################
  279 #
  280 # banners-by-link: Kill banners by their links to known clicktrackers (Experimental).
  281 #
  282 #################################################################################
  283 FILTER: banners-by-link Kill banners by their links to known clicktrackers.
  284 
  285 # Common case with width and height attributes:
  286 #
  287 s@<a\s+href\s*=\s*(['"]?)([^>\1\s]*?(?:\
  288   adclick                             # See www.dn.se \
  289 | advert                              # see dict.leo.org \
  290 | atwola\.com/(?:link|redir)          # see www.cnn.com \
  291 | doubleclick\.net/jump/              # redirs for doublecklick.net ads \
  292 | counter                             # common \
  293 | (?<!&type=)tracker                  # (&type=tracker is used in sf's project statistics) \
  294 | adlog\.pl                           # see sf.net \
  295 )[^>\1\s]*)\1[^>]*>\s*<img\s+(?:src\s*=\s*(['"]?)([^>\\\3\s]+)\3)?[^>]*((?:width|height)\s*=\s*(['"]?)\d+?\6)[^>]*((?:width|height)\s*=\s*(['"]?)\d+?\8)[^>]*?(?=/?>)\
  296 @<img $5 $7 src="http://config.privoxy.org/send-banner?type=auto" border="0" title="Killed $4 by link to $2"@sigx
  297 
  298 # Rare case w/o explicit dimensions:
  299 #
  300 s@<a\s+href\s*=\s*(['"]?)([^>\1\s]*?(?:ad(?:click|vert)|atwola\.com/(?:link|redir)|doubleclick\.net/jump/|(?<!&type=)tracker|counter|adlog\.pl)[^>\1\s]*)\1[^>]*>\s*<img\s+(?:src\s*=\s*(['"]?)([^>\\\3\s]+)\3)?[^>]*?(?=/?>)@<img src="http://config.privoxy.org/send-banner?type=auto" border="0" title="Killed $4 by link to $2"@sig
  301 
  302 
  303 ################################################################################
  304 #
  305 # webbugs: Squish WebBugs (1x1 invisible GIFs used for user tracking).
  306 #
  307 #################################################################################
  308 FILTER: webbugs Squish WebBugs (1x1 invisible GIFs used for user tracking).
  309 
  310 s@<img[^>]*\s(?:width|height)\s*=\s*['"]?[01](?=\D)[^>]*\s(?:width|height)\s*=\s*['"]?[01](?=\D)[^>]*?>@@siUg
  311 
  312 
  313 #################################################################################
  314 #
  315 # tiny-textforms: Extend those tiny textareas up to 40x80 and kill the hard wrap.
  316 #
  317 #################################################################################
  318 FILTER: tiny-textforms Extend those tiny textareas up to 40x80 and kill the hard wrap.
  319 
  320 s/(<textarea[^>]*?)(?:\s*(?:rows|cols)=(['"]?)\d+\2)+/$1 rows=$2\40$2 cols=$2\80$2/ig
  321 s/(<textarea[^>]*?)wrap=(['"]?)hard\2/$1/ig
  322 
  323 
  324 #################################################################################
  325 #
  326 # jumping-windows: Prevent windows from resizing and moving themselves.
  327 #
  328 #################################################################################
  329 FILTER: jumping-windows Prevent windows from resizing and moving themselves.
  330 
  331 s/(?<=[\W])(?:window|this|self)\.(?:move|resize)(?:to|by)\(/''.concat(/ig
  332 
  333 #################################################################################
  334 #
  335 # frameset-borders: Give frames a border, make them resizable and scrollable.
  336 #
  337 #################################################################################
  338 FILTER: frameset-borders Give frames a border and make them resizable.
  339 
  340 s/(<frameset\s+[^>]*)framespacing=(['"]?)(no|0)\2/$1/igU
  341 s/(<frameset\s+[^>]*)frameborder=(['"]?)(no|0)\2/$1/igU
  342 s/(<frameset\s+[^>]*)border=(['"]?)(no|0)\2/$1/igU
  343 s/(<frame\s+[^>]*)noresize/$1/igU
  344 s/(<frame\s+[^>]*)frameborder=(['"]?)(no|0)\2/$1/igU
  345 s/(<frame\s+[^>]*)scrolling=(['"]?)(no|0)\2/$1/igU
  346 
  347 
  348 #################################################################################
  349 #
  350 # iframes: Remove all detected iframes. Should only be enabled for
  351 #          individual sites after testing that the iframes are optional.
  352 #
  353 #################################################################################
  354 FILTER: iframes Removes all detected iframes. Should only be enabled for individual sites.
  355 s@<iframe.*</iframe>@<!-- iframe removed by Privoxy's iframe filter -->@Uisg
  356 
  357 
  358 #################################################################################
  359 #
  360 # demoronizer: Correct Microsoft's abuse of standardized character sets, which
  361 #              leave the browser to (mis)-interpret unknown characters, with
  362 #              sometimes bizarre results on non-MS platforms.
  363 #
  364 # credit: ripped from the demoroniser.pl script by:
  365 #         John Walker -- January 1998, http://www.fourmilab.ch/webtools/demoroniser
  366 #
  367 #################################################################################
  368 FILTER: demoronizer Fix MS's non-standard use of standard charsets.
  369 
  370 s/(&\#[0-2]\d\d)\s/$1; /g
  371 # per Robert Lynch: http://slate.msn.com//?id=2067547, just a guess.
  372 # Must come before x94 below.
  373 s/\xE2\x80\x94/ -- /g
  374 s/\x82/,/g
  375 #s-\x83-<em>f</em>-g
  376 s/\x84/,,/g
  377 s/\x85/.../g
  378 #s/\x88/^/g
  379 #s-\x89- /-g
  380 s/\x8B/</g
  381 s/\x8C/Oe/g
  382 s/\x91/`/g
  383 s/\x92/'/g
  384 s/(\x93|\x94)/"/g
  385 # Bullet type character.
  386 s/\x95/&middot;/g
  387 s/\x96/-/g
  388 s/\x97/--/g
  389 #s-\x98-<sup>~</sup>-g
  390 #s-\x99-<sup>TM</sup>-g
  391 # per Robert Lynch.
  392 s/\x9B/>/g                  # 155
  393 
  394 
  395 #################################################################################
  396 #
  397 # shockwave-flash: Kill embedded Shockwave Flash objects.
  398 #                  Note: Better just block "/.*\.swf$"!
  399 #
  400 #################################################################################
  401 FILTER: shockwave-flash Kill embedded Shockwave Flash objects.
  402 
  403 s|<object [^>]*macromedia.*</object>|<!-- Squished Shockwave Object -->|sigU
  404 s|<embed [^>]*(application/x-shockwave-flash\|\.swf).*>(.*</embed>)?|<!-- Squished Shockwave Flash Embed -->|sigU
  405 
  406 
  407 #################################################################################
  408 #
  409 # quicktime-kioskmode: Make Quicktime movies saveable.
  410 #
  411 #################################################################################
  412 FILTER: quicktime-kioskmode Make Quicktime movies saveable.
  413 
  414 s/(<embed\s+[^>]*)kioskmode\s*=\s*(["']?)true\2/$1/ig
  415 
  416 
  417 #################################################################################
  418 #
  419 # fun: Text replacements for subversive browsing fun!
  420 #
  421 #################################################################################
  422 FILTER: fun Text replacements for subversive browsing fun!
  423 
  424 # SCNR
  425 #
  426 s/microsoft(?!\.[^\s])/MicroSuck/ig
  427 
  428 # Buzzword Bingo (example for extended regex syntax)
  429 #
  430 s* (?:industry|world)[ -]leading \
  431 |  cutting[ -]edge \
  432 |  customer[ -]focused \
  433 |  market[ -]driven \
  434 |  award[ -]winning # Comments are OK, too! \
  435 |  high[ -]performance \
  436 |  solutions[ -]based \
  437 |  unmatched \
  438 |  unparalleled \
  439 |  unrivalled \
  440 *$0<sup><font color="red"><b>Bingo!</b></font></sup> \
  441 *igx
  442 
  443 # For Germans only
  444 #
  445 s/(M|m)edien(?![^<]*>)/$1&auml;dchen/Ug
  446 
  447 #################################################################################
  448 #
  449 # crude-parental: Crude parental filtering. Use with a suitable blocklist.
  450 #                 Pages are "blocked" based on keyword matching.
  451 #
  452 #################################################################################
  453 FILTER: crude-parental Crude parental filtering. Note that this filter doesn't work reliably.
  454 
  455 # (Note: Middlesex, Sussex and Essex are counties in the UK, not rude words)
  456 # (Note #2: Is 'sex' a rude word?!)
  457 
  458 s%^.*(?<!middle)(?<!sus)(?<!es)sex.*$%<html><head><title>Blocked</title></head><body>\
  459 <h3>Blocked by <a href="http://p.p/">Privoxy's</a> crude-parental filter due to possible adult content.</h3></body></html>\n%is
  460 
  461 s+^.*warez.*$+<html><head><title>No Warez</title></head><body><h3>You're not searching for illegal stuff, are you?</h3></body></html>\n+is
  462 
  463 # Remove by description
  464 s@^.*\
  465 (?:(suck|lick|tongue|rub|fuck|fingering|finger|chicks?)\s*)?\
  466 (?:(her|your|my|hard|with|big|wet|tight|pink|hot|moist|young|teen)\s*)+\
  467 (dicks?|penis|cocks?|balls?|tits?|pussy|cunt|clit|ass|mouth).*$\
  468 @This page has been blocked by <a href="http://p.p/">Privoxy's</a> crude-parental \
  469 content filter based on the description.\n\
  470 @is
  471 
  472 #Remove by link text
  473 s@^.*\
  474 (download|broadband|view|watch|free|get|extreem)?\s*\
  475 (sex|xxx|porn|cumshot|fuck(ing|s)?|anal|ass|asian|adult|Amateur|org(y|ies)|close ups?|hand?job|nail(ed)?)+\s*\
  476 (movies?|pics?|videos?|dvds?|dvd's|links?).*$\
  477 @This page has been blocked by <a href="http://p.p/">Privoxy's</a> crude-parental \
  478 content filter based on link text.\n\
  479 @is
  480 
  481 #Remove by age disclaimer
  482 s@^.*\
  483 (models?|chicks?|girls?|women|persons)\s*\
  484 (who|are|were)+ (over|at least) (16|18|21) years (old|of age).*$\
  485 @This page has been blocked by <a href="http://p.p/">Privoxy's</a> crude-parental \
  486 content filter because of an age disclaimer.\n\
  487 @is
  488 
  489 #Remove by regulations
  490 s@^.*(Section 2257|18 U.?S.?C.? 2257).*$\
  491 @This page has been blocked by <a href="http://p.p/">Privoxy's</a> crude-parental \
  492 content filter because of an regulations text.\n\
  493 @is
  494 
  495 
  496 #################################################################################
  497 #
  498 # IE-Exploits: Disable some known Internet Explorer bug exploits.
  499 #
  500 #################################################################################
  501 FILTER: ie-exploits Disable some known Internet Explorer bug exploits.
  502 
  503 # Note: This is basically a demo and waits for someone more interested in IE
  504 # security (sic!) to take over.
  505 
  506 # Cross-site-scripting:
  507 #
  508 s%f\("javascript:location.replace\('mk:@MSITStore:C:'\)"\);%alert\("This page looks like it tries to use a vulnerability described here:\n http://online.securityfocus.com/archive/1/298748/2002-11-02/2002-11-08/2"\);%siU
  509 
  510 # Address bar spoofing (http://www.secunia.com/advisories/10395/):
  511 #
  512 s/(<a[^>]*href[^>]*)(?:\x01|\x02|\x03|%0[012])@/$1MALICIOUS-LINK@/ig
  513 
  514 # Nimda:
  515 #
  516 s%<script language="JavaScript">(window\.open|1;''\.concat)\("readme\.eml", null, "resizable=no,top=6000,left=6000"\)</script>%<br><font size="7"> WARNING: This Server is infected with <a href="http://www.cert.org/advisories/CA-2001-26.html">Nimda</a>!</font>%g
  517 
  518 
  519 #################################################################################
  520 #
  521 #
  522 # site-specifics: Cure for site-specific problems. Don't apply generally!
  523 #
  524 #   Note: The fixes contained here are so specific to the problems of the
  525 #         particular web sites they are designed for that they would be a
  526 #         waste of CPU cycles (or even destructive!) on 99.9% of the web
  527 #         sites where they don't apply.
  528 #
  529 #################################################################################
  530 FILTER: site-specifics Cure for site-specific problems. Don't apply generally!
  531 
  532 # www.spiegel.de excludes X11 users from viewing Flash5 objects - shame.
  533 # Apply to: www.spiegel.de/static/js/flash-plugin.js
  534 #
  535 s/indexOf\("x11"\)/indexOf("x13")/
  536 
  537 # www.quelle-bausparkasse.de uses a very stupid redirect mechanism that
  538 # relies on a webbug being present. Can we tolerate that? No!
  539 # Apply to: www.quelle-bausparkasse.de/$
  540 #
  541 s/mylogfunc()//g
  542 
  543 # groups.yahoo.com has splash pages that one needs to click through in
  544 # order to access the actual messages. Let the browser do that. Thanks
  545 # to Paul Jobson for this one:
  546 #
  547 s|<a href="(.+?)">(?:Continue to message\|Weiter zu Nachricht)</a>|<meta http-equiv="refresh" content="0; URL=$1">|ig
  548 
  549 # monster.com has two very similar gimmicks:
  550 #
  551 s|<input type="hidden" name="REDIRECT" value="(.+?)">|<meta http-equiv="refresh" content="0; URL=$1">|i
  552 
  553 s|<IMG SRC="http://media.monster.com/mm/usen/my/no_thanks_211x40.gif".+?>|<meta http-equiv="refresh" content="0; URL=http://my.monster.com/resume.asp">|i
  554 
  555 # nytimes.com triggers popups through the onload handler of dummy images
  556 # to fool popup-blockers.
  557 #
  558 s|(<img [^>]*)onload|$1never|sig
  559 
  560 # Pre-check all the "Discard" buttons in GNU Mailman's web interface.
  561 # (This saves a lot of mouse aiming practice when flushing spamtraps)
  562 #
  563 s|(<INPUT name="\d{2,4}" type="RADIO" value="0") CHECKED |$1|g
  564 s|<INPUT name="\d{2,4}" type="RADIO" value="3" |$0 checked|g
  565 
  566 #################################################################################
  567 #
  568 # no-ping: Removes non-standard ping attributes in <a> and <area> tags.
  569 #
  570 #################################################################################
  571 FILTER: no-ping Removes non-standard ping attributes in <a> and <area> tags.
  572 s@(<a(?:rea)?[^>]*?)\sping=(['"]?)([^"'>]+)\2([>\s]?)@\
  573 <strong style="color:white; background-color:red;" title="Privoxy removed ping target '$3'">PING!</strong>\n$1$4@ig
  574 
  575 #################################################################################
  576 #
  577 # allow-autocompletion: Changes autocomplete="off" on form and input fields
  578 #                       to "on" to allow autocompletion.
  579 #
  580 #################################################################################
  581 FILTER: allow-autocompletion Changes autocomplete="off" on form and input fields to "on" to allow autocompletion.
  582 
  583 s@(<(?:input|form|select|textarea)\s[^>]+autocomplete=)(['"]?)(?:off|0)\2@$1$2on$2@igsU
  584 
  585 #################################################################################
  586 #
  587 # github: Removes the annoying "Sign-Up" banner and the Cookie disclaimer.
  588 #
  589 #################################################################################
  590 FILTER: github Removes the annoying "Sign-Up" banner and the Cookie disclaimer.
  591 
  592 s@<signup-prompt.*</signup-prompt>@@Uis
  593 s@(<div) (class="hx_cookie-banner)@$1 style="display:none;" $2@
  594 
  595 #################################################################################
  596 #
  597 # imdb: Removes some ads on IMDb.
  598 #
  599 #################################################################################
  600 FILTER: imdb Removes some ads on IMDb.
  601 
  602 s@(<div id="top_ad_wrapper")@$1 style="display:none"@
  603 s@<iframe[^>]*id="top_ad"[^>]*>.*</iframe>@<!-- Iframe removed by Privoxy's imdb filter -->@
  604 s@<iframe[^>]*onload="doWithAds.call[^>]*></iframe>@<!-- Iframe removed by Privoxy's imdb filter -->@g
  605 
  606 #################################################################################
  607 #
  608 # google: CSS-based block for Google text ads. Also removes
  609 #         a width limitation and the toolbar advertisement.
  610 #
  611 #################################################################################
  612 FILTER: google CSS-based block for Google text ads. Also removes a width limitation and the toolbar advertisement.
  613 
  614 s@</head>[^\\]@<style type="text/css">\n\
  615  /* Style sheet inserted by Privoxy's google filter. */\n\
  616  \#fbc, \#fbl, \#ra, .rhh {visibility: hidden !important;}\n\
  617  \#tpa1,\#tpa2,\#tpa3,\#tpa4,\#tpa5,\#tpa5, \#spl, .ch, \#ads,\
  618  \#toolbar, \#google_ads_frame, \#mbEnd {display: none !important;}\n\
  619  .main_body, .j, \#res, .med, .hd, .g, .s\n\
  620  {width: 99%; max-width: 100%; margin-left: 0; margin-right: 0;}\n\
  621  </style>\n$0@
  622 s@<div style=\"padding-top:11px;min-width:500px\">@<div id="main_body">@
  623 s@(<table cellspacing=0 cellpadding=0 width=25% align=right bgcolor=\#ffffff border=0\
  624 |</font></td></tr></tbody></table><table align=\"right\" bgcolor=\"\#ffffff\"\
  625 |<table cellspacing=0 cellpadding=0 align=right bgcolor=\#ffffff border=0\
  626 |<table style=\"clear:both\" align=right width=25% cellspacing=\"0\" cellpadding=\"0\"\
  627  border=\"0\" bgcolor=\"\#ffffff\")@$0 id="ads"@
  628 s@(<br clear=all><table)( border=0 cellpadding=9><tr><td)@$1 id="toolbar"$2@
  629 
  630 #################################################################################
  631 #
  632 # yahoo: CSS-based block for Yahoo text ads. Also removes a width limitation.
  633 #
  634 #################################################################################
  635 FILTER: yahoo CSS-based block for Yahoo text ads. Also removes a width limitation.
  636 
  637 s@</head>@\n<style type="text/css">\n\
  638  /* Style sheet inserted by Privoxy's yahoo filter. */\n\
  639  \#symadbn, \#ymadbn, .yschbox, .yschhd, .bbox, \#yschsec, \#sec,\
  640  \#yschanswr, .yschftad, .yschspn, .yschspns, \#ygrp-sponsored-links,\
  641  \#nwad, \#MWA2, \#MSCM, \#yregad, \#sponsored-links,\
  642  \#ks-ypn-ads, .ad, \#east, \#ygrp-vital, .ads {display: none !important;}\n\
  643  \#yschpri, \#yschweb, \#pri, \#web, \#main, .yschttl, .abstr, .res \n\
  644  {width: 99% !important; max-width: 100% !important;}\n\
  645  .yschttl, .res, .res.indent, \#web {padding: 0px; margin: 0px !important;}\n\
  646  \#web {padding-left: 0.5em}\n\
  647  \#yschqcon, \#yschtg {width: auto !important; /* No useless horizontal scrollbar please */}\n\
  648  \#composebox \#compose_editorArea {width: 70% !important; /* reasonably sized reply textarea please */\n\
  649  </style>\n$0\n@
  650 
  651 s@(<textarea\s+id="composeArea"[^>]*)width:545px;@$1width:70%;@isU
  652 
  653 #################################################################################
  654 #
  655 # msn: CSS-based block for MSN text ads. Also removes tracking URLs
  656 #      and a width limitation.
  657 #
  658 #################################################################################
  659 FILTER: msn CSS-based block for MSN text ads. Also removes tracking URLs and a width limitation.
  660 
  661 s@</head>@<style type="text/css">\n\
  662  /* Style sheet inserted by Privoxy's msn filter. */\n\
  663  .msn_ads, \#at, \#ar, .mktmsg {display: none !important;}\n\
  664  \#results, \#b_results, .flank, .results_area_flank, .results_area_stroke,\n\
  665  \#results_area, \#content, .sb_tlst, .sa_cc, .sb_ph, \#sw_main,\n\
  666  .content, .b_content, \#sw_foot, \#bf, \#sw_content, \#sidebar, \#pag\n\
  667  {width: 99% !important; min-width: 99% !important;\n\
  668  max-width: 100% !important; /* width:100% sometimes causes horizontal scrollbars */}\n\
  669  /* Remove 'related' ads */\n\
  670  .b_ad, .b_adlabel {clear: both; display:none;}\n\
  671  /* Remove "suggestions". They are next to worthless but partly overlap with the search results */\n\
  672  .suggestion, \#nys_right, \#nys {clear: both; display:none;}\n\
  673  /* Remove "Related searches" at the left side of the main results.\n\
  674     They are next to worthless, too, and also are still present below the main search results */\n\
  675  \#b_results > .b_ans {clear: both; display:none;}\n\
  676  \#s_notf_div,\n \
  677  /* Overlay ads to enable Facebook 'likes' in search results. */\n\
  678  .sn_container {display:none !important;}\n\
  679  \#content, \#b_content {padding: 0px 0px 0px 0px}\n\
  680  </style>\n$0@
  681 # Are these ids still in use?
  682 s@(<div[^>]*) id=(["']?)ads_[^\2]*\2@$1 class="msn_ads"@Uig
  683 s@(<div[^>]*) class=(["']?)sb_ads[^\2]*\2@$1 class="msn_ads"@Uig
  684 s@(<a[^>]*href=\")http://g.msn.com/.*\?(http://.*)(&amp;&amp;DI=.*)(\")@$1$2$4@Ug
  685 s@(<a[^>]*)gping=\".*\"@$1 title="URL cleaned up by Privoxy's msn filter"@Ug
  686 
  687 #################################################################################
  688 #
  689 # blogspot: Cleans up some Blogspot blogs. Read the fine print before using this.
  690 #
  691 #           This filter also intentionally removes some navigation stuff and
  692 #           sets the page width to 100%. As a result, some rounded "corners" would
  693 #           appear to early or not at all and as fixing this would require a browser
  694 #           that understands background-size (CSS3), they are removed instead.
  695 #
  696 #           When applied to feeds, it removes comment titles that
  697 #           only contain the beginning of the actual comment.
  698 #
  699 #################################################################################
  700 FILTER: blogspot Cleans up some Blogspot blogs. Read the fine print before using this.
  701 
  702 s@</head>@<style type="text/css">\n\
  703  /* Style sheet inserted by Privoxy's blogspot filter. */\n\
  704  \#powered-by {display: none !important;}\n\
  705  \#wrap4, \#wrapper {margin-top: 0px }\n\
  706  \#blogheader, \#header {margin-top: 0.5em !important}\n\
  707  \#content {width: 98% }\n\
  708  \#main {width: 70% }\n\
  709  \#sidebar {width: 29% }\n\
  710  .post-body {overflow: auto;}\n\
  711  .blogComments {width: 100%; overflow: auto;}\n</style>\n$0@
  712 s@<body.*(?:<div id="space-for-ie"></div>|(<div id="(?:content|wrap4|wrapper)))@<body>\
  713  <!-- Privoxy's blogspot filter ditched some garbage here -->$1@Us
  714 s@(<div style=\"[^\"]*width:)30em@$1 100%@
  715 s@background:url\(\"http://www.blogblog.com/rounders[^\"]*\"\).*;@/*$0*/@Ug
  716 s@(background:\#[a-f\d]{3})( url\(\"http://www.blogblog.com/rounders[^\"]*\"\).*;)@$1 ;/*$2*/@Ug
  717 # Do the feed filtering magic as described above.
  718 s@<title(?:\s+type=\'text\')?>([^<]*)(?:\.\.\.)?\s*</title>\s*\
  719 (<content(?:\s+type=\'(?:html|text)\')?>\s*\1)@<title></title>$2@ig
  720 
  721 #################################################################################
  722 #
  723 # sourceforge: Reduces the amount of ads for proprietary software on SourceForge.
  724 #
  725 #################################################################################
  726 FILTER: sourceforge Reduces the amount of ads for proprietary software on SourceForge.
  727 
  728 s@<div id="banner-sterling"@$0 style="display:none;"@
  729 s@<section id="nels"@$0 style="display:none;"@
  730 s@<aside class="m-wide-widget m-wide-projects-widget "@$0 style="display:none;"@
  731 s@<div id="newsletter-floating"@$0 style="display:none;"@
  732 s@<div class="sterling" id="banner-sterling"@$0 style="display:none;"@
  733 
  734 #################################################################################
  735 #
  736 # x-httpd-php-to-html: Changes the Content-Type header from
  737 #                      x-httpd-php to html. "Content-Type: x-httpd-php"
  738 #                      is set by clueless PHP users and causes many
  739 #                      browsers do open a download menu instead of
  740 #                      rendering the page.
  741 #
  742 #################################################################################
  743 SERVER-HEADER-FILTER: x-httpd-php-to-html Changes the Content-Type header from x-httpd-php to html.
  744 
  745 s@^(Content-Type:)\s*application/x-httpd-php@$1 text/html@i
  746 
  747 #################################################################################
  748 #
  749 # html-to-xml: Changes the Content-Type header from html to xml.
  750 #
  751 #################################################################################
  752 SERVER-HEADER-FILTER: html-to-xml Changes the Content-Type header from html to xml.
  753 
  754 s@^(Content-Type:)\s*text/html(;.*)?$@$1 application/xhtml+xml$2@i
  755 
  756 #################################################################################
  757 #
  758 # xml-to-html: Changes the Content-Type header from xml to html.
  759 #
  760 #################################################################################
  761 SERVER-HEADER-FILTER: xml-to-html Changes the Content-Type header from xml to html.
  762 
  763 s@^(Content-Type:)\s*(?:application|text)/(?:xhtml\+)?xml(;.*)?$@$1 text/html$2@i
  764 
  765 #################################################################################
  766 #
  767 # hide-tor-exit-notation: Remove the Tor exit node notation in Host and Referer headers.
  768 #
  769 #   Note: If Privoxy and Tor are chained and Privoxy is configured to
  770 #         use socks4a, one can use http://www.example.org.foobar.exit/
  771 #         to access the host www.example.org through Tor exit node foobar.
  772 #
  773 #         As the HTTP client isn't aware of this notation, it treats the
  774 #         whole string "www.example.org.foobar.exit" as host and uses it
  775 #         for the "Host" and "Referer" headers. From the server's point of
  776 #         view the resulting headers are invalid and can cause problems.
  777 #
  778 #         An invalid "Referer" header can trigger "hot-linking" protections,
  779 #         an invalid "Host" header will make it impossible for the server to
  780 #         find the right vhost (several domains hosted on the same IP address).
  781 #
  782 #         This filter removes the "foo.exit" part in those headers
  783 #         to prevent the mentioned problems. Note that it only modifies
  784 #         the HTTP headers, it doesn't make it impossible for the server
  785 #         to detect your Tor exit node based on the IP address the request is
  786 #         coming from.
  787 #
  788 #################################################################################
  789 CLIENT-HEADER-FILTER: hide-tor-exit-notation Removes the Tor exit node notation in Host and Referer headers.
  790 
  791 s@^((?:Referer|Host):\s*(?:https?://)?[^/]*)\.[^\./]*?\.exit@$1@i
  792 
  793 #################################################################################
  794 #
  795 # no-brotli-accepted: Strips "br" from the Accept-Encoding header as Privoxy
  796 #                     currently doesn't support Brotli.
  797 #
  798 #################################################################################
  799 CLIENT-HEADER-FILTER: no-brotli-accepted Strip "br" from Accept-Encoding header
  800 
  801 s@(^Accept-Encoding:.*?)(?:br, |, br|br)@$1@i
  802 
  803 #################################################################################
  804 #
  805 # less-download-windows: Prevents annoying download windows for content types
  806 #                        the browser can handle itself.
  807 #
  808 #################################################################################
  809 SERVER-HEADER-FILTER: less-download-windows Prevent annoying download windows for content types the browser can handle itself.
  810 
  811 s@^Content-Disposition:.*filename=(["']?).*\.(png|gif|jpe?g|diff?|d?patch|c|h|pl|shar)\1.*$@@i
  812 s@^(Content-Type:)\s*(?:message/(?:news|rfc822)|text/x-.*|application/x-sh(?:\s|$))\s*@$1 text/plain@i
  813 
  814 #################################################################################
  815 #
  816 # image-requests: Tags detected image requests as "IMAGE-REQUEST". Whether
  817 #                 or not the detection actually works depends on the browser.
  818 #
  819 #################################################################################
  820 CLIENT-HEADER-TAGGER: image-requests Tags detected image requests as "IMAGE-REQUEST".
  821 
  822 s@^Accept:\s*image/.*@IMAGE-REQUEST@i
  823 
  824 #################################################################################
  825 #
  826 # css-requests:  Tags detected CSS requests as "CSS-REQUEST". Whether
  827 #                or not the detection actually works depends on the browser.
  828 #
  829 #################################################################################
  830 CLIENT-HEADER-TAGGER: css-requests Tags detected CSS requests as "CSS-REQUEST".
  831 
  832 s@^Accept:\s*text/css.*@CSS-REQUEST@i
  833 
  834 #################################################################################
  835 #
  836 # range-requests: Tags range requests as "RANGE-REQUEST".
  837 #
  838 #                 By default Privoxy removes Range headers for requests to
  839 #                 ressources that will be filtered to make sure the filters
  840 #                 get the whole picture. Otherwise Range requests could be
  841 #                 intentionally used to circumvent filters or, less likely,
  842 #                 filtering a partial response may damage it because it matched
  843 #                 a pattern that the ressource as a whole wouldn't.
  844 #
  845 #                 Range requests can be useful and save bandwidth so instead
  846 #                 of removing Range headers for requests to ressources that
  847 #                 will be filtered, you may prefer to simply disable filtering
  848 #                 for those requests.
  849 #
  850 #                 That's what this tagger is all about. After enabling it,
  851 #                 you can disable filtering for range requests using the following
  852 #                 action section:
  853 #
  854 #                 {-filter -deanimate-gifs}
  855 #                 TAG:^RANGE-REQUEST
  856 #
  857 #################################################################################
  858 CLIENT-HEADER-TAGGER: range-requests Tags range requests as "RANGE-REQUEST".
  859 
  860 s@^Range:.*@RANGE-REQUEST@i
  861 
  862 #################################################################################
  863 #
  864 # client-ip-address: Tags the request with the client's IP address.
  865 #
  866 #################################################################################
  867 CLIENT-HEADER-TAGGER: client-ip-address Tags the request with the client's IP address.
  868 
  869 s@^\w*\s+.*\s+HTTP/\d\.\d\s*@IP-ADDRESS: $origin@D
  870 
  871 #################################################################################
  872 #
  873 # listen-address: Tags the request with the listen-address on which the request
  874 #                 came in.
  875 #
  876 #################################################################################
  877 CLIENT-HEADER-TAGGER: listen-address Tags the request with the listen-address on which the request came in.
  878 
  879 s@^\w*\s+.*\s+HTTP/\d\.\d\s*@LISTEN-ADDRESS: $listen-address@D
  880 
  881 #################################################################################
  882 #
  883 # http-method: Tags the request with its HTTP method.
  884 #
  885 #################################################################################
  886 CLIENT-HEADER-TAGGER: http-method Tags the request with its HTTP method.
  887 
  888 s@^(\w*).*HTTP/\d\.\d\s*$@$1@i
  889 
  890 #################################################################################
  891 #
  892 # allow-post: Tags POST requests as "ALLOWED-POST".
  893 #
  894 #################################################################################
  895 CLIENT-HEADER-TAGGER: allow-post Tags POST requests as "ALLOWED-POST".
  896 
  897 s@^(?:POST)\s+.*\s+HTTP/\d\.\d\s*@ALLOWED-POST@i
  898 
  899 #################################################################################
  900 #
  901 # complete-url: Tags the request with the whole request URL.
  902 #
  903 #################################################################################
  904 CLIENT-HEADER-TAGGER: complete-url Tags the request with the whole request URL.
  905 
  906 s@^\w*\s+(.*)\s+HTTP/\d\.\d\s*$@$1@i
  907 
  908 #################################################################################
  909 #
  910 # user-agent: Tags the request with the complete User-Agent header.
  911 #
  912 #################################################################################
  913 CLIENT-HEADER-TAGGER: user-agent Tags the request with the complete User-Agent header.
  914 
  915 s@^User-Agent:.*@$0@i
  916 
  917 #################################################################################
  918 #
  919 # referer: Tags the request with the complete Referer header.
  920 #
  921 #################################################################################
  922 CLIENT-HEADER-TAGGER: referer Tags the request with the complete Referer header.
  923 
  924 s@^Referer:.*@$0@i
  925 
  926 #################################################################################
  927 #
  928 # content-type: Tags the request with the content type declared by the server.
  929 #
  930 #################################################################################
  931 SERVER-HEADER-TAGGER: content-type Tags the request with the content type declared by the server.
  932 
  933 s@^Content-Type:\s*([^;]+).*@$1@i
  934 
  935 #################################################################################
  936 #
  937 # privoxy-control: The taggers create tags with the content of X-Privoxy-Control
  938 #                  headers, the filters remove said headers.
  939 #
  940 #################################################################################
  941 CLIENT-HEADER-TAGGER: privoxy-control Creates tags with the content of X-Privoxy-Control headers.
  942 
  943 s@^X-Privoxy-Control:\s*@@i
  944 
  945 CLIENT-HEADER-FILTER: privoxy-control Removes X-Privoxy-Control headers.
  946 
  947 s@^X-Privoxy-Control:.*@@i
  948 
  949 SERVER-HEADER-TAGGER: privoxy-control Creates tags with the content of X-Privoxy-Control headers.
  950 
  951 s@^X-Privoxy-Control:\s*@@i
  952 
  953 SERVER-HEADER-FILTER: privoxy-control Removes X-Privoxy-Control headers.
  954 
  955 s@^X-Privoxy-Control:.*@@i
  956 
  957 #################################################################################
  958 #
  959 # client-body: Modify client request body
  960 #
  961 #################################################################################
  962 CLIENT-BODY-FILTER: remove-first-byte Removes the first byte from the request body
  963 s@^.@@
  964 
  965 CLIENT-BODY-FILTER: remove-test Removes "test" everywhere in the request body
  966 s@test@@g
  967 
  968 CLIENT-BODY-FILTER: overwrite-test-value Overwrites the value of the "test" variable with blafasel
  969 s@(test=)[^&\s]*@$1blafasel@g