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/·/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ä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://.*)(&&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