Reword "unrecognized directive" warning, use better
[privoxy.git] / default.filter
index a0601d0..8a0ac5f 100644 (file)
@@ -2,7 +2,7 @@
 # 
 #  File        :  $Source: /cvsroot/ijbswa/current/default.filter,v $
 # 
-#  $Id: default.filter,v 1.42 2007/05/17 15:55:36 fabiankeil Exp $
+#  $Id: default.filter,v 1.51 2007/11/04 16:15:11 fabiankeil Exp $
 #
 #  Purpose     :  Rules to process the content of web pages
 # 
@@ -52,7 +52,7 @@
 #
 # Note that you are free to choose the delimiter as you see fit.
 #
-# Note2: In addidion to the Perl options gimsx, the following nonstandard
+# Note2: In addition to the Perl options gimsx, the following nonstandard
 # options are supported:
 # 
 # 'U' turns the default to ungreedy matching.  Add ? to quantifiers to
 
 #################################################################################
 #
-# js-annoyances: Get rid of particularly annoying JavaScript abuse
+# js-annoyances: Get rid of particularly annoying JavaScript abuse.
 #
 #################################################################################
-FILTER: js-annoyances Get rid of particularly annoying JavaScript abuse
+FILTER: js-annoyances Get rid of particularly annoying JavaScript abuse.
 
 # Note: Most of these jobs would be safer if restricted to a
 # <script> context as in:
 #
 # s/(<script.*)nasty-item(?=.*<\/script>)/$1replacement/sigU
 #
-# but that would make them match only the first occurance of
+# but that would make them match only the first occurrence of
 # nasty-item in each <script>. We need nestable jobs!
 
 # Get rid of Javascript referrer tracking. 
@@ -128,10 +128,10 @@ s/(open\s*\([^\)]+always(?:raised|lowered)=)(["']?)(?:yes|1)\2/$1$2no$2/sigU
 
 #################################################################################
 #
-# js-events: Kill all JS event bindings and timers (Radically destructive! Only for extra nasty sites)
+# js-events: Kill all JS event bindings and timers (Radically destructive! Only for extra nasty sites).
 #
 #################################################################################
-FILTER: js-events Kill all JS event bindings and timers (Radically destructive! Only for extra nasty sites)
+FILTER: js-events Kill all JS event bindings and timers (Radically destructive! Only for extra nasty sites).
 
 s/(on|event\.)((mouse(over|out|down|up|move))|(un)?load|contextmenu|selectstart)/never/ig
 # Not events, but abused on the same type of sites:
@@ -140,10 +140,10 @@ s/settimeout\(/concat(/ig
 
 #################################################################################
 #
-# html-annoyances: Get rid of particularly annoying HTML abuse
+# html-annoyances: Get rid of particularly annoying HTML abuse.
 #
 #################################################################################
-FILTER: html-annoyances Get rid of particularly annoying HTML abuse
+FILTER: html-annoyances Get rid of particularly annoying HTML abuse.
 
 # New browser windows (if allowed -- see no-popups filter below) should be
 # resizeable and have a location and status bar
@@ -161,10 +161,10 @@ s-</?(blink|marquee).*>--sigU
 
 #################################################################################
 #
-# content-cookies: Kill cookies that come in the HTML or JS content
+# 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: content-cookies Kill cookies that come in the HTML or JS content.
 
 # JS cookies, except those used by antiadbuster.com to detect us:
 #
@@ -177,10 +177,10 @@ s|<meta\s+http-equiv=['"]?set-cookie.*>|<!-- ZappedCookie -->|igU
 
 #################################################################################
 #
-# refresh-tags: Kill automatic refresh tags (for dial-on-demand setups)
+# refresh-tags: Kill automatic refresh tags (for dial-on-demand setups).
 #
 #################################################################################
-FILTER: refresh-tags Kill automatic refresh tags (for dial-on-demand setups)
+FILTER: refresh-tags Kill automatic refresh tags (for dial-on-demand setups).
 
 # Note: Only deactivates refreshes with more than 9 seconds delay to
 #       preserve monster-stupid but common redirections via meta tags.
@@ -190,10 +190,10 @@ s/<meta\s+http-equiv\s*=\s*(['"]?)refresh\1\s+content\s*=\s*(['"]?)\d{2,}\s*(;\s
 
 #################################################################################
 #
-# unsolicited-popups: Disable unsolicited pop-up windows
+# unsolicited-popups: Disable unsolicited pop-up windows.
 #
 #################################################################################
-FILTER: unsolicited-popups Disable only unsolicited pop-up windows
+FILTER: unsolicited-popups Disable only unsolicited pop-up windows.
 
 s+([^'"]\s*<head.*>)(?=\s*[^'"])+$1<script>function PrivoxyWindowOpen(){return(null);}</script>+isU
 s@([^\w\s.]\s*)((?:map)?(window|this|parent)\.?)?open\s*\(@$1PrivoxyWindowOpen(@ig
@@ -202,21 +202,21 @@ s+([^'"]\s*</html>)(?!\s*(\\n|'|"))+$1<script>function PrivoxyWindowOpen(a, b, c
 
 ##################################################################################
 #
-# all-popups: Kill all popups in JavaScript and HTML
+# all-popups: Kill all popups in JavaScript and HTML.
 #
 #################################################################################
-FILTER: all-popups Kill all popups in JavaScript and HTML
+FILTER: all-popups Kill all popups in JavaScript and HTML.
 
 s@((\W\s*)(?:map)?(window|this|parent)\.?)open\s*\\?\(@$1concat(@ig  # JavaScript
-s/\starget\s*=\s*(['"]?)_?(blank|new)\1?/ notarget/ig        # HTML
-
+#s/\starget\s*=\s*(['"]?)_?(blank|new)\1?/ notarget/ig        # HTML
+s/\starget\s*=\s*(['"]?)_?(blank|new)\1?/ /ig        # (X)HTML
 
 ##################################################################################
 #
-# img-reorder: Reorder attributes in <img> tags to make the banners-by-* filters more effective
+# 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: img-reorder Reorder attributes in <img> tags to make the banners-by-* filters more effective.
 
 # In the first step src is moved to the start, then width is moved to the second
 # place to guarantee an order of src, width, height.
@@ -231,7 +231,7 @@ s|<img (src=(?:(['"])[^>\\\\2]*\2\|[^'">\\\s]+?))([^>]*)\s+width\s*=\s*(["']?)(\
 
 #################################################################################
 #
-# banners-by-size: Kill banners by size
+# banners-by-size: Kill banners by size.
 #
 #################################################################################
 #
@@ -244,7 +244,7 @@ s|<img (src=(?:(['"])[^>\\\\2]*\2\|[^'">\\\s]+?))([^>]*)\s+width\s*=\s*(["']?)(\
 # Note2: Use img-reorder before this filter to ensure maximum matching success
 #
 #################################################################################
-FILTER: banners-by-size Kill banners by size
+FILTER: banners-by-size Kill banners by size.
 
 # 88*31
 s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)88\4)[^>]*?(height=(['"]?)31\6)[^>]*?(?=/?>)@\
@@ -282,10 +282,10 @@ s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)336\4)[^>]*?(h
 
 #################################################################################
 #
-# banners-by-link: Kill banners by their links to known clicktrackers (Experimental)
+# banners-by-link: Kill banners by their links to known clicktrackers (Experimental).
 #
 #################################################################################
-FILTER: banners-by-link Kill banners by their links to known clicktrackers
+FILTER: banners-by-link Kill banners by their links to known clicktrackers.
 
 # Common case with width and height attributes:
 #
@@ -294,32 +294,33 @@ s@<a\s+href\s*=\s*(['"]?)([^>\1\s]*?(?:\
 | advert                              # see dict.leo.org \
 | atwola\.com/(?:link|redir)          # see www.cnn.com \
 | /jump/                              # redirs for doublecklick.net ads \
-| tracker | counter                   # common \
+| counter                             # common \
+| (?<!&type=)tracker                  # (&type=tracker is used in sf's project statistics) \
 | adlog\.pl                           # see sf.net \
 )[^>\1\s]*)\1[^>]*>\s*<img\s+(?:src\s*=\s*(['"]?)([^>\\\3\s]+)\3)?[^>]*((?:width|height)\s*=\s*(['"]?)\d+?\6)[^>]*((?:width|height)\s*=\s*(['"]?)\d+?\8)[^>]*?(?=/?>)\
 @<img $5 $7 src="http://config.privoxy.org/send-banner?type=auto" border="0" title="Killed $4 by link to $2"@sigx
 
 # Rare case w/o explicit dimensions:
 #
-s@<a\s+href\s*=\s*(['"]?)([^>\1\s]*?(?:ad(?:click|vert)|atwola\.com/(?:link|redir)|doubleclick\.net/jump/|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
+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
 
 
 ################################################################################
 #
-# webbugs: Squish WebBugs (1x1 invisible GIFs used for user tracking)
+# webbugs: Squish WebBugs (1x1 invisible GIFs used for user tracking).
 #
 #################################################################################
-FILTER: webbugs Squish WebBugs (1x1 invisible GIFs used for user tracking)
+FILTER: webbugs Squish WebBugs (1x1 invisible GIFs used for user tracking).
 
 s@<img[^>]*\s(?:width|height)\s*=\s*['"]?[01](?=\D)[^>]*\s(?:width|height)\s*=\s*['"]?[01](?=\D)[^>]*?>@@siUg
 
 
 #################################################################################
 #
-# tiny-textforms: Extend those tiny textareas up to 40x80 and kill the hard wrap
+# 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: tiny-textforms Extend those tiny textareas up to 40x80 and kill the hard wrap.
 
 s/(<textarea[^>]*?)(?:\s*(?:rows|cols)=(['"]?)\d+\2)+/$1 rows=$2\40$2 cols=$2\80$2/ig 
 s/(<textarea[^>]*?)wrap=(['"]?)hard\2/$1/ig
@@ -327,19 +328,19 @@ s/(<textarea[^>]*?)wrap=(['"]?)hard\2/$1/ig
 
 #################################################################################
 #
-# jumping-windows: Prevent windows from resizing and moving themselves
+# jumping-windows: Prevent windows from resizing and moving themselves.
 #
 #################################################################################
-FILTER: jumping-windows Prevent windows from resizing and moving themselves
+FILTER: jumping-windows Prevent windows from resizing and moving themselves.
 
 s/(?<=[\W])(?:window|this|self)\.(?:move|resize)(?:to|by)\(/''.concat(/ig
 
 #################################################################################
 #
-# frameset-borders: Give frames a border, make them resizable and scrollable
+# frameset-borders: Give frames a border, make them resizable and scrollable.
 #
 #################################################################################
-FILTER: frameset-borders Give frames a border and make them resizable
+FILTER: frameset-borders Give frames a border and make them resizable.
 
 s/(<frameset\s+[^>]*)framespacing=(['"]?)(no|0)\2/$1/igU
 s/(<frameset\s+[^>]*)frameborder=(['"]?)(no|0)\2/$1/igU
@@ -360,7 +361,7 @@ s/(<frame\s+[^>]*)scrolling=(['"]?)(no|0)\2/$1/igU
 #         John Walker -- January 1998, http://www.fourmilab.ch/webtools/demoroniser
 #
 #################################################################################
-FILTER: demoronizer Fix MS's non-standard use of standard charsets
+FILTER: demoronizer Fix MS's non-standard use of standard charsets.
 
 s/(&\#[0-2]\d\d)\s/$1; /g
 # per Robert Lynch: http://slate.msn.com//?id=2067547, just a guess.
@@ -389,11 +390,11 @@ s/\x9B/>/g                  # 155
 
 #################################################################################
 #
-# shockwave-flash: Kill embedded Shockwave Flash objects
+# shockwave-flash: Kill embedded Shockwave Flash objects.
 #                  Note: Better just block "/.*\.swf$"!
 #
 #################################################################################
-FILTER: shockwave-flash Kill embedded Shockwave Flash objects
+FILTER: shockwave-flash Kill embedded Shockwave Flash objects.
 
 s|<object [^>]*macromedia.*</object>|<!-- Squished Shockwave Object -->|sigU
 s|<embed [^>]*(application/x-shockwave-flash\|\.swf).*>(.*</embed>)?|<!-- Squished Shockwave Flash Embed -->|sigU
@@ -401,10 +402,10 @@ s|<embed [^>]*(application/x-shockwave-flash\|\.swf).*>(.*</embed>)?|<!-- Squish
 
 #################################################################################
 #
-# quicktime-kioskmode: Make Quicktime movies saveable
+# quicktime-kioskmode: Make Quicktime movies saveable.
 #
 #################################################################################
-FILTER: quicktime-kioskmode Make Quicktime movies saveable
+FILTER: quicktime-kioskmode Make Quicktime movies saveable.
 
 s/(<embed\s+[^>]*)kioskmode\s*=\s*(["']?)true\2/$1/ig 
 
@@ -445,37 +446,38 @@ s/(M|m)edien(?![^<]*>)/$1&auml;dchen/Ug
 #                 Pages are "blocked" based on keyword matching.
 #
 #################################################################################
-FILTER: crude-parental Crude parental filtering 
+FILTER: crude-parental Crude parental filtering. Note that this filter doesn't work reliable.
 
 # (Note: Middlesex, Sussex and Essex are counties in the UK, not rude words)
 # (Note #2: Is 'sex' a rude word?!)
 
-s%^.*(?<!middle)(?<!sus)(?<!es)sex.*$%<html><head><title>Blocked</title></head><body><h3>Blocked due to possible adult content. Please see <a href="http://dmoz.org/Kids_and_Teens/">this site</a>.</h3></body></html>%is
+s%^.*(?<!middle)(?<!sus)(?<!es)sex.*$%<html><head><title>Blocked</title></head><body>\
+<h3>Blocked by Privoxy's crude-parental filter due to possible adult content.</h3></body></html>%is
 
 s+^.*warez.*$+<html><head><title>No Warez</title></head><body><h3>You're not searching for illegal stuff, are you?</h3></body></html>+is
 
 # Remove by description
 s/^.*\
-(suck |lick |tounge |rub |fuck |fingering |finger |chicks? )?\
-(her |your |my |hard |with |big |wet |tight |pink |hot |moist |young |teen )+\
+(?:(suck|lick|tounge|rub|fuck|fingering|finger|chicks?)\s*)?\
+(?:(her|your|my|hard|with|big|wet|tight|pink|hot|moist|young|teen)\s*)+\
 (dicks?|penis|cocks?|balls?|tits?|pussy|cunt|clit|ass|mouth).*$\
 /This page has been blocked by Privoxy's crude-parental content filter\
-/is 
+/is
 
 #Remove by link text
 s/^.*\
-(download|broadband|view|watch|free|get|extreem)? \
-(sex|xxx|porn|cumshot|fuck(ing|s)?|anal|ass|asian|adult|Amateur|org(y|ies)|close ups?|hand ?      job|nail(ed)?)+ \
+(download|broadband|view|watch|free|get|extreem)?\s*\
+(sex|xxx|porn|cumshot|fuck(ing|s)?|anal|ass|asian|adult|Amateur|org(y|ies)|close ups?|hand?job|nail(ed)?)+\s*\
 (movies?|pics?|videos?|dvds?|dvd's|links?).*$\
 /This page has been blocked by Privoxy's crude-parental content filter\
-/is 
+/is
 
 #Remove by age disclaimer
 s/^.*\
-(models?|chicks?|girls?|women|persons) \
+(models?|chicks?|girls?|women|persons)\s*\
 (who|are|were)+ (over|at least) (16|18|21) years (old|of age).*$\
 /This page has been blocked by Privoxy's crude-parental content filter\
-/is 
+/is
 
 #Remove by regulations
 s/^.*(Section 2257|18 U.?S.?C.? 2257).*$\
@@ -485,10 +487,10 @@ s/^.*(Section 2257|18 U.?S.?C.? 2257).*$\
 
 #################################################################################
 #
-# IE-Exploits: Disable some known Internet Explorer bug exploits
+# IE-Exploits: Disable some known Internet Explorer bug exploits.
 #
 #################################################################################
-FILTER: ie-exploits Disable some known Internet Explorer bug exploits
+FILTER: ie-exploits Disable some known Internet Explorer bug exploits.
 
 # Note: This is basically a demo and waits for someone more interested in IE
 # security (sic!) to take over.
@@ -569,6 +571,7 @@ s@(<a(?:rea)?[^>]*?)\sping=(['"]?)([^"'>]+)\2([>\s]?)@\
 #
 #################################################################################
 FILTER: google CSS-based block for Google text ads. Also removes a width limitation and the toolbar advertisement.
+
 s@</head>@<style type="text/css">\n\
  /* Style sheet inserted by Privoxy's google filter. */\n\
  \#fbc, \#fbl, \#ra, .rhh {visibility: hidden !important;}\n\
@@ -589,10 +592,12 @@ s@(<br clear=all><table)( border=0 cellpadding=9><tr><td)@$1 id="toolbar"$2@
 #
 #################################################################################
 FILTER: yahoo CSS-based block for Yahoo text ads. Also removes a width limitation.
+
 s@</head>@\n<style type="text/css">\n\
  /* Style sheet inserted by Privoxy's yahoo filter. */\n\
- \#symadbn, \#ymadbn, .yschbox, \#yschsec, .yschhd, \#yschanswr, .yschftad,\
- .yschspn, .yschspns, \#ygrp-sponsored-links, \#ks-ypn-ads {display: none !important;}\n\
+ \#symadbn, \#ymadbn, .yschbox, .yschhd, .bbox, \#yschsec, \#sec,\
+ \#yschanswr, .yschftad,\ .yschspn, .yschspns, \#ygrp-sponsored-links,\
+ \#ks-ypn-ads {display: none !important;}\n\
  \#yschpri, \#yschweb {width: 100% !important; max-width: 100% !important;}\n\
  \#yschqcon, \#yschtg {width: auto !important; /* No useless horizontal scrollbar please */}\n\
 </style>\n$0@
@@ -604,6 +609,7 @@ s@</head>@\n<style type="text/css">\n\
 #
 #################################################################################
 FILTER: msn CSS-based block for MSN text ads. Also removes tracking URLs and a width limitation.
+
 s@</head>@<style type="text/css">\n\
  /* Style sheet inserted by Privoxy's msn filter. */\n\
  .msn_ads {display: none !important;}\n\
@@ -623,6 +629,8 @@ s@</head>@<style type="text/css">\n\
 s@(<div[^>]*) id=(["']?)ads_[^\2]*\2@$1 class="msn_ads"@Uig
 s@(<a[^>]*href=\")http://g.msn.com/.*\?(http://.*)(&amp;&amp;DI=.*)(\")@$1$2$4@Ug
 s@(<a[^>]*)gping=\".*\"@$1 title="URL cleaned up by Privoxy's msn filter"@Ug
+s@<div id=\"ar\">(<h2>Sponsored sites</h2>)@<div class="msn_ads">$1@
+s@(</script><div) id=\"at\"@$1 class="msn_ads"@
 
 #################################################################################
 #
@@ -635,6 +643,7 @@ s@(<a[^>]*)gping=\".*\"@$1 title="URL cleaned up by Privoxy's msn filter"@Ug
 #
 #################################################################################
 FILTER: blogspot Cleans up some Blogspot blogs. Read the fine print before using this.
+
 s@</head>@<style type="text/css">\n\
  /* Style sheet inserted by Privoxy's blogspot filter. */\n\
  \#powered-by {display: none !important;}\n\
@@ -661,6 +670,7 @@ s@(background:\#[a-f\d]{3})( url\(\"http://www.blogblog.com/rounders[^\"]*\"\).*
 #
 #################################################################################
 SERVER-HEADER-FILTER: x-httpd-php-to-html Changes the Content-Type header from x-httpd-php to html.
+
 s@^(Content-Type:)\s*application/x-httpd-php@$1 text/html@i
 
 #################################################################################
@@ -669,6 +679,7 @@ s@^(Content-Type:)\s*application/x-httpd-php@$1 text/html@i
 #
 #################################################################################
 SERVER-HEADER-FILTER: html-to-xml Changes the Content-Type header from html to xml.
+
 s@^(Content-Type:)\s*text/html(;.*)?$@$1 application/xhtml+xml$2@i
 
 #################################################################################
@@ -677,6 +688,7 @@ s@^(Content-Type:)\s*text/html(;.*)?$@$1 application/xhtml+xml$2@i
 #
 #################################################################################
 SERVER-HEADER-FILTER: xml-to-html Changes the Content-Type header from xml to html.
+
 s@^(Content-Type:)\s*(?:application|text)/(?:xhtml\+)?xml(;.*)?$@$1 text/html$2@i
 
 #################################################################################
@@ -704,6 +716,7 @@ s@^(Content-Type:)\s*(?:application|text)/(?:xhtml\+)?xml(;.*)?$@$1 text/html$2@
 #
 #################################################################################
 CLIENT-HEADER-FILTER: hide-tor-exit-notation Removes the Tor exit node notation in Host and Referer headers.
+
 s@^((?:Referer|Host):\s*(?:https?://)?[^/]*)\.[^\./]*?\.exit@$1@i
 
 #################################################################################
@@ -712,7 +725,8 @@ s@^((?:Referer|Host):\s*(?:https?://)?[^/]*)\.[^\./]*?\.exit@$1@i
 #                        the browser can handle itself.
 #
 #################################################################################
-SERVER-HEADER-FILTER: less-download-windows Prevent annoying download windows for content types the browser can handle itself
+SERVER-HEADER-FILTER: less-download-windows Prevent annoying download windows for content types the browser can handle itself.
+
 s@^Content-Disposition:.*filename=(["']?).*\.(png|gif|jpe?g|diff?|d?patch|c|h|pl|shar)\1.*$@@i
 s@^(Content-Type:)\s*(?:message/(?:news|rfc822)|text/x-.*|application/x-sh)\s*@$1 text/plain@i
 
@@ -723,6 +737,7 @@ s@^(Content-Type:)\s*(?:message/(?:news|rfc822)|text/x-.*|application/x-sh)\s*@$
 #
 #################################################################################
 CLIENT-HEADER-TAGGER: image-requests Tags detected image requests as "IMAGE-REQUEST".
+
 s@Accept:\s*image/.*@IMAGE-REQUEST@i
 
 #################################################################################
@@ -731,13 +746,126 @@ s@Accept:\s*image/.*@IMAGE-REQUEST@i
 #                or not the detection actually works depends on the browser.
 #
 #################################################################################
-CLIENT-HEADER-TAGGER: text-requests Tags detected CSS requests as "CSS-REQUEST".
+CLIENT-HEADER-TAGGER: css-requests Tags detected CSS requests as "CSS-REQUEST".
+
 s@Accept:\s*text/css.*@CSS-REQUEST@i
 
+#################################################################################
+#
+# client-ip-address: Tags the request with the client's IP address.
+#
+#################################################################################
+CLIENT-HEADER-TAGGER: client-ip-address Tags the request with the client's IP address.
+
+s@^\w*\s+.*\s+HTTP/\d\.\d\s*@IP-ADDRESS: $origin@D
+
+#################################################################################
+#
+# http-method: Tags the request with its HTTP method.
+#
+#################################################################################
+CLIENT-HEADER-TAGGER: http-method Tags the request with its HTTP method.
+
+s@^(\w*).*HTTP/\d\.\d\s*$@$1@i
+
+#################################################################################
+#
+# allow-post: Tags POST requests as "ALLOWED-POST".
+#
+#################################################################################
+CLIENT-HEADER-TAGGER: allow-post Tags POST requests as "ALLOWED-POST".
+
+s@^(?:POST)\s+.*\s+HTTP/\d\.\d\s*@ALLOWED-POST@i
+
+#################################################################################
+#
+# complete-url: Tags the request with the whole request URL.
+#
+#################################################################################
+CLIENT-HEADER-TAGGER: complete-url Tags the request with the whole request URL.
+
+s@^\w*\s+(.*)\s+HTTP/\d\.\d\s*$@$1@i
+
+#################################################################################
+#
+# user-agent: Tags the request with the complete User-Agent header.
+#
+#################################################################################
+CLIENT-HEADER-TAGGER: user-agent Tags the request with the complete User-Agent header.
+
+s@^User-Agent:.*@$0@i
+
+#################################################################################
+#
+# content-type: Tags the request with the content type declarded by the server.
+#
+#################################################################################
+SERVER-HEADER-TAGGER: content-type Tags the request with the content type declarded by the server.
+
+s@^Content-Type:\s*([^;]*).*@$1@i
+
+#################################################################################
+#
+# privoxy-control: The taggers create tags with the content of X-Privoxy-Control
+#                  headers, the filters remove said headers.
+#
+#################################################################################
+CLIENT-HEADER-TAGGER: privoxy-control Creates tags with the content of X-Privoxy-Control headers.
+
+s@^X-Privoxy-Control:\s*@@i
+
+CLIENT-HEADER-FILTER: privoxy-control Removes X-Privoxy-Control headers.
+
+s@^X-Privoxy-Control:.*@@i
+
+SERVER-HEADER-TAGGER: privoxy-control Creates tags with the content of X-Privoxy-Control headers.
+
+s@^X-Privoxy-Control:\s*@@i
+
+SERVER-HEADER-FILTER: privoxy-control Removes X-Privoxy-Control headers.
+
+s@^X-Privoxy-Control:.*@@i
+
+
 ############################################################################## 
 #
 #  Revisions   :
 #     $Log: default.filter,v $
+#     Revision 1.51  2007/11/04 16:15:11  fabiankeil
+#     - Add client-header taggers: client-ip-address,
+#       http-method, allow-post, complete-url and user-agent.
+#     - Add server-header tagger: content-type.
+#
+#     Revision 1.50  2007/11/03 15:05:30  fabiankeil
+#     Consistently use an empty line between the description and the PCRS code
+#     and end descriptions with dots. Patch submitted by Simon Ruderich.
+#
+#     Revision 1.49  2007/11/03 14:29:41  fabiankeil
+#     Spelling fixes mostly submitted by Simon Ruderich.
+#
+#     Revision 1.48  2007/10/17 18:11:32  fabiankeil
+#     Add privoxy-control header filters and taggers.
+#
+#     Revision 1.47  2007/10/06 15:45:25  fabiankeil
+#     Let msn hide sponsored links in #at divs.
+#
+#     Revision 1.46  2007/10/06 09:54:13  fabiankeil
+#     - Let msn hide sponsored links in #ar divs.
+#     - Teach banners-by-link not to block the graphs for sf's tracker statistics.
+#
+#     Revision 1.45  2007/08/11 16:54:12  fabiankeil
+#     - Complete the changes from r1.42.
+#     - Make crude-parental less sensitive to the amount of white-space,
+#       add the note that it doesn't work too well again and replace the
+#       DMOZ link with a less confusing explanation.
+#
+#     Revision 1.44  2007/07/18 11:06:56  hal9
+#     Replace notarget with '' in all popups filter to keep from breaking xhmtl per
+#     report from Siegfried Gipp.
+#
+#     Revision 1.43  2007/06/01 14:17:04  fabiankeil
+#     Mention possible delimiter conflicts with variables in dynamic pcrs commands.
+#
 #     Revision 1.42  2007/05/17 15:55:36  fabiankeil
 #     Undo an improperly tested last-minute change
 #     and turn "text-requests" back into "css-requests".