| OLD | NEW |
| (Empty) | |
| 1 ////////////////////////////////////////////////////////////////////////////// |
| 2 // |
| 3 // John's No-ADS proxy auto configuration script |
| 4 // http://www.schooner.com/~loverso/no-ads/ |
| 5 // loverso@schooner.com |
| 6 // Questions/help web forum at http://www.network54.com/Hide/Forum/223428 |
| 7 // |
| 8 // Copyright 1996-2004, John LoVerso. All Rights Reserved. |
| 9 // |
| 10 // Permission is given to use and distribute this file, as long as this |
| 11 // copyright message and author notice are not removed. |
| 12 // |
| 13 // No responsibility is taken for any errors on inaccuracies inherent |
| 14 // either to the comments or the code of this program, but if reported |
| 15 // to me, then an attempt will be made to fix them. |
| 16 // |
| 17 // ("no monies exchanged" in Copyright clause removed 11/2001) |
| 18 // |
| 19 var noadsver = "$Id: no-ads.pac,v 5.70 2007/05/11 16:56:01 loverso Exp loverso $
"; |
| 20 |
| 21 // **** |
| 22 // **** If you do not use a proxy to access the Internet, then the following |
| 23 // **** line is already fine. |
| 24 // **** |
| 25 // **** If you use an a proxy to access the Internet, as required by your |
| 26 // **** ISP or firewall, then change the line below, replacing |
| 27 // **** "DIRECT" with "PROXY hostname:port", using the correct hostname:port |
| 28 // **** for your proxy server. |
| 29 // **** |
| 30 var normal = "DIRECT"; |
| 31 |
| 32 // *** |
| 33 // *** If you are not using a blackhold proxy, then you can leave this |
| 34 // *** setting as is. |
| 35 // *** |
| 36 // *** Otherwise, update the next line with the correct hostname:port |
| 37 // *** of your blackhole proxy server. If you are using Larry Wang's |
| 38 // *** BHP for Windows, you need to change the "0.0.0.0" to "127.0.0.1" |
| 39 // *** |
| 40 var blackhole = "PROXY 0.0.0.0:3421"; |
| 41 |
| 42 // *** |
| 43 // *** If you need a different proxy to access local/internal hosts vs. |
| 44 // *** the rest of the Internet, set 'localproxy' to that value. Otherwise, |
| 45 // *** 'localproxy' defaults to the same value as 'normal', so you do |
| 46 // *** not need to change anything in the normal case. |
| 47 // *** |
| 48 // *** Some typical cases: |
| 49 // *** - 'normal' might be one proxy, and 'localproxy' might be another |
| 50 // *** - 'normal' might be a proxy, and 'localproxy' might be "DIRECT" |
| 51 // *** |
| 52 // *** You will also need to change the LOCAL section below by adding |
| 53 // *** rules to match your local/internal hosts. |
| 54 // *** |
| 55 var localproxy = normal; |
| 56 |
| 57 // *** |
| 58 // *** 'bypass' is the preferred proxy setting for when no-ads is inactive. |
| 59 // *** Either use '= normal' or '= localproxy' (or perhaps just "DIRECT"). |
| 60 // *** This only matters when you need to use a localproxy. |
| 61 // *** (You probably don't need to care about this) |
| 62 // *** |
| 63 var bypass = normal; |
| 64 |
| 65 /////////////////////////////////////////////////////////////////////////////// |
| 66 // |
| 67 // This simple kludge uses a mechanism built into most browsers (IE, Netscape, |
| 68 // Mozilla, Firefox, and Opera) on most platforms to block connections to |
| 69 // banner ad servers. |
| 70 // |
| 71 // This mechanism uses the "proxy auto configuration" to blackhole requests |
| 72 // to load ad images without forcing all your traffic through an ad-blocking |
| 73 // proxy server. Of course, unlike ad-blocking proxy servers, this does not |
| 74 // otherwise not strip cookies. |
| 75 // |
| 76 // "Proxy auto configuration" invokes the JavaScript FindProxyForURL function |
| 77 // below each time your browser requests a URL. This works even if you have |
| 78 // JavaScript otherwise disabled in your browser! (Which you should!) |
| 79 // |
| 80 |
| 81 // |
| 82 // Send me your additions or comments. I'll credit you in the file. |
| 83 // (But I've removed all email addresses to stop spam harvesters). |
| 84 // |
| 85 |
| 86 |
| 87 /////////////////////////////////////////////////////////////////////////////// |
| 88 // |
| 89 // These are the basic steps needed to use "no-ads.pac". |
| 90 // Detailed instructions follow below! |
| 91 // |
| 92 // 1. Save this as a file (no-ads.pac) on your local disk |
| 93 // (or, add it to your home page, if you have one) |
| 94 // 2. Select a no-ads "blackhole". |
| 95 // 3. Configure your browser to use this file as it's auto proxy configuration. |
| 96 // 4. Clear your browser's cache |
| 97 // (or else it may still show you ads it has saved on your disk). |
| 98 // |
| 99 |
| 100 |
| 101 /////////////////////////////////////////////////////////////////////////////// |
| 102 // |
| 103 // 1. SAVE THIS FILE |
| 104 // |
| 105 // Copy this file to your local machine; use your home directory (UNIX) |
| 106 // or your Desktop or C:\ directory (Windows). |
| 107 // |
| 108 |
| 109 |
| 110 |
| 111 /////////////////////////////////////////////////////////////////////////////// |
| 112 // |
| 113 // 2. SELECT A NO-ADS BLACKHOLE |
| 114 // |
| 115 // You can skip this section if you are using any version of Internet Explorer. |
| 116 // You can also skip this section for Netscape 7.1, Mozilla 1.4, or |
| 117 // Firefox 1.0 (or later), as they include PAC failover support (but do |
| 118 // read the note in section "2a" below). |
| 119 // |
| 120 // |
| 121 // The basic trick of no-ads is to match the site or URL of annoying web content |
| 122 // and tell your browser to use a proxy that will deny loading of that resource |
| 123 // (image, page, etc). |
| 124 // |
| 125 // A "black-hole" proxy server is one that always denies loading a web page. |
| 126 // ("send it off to a blackhole"). |
| 127 // |
| 128 // When you initially get "no-ads.pac", it is using this as the blackhole: |
| 129 // |
| 130 // "PROXY 0.0.0.0:3421" |
| 131 // |
| 132 // This says to use the local host at a port which nothing should be listening |
| 133 // on. Thus, this is "a server that doesn't repond." |
| 134 // |
| 135 // This is a good default for all systems, and especially Windows. |
| 136 // However, if you are using the Blackhole Proxy Server on Windows, |
| 137 // be sure to change it to "PROXY 127.0.0.1:3421" |
| 138 // |
| 139 // |
| 140 // Some possibilities for the blackhole: |
| 141 // |
| 142 // a. A server that doesn't respond. |
| 143 // |
| 144 // *** This works for all versions of Internet Explorer. |
| 145 // *** This mostly works for Mozilla, Firefox, and Netscape. |
| 146 // |
| 147 // If you do nothing, then this is configured to direct annoying |
| 148 // content to the proxy running on your own host at port 3421. |
| 149 // Since you shouldn't have anything running on that port, that |
| 150 // connection will timeout and the annoying content will never be |
| 151 // loaded. |
| 152 // |
| 153 // Older versions of Netscape wait to connect to the proxy server |
| 154 // (usually it needs to load part of the image to layout the web |
| 155 // page), and then asks if you want to disable the proxy that |
| 156 // doesn't answer. |
| 157 // |
| 158 // Older versions of Mozilla will give an alert saying it couldn't |
| 159 // connect to the proxy server. |
| 160 // |
| 161 // Mozilla 1.4+, Firefox 1.0+ and Netscape 7.1 will only give |
| 162 // you this alert if the whole page being display is blocked, |
| 163 // rather than just an image on that page. Thus, I still |
| 164 // recommend a blackhole proxy even though it isn't needed. |
| 165 // |
| 166 // Opera will disable your auto proxy config if the proxy server |
| 167 // doesn't respond. |
| 168 // |
| 169 // IE doesn't care that the proxy server isn't responding. As |
| 170 // this avoids a connection for annoying content, it is fastest. |
| 171 // |
| 172 // b. A simple, blackhole server |
| 173 // |
| 174 // When needed, I run a simple "server" at port 3421 that denies |
| 175 // all requests. Some options you can use for this: |
| 176 // |
| 177 // - On Windows, you can try Larry Wang's black-hole proxy program: |
| 178 // |
| 179 // http://leisuresuit10.tripod.com/BlackHoleProxy/ |
| 180 // |
| 181 // I can not vouch that his binaries are virus free, but he does |
| 182 // offer the source code. |
| 183 // |
| 184 // - I use this shell script on UNIX; it is invoked via inetd. |
| 185 // /usr/local/lib/noproxy: |
| 186 // |
| 187 // #!/bin/sh |
| 188 // read a |
| 189 // read b |
| 190 // echo HTTP/1.0 501 No Ads Accepted |
| 191 // echo "" |
| 192 // exit |
| 193 // |
| 194 // Add this line to inetd.conf ('kill -HUP' inetd afterwards): |
| 195 // |
| 196 // 3421 stream tcp nowait nobody /usr/local/lib/noproxy noproxy |
| 197 // |
| 198 // This simple script doesn't work on Linux because of the |
| 199 // (IMHO) broken way it's TCP stack works. See the bottom of |
| 200 // http://www.schooner.com/~loverso/no-ads/ for a complete copy |
| 201 // of the `noproxy' shell script. |
| 202 // |
| 203 // If always exec'ing a shell was expensive on your computer |
| 204 // (it isn't on mine), then you could use a "wait"-style Perl |
| 205 // script that would accept() incoming connections. |
| 206 // |
| 207 // - Sean Burke has a black-hole proxy written in Perl script: |
| 208 // |
| 209 // http://www.speech.cs.cmu.edu/~sburke/pub/black_hole_http_serve
r.pl |
| 210 // (This is a standalone server, not run from inetd). |
| 211 // |
| 212 // e. A trick: use an HTTP/1.0 non-proxy server |
| 213 // |
| 214 // An HTTP/1.0 non-proxy server will return a 501 error when |
| 215 // given a proxy request. Thus, just use the address of your |
| 216 // local intranet web server as your blackhole PROXY. |
| 217 // The downside of this is that it will probably also log an |
| 218 // error, which wastes a small amount of resources. |
| 219 // |
| 220 // *** |
| 221 // *** Be sure to update the "blackhole" variable above with a setting of |
| 222 // *** "PROXY hostname:port" that matches your blackhole server!! |
| 223 // *** |
| 224 // |
| 225 // *** |
| 226 // *** If you already use a proxy server to access the WWW, |
| 227 // *** change the "normal" variable above from "DIRECT" to |
| 228 // *** be "PROXY proxy:port" to match your proxy server. |
| 229 // *** |
| 230 |
| 231 |
| 232 /////////////////////////////////////////////////////////////////////////////// |
| 233 // |
| 234 // 3. TO CONFIGURE YOUR BROWSER |
| 235 // |
| 236 // The Proxy Auto Configuration file can be either on the local disk or |
| 237 // accessed from a web server, with the following constraints: |
| 238 // |
| 239 // a. IE4 can only load the PAC from a web server (http:// URL) |
| 240 // b. Netscape, Mozilla, Firefox and IE (5 or later) can load the |
| 241 // PAC from anywhere. |
| 242 // c. Netscape, Mozilla, Firefox and (probably) Opera require the correct |
| 243 // MIME type when loading the PAC from a web server. |
| 244 // |
| 245 // |
| 246 // To set the Proxy Auto Configuration with Netscape, Mozilla, or Firefox: |
| 247 // |
| 248 // 1. Enable Proxy Auto Config: |
| 249 // |
| 250 // For Netsacpe/Mozilla: |
| 251 // |
| 252 // Open "Edit->Preferences" |
| 253 // Select "Advanced" |
| 254 // Select "Proxies" |
| 255 // |
| 256 // For Firefox (1.0): |
| 257 // |
| 258 // Open "Tools->Options" |
| 259 // Select "Coonection Settings" on the General tab: |
| 260 // |
| 261 // Select the "Auto proxy configuration URL" option. |
| 262 // Enter URL or path of where you've saved this file, such as: |
| 263 // |
| 264 // http://yourserver/no-ads.pac |
| 265 // |
| 266 // If you place this on your local disk, you should use a |
| 267 // file: URL such as: |
| 268 // |
| 269 // file:/home/loverso/no-ads.pac (UNIX) |
| 270 // file:///c:/windows/desktop/no-ads.pac (Windows) |
| 271 // |
| 272 // (file:/ and file:// will work in Mozilla, but file:/// is correct |
| 273 // required for Firefox) |
| 274 // |
| 275 // 2. If you are serving this from a web server, these browsers require |
| 276 // the correct MIME type on the file before using it. You must configure |
| 277 // your web server to provide a "application/x-ns-proxy-autoconfig" |
| 278 // MIME type. |
| 279 // |
| 280 // a. For Apache, name the file with a ".pac" extension and add this |
| 281 // line to the http.conf (or the .htaccess file in the same directory): |
| 282 // |
| 283 // AddType application/x-ns-proxy-autoconfig .pac |
| 284 // |
| 285 // b. For IIS (instructions from Kevin Roth) |
| 286 // |
| 287 // Open Internet Services Manager |
| 288 // Right click on the web site (or directory) you wish to change. |
| 289 // Choose Properties |
| 290 // Click the "HTTP Headers" tab |
| 291 // Click the "File Types" button in the "MIME Map" section |
| 292 // Click the "New Type..." button |
| 293 // Enter "pac" for "Associated Extension" |
| 294 // Enter "application/x-ns-proxy-autoconfig" for "Content Type (MIME)" |
| 295 // Click OK to close the Add type dialog, the MIME types dialog, |
| 296 // and the main properties dialog. |
| 297 // |
| 298 // (This is definately needed for NS, but not for IE) |
| 299 // |
| 300 // |
| 301 // To set the Proxy Auto Configuration with IE: |
| 302 // |
| 303 // 1. Enable Proxy Auto Config: |
| 304 // |
| 305 // Open "Tools->Internet Options" |
| 306 // Select "Connections" tab |
| 307 // Click "LAN Settings" |
| 308 // or Choose an entry from "Dial-up settings" and click "Settings" |
| 309 // |
| 310 // On the settings dialog, select "Use automatic configuration script" |
| 311 // Enter the URL of this file in Address field. |
| 312 // |
| 313 // http://yourserver/no-ads.pac |
| 314 // file:///c:/windows/desktop/no-ads.pac (Windows) |
| 315 // |
| 316 // You can only use a file: URL with IE5 (or later). |
| 317 // ("file:///" with with IE versions after 5.0 SP2) |
| 318 // |
| 319 // 2. Fix Security Settings (IMPORTANT): |
| 320 // |
| 321 // Select "Security" tab |
| 322 // Select "Local intranet" |
| 323 // Click "Sites" box |
| 324 // Unselect "include all sites that bypass the proxy server" option |
| 325 // |
| 326 // 3. Disable "Auto Proxy Caching" (IMPORTANT): |
| 327 // (thanks to Kevin Roth for alerting me of this!) |
| 328 // |
| 329 // IE contains a proxy result caching mechanism that will defeat the |
| 330 // ability to block servers that server both ad and non-ad content. |
| 331 // To prevent this, add the registry key described in this MS KB article: |
| 332 // |
| 333 // http://support.microsoft.com/?kbid=271361 |
| 334 // |
| 335 // You can do so by downloading this file and clicking on it to load |
| 336 // it into the registry. This must be done on a per-user basis. |
| 337 // http://www.schooner.com/~loverso/no-ads/IE-no-auto-proxy-cache.reg |
| 338 // |
| 339 // IE doesn't currently check the MIME type of the PAC file. |
| 340 // |
| 341 // To see some notes from MS on PAC in IE, see |
| 342 // http://msdn.microsoft.com/library/periodic/period99/faq0599.htm |
| 343 // (they seem to have removed this URL) |
| 344 // |
| 345 // |
| 346 // To set the Proxy Auto Configuration with Opera 6 (6.04 on Windows tested): |
| 347 // |
| 348 // 1. Enable Proxy Auto Config: |
| 349 // Open the Preferences (Alt-P) |
| 350 // Select "Network" |
| 351 // Click the "Proxy servers" box |
| 352 // Select "Use automatic proxy configuration" |
| 353 // Enter the URL of this file as |
| 354 // |
| 355 // http://yourserver/no-ads.pac |
| 356 // file://c:/windows/desktop/no-ads.pac |
| 357 // |
| 358 // (file:/// might be needed; I've not tested Opera lately) |
| 359 // |
| 360 // 2. You must use a blackhole proxy for Opera (it will not work with an |
| 361 // address of a server that does not respond). |
| 362 // |
| 363 // 3. Be sure to clear the cache and exit/restart Opera. |
| 364 // |
| 365 |
| 366 |
| 367 /////////////////////////////////////////////////////////////////////////////// |
| 368 // |
| 369 // 4. CLEAR YOUR BROWSER'S CACHE |
| 370 // |
| 371 // For Internet Explorer: |
| 372 // |
| 373 // Open "Tools->Internet Options" |
| 374 // Select "Delete Files" under "Temporary Internet Files" |
| 375 // Click "OK" |
| 376 // |
| 377 // For Mozilla/Netscape Navigator: |
| 378 // |
| 379 // Open "Edit->Preferences" |
| 380 // Select "Advanced" |
| 381 // Select "Proxies" |
| 382 // Click "Clear Disk Cache" |
| 383 // Click "Clear Memory Cache" |
| 384 // |
| 385 // For Firefox: |
| 386 // |
| 387 // Open "Tools->Options" |
| 388 // Select the "Privay" tab |
| 389 // Scroll down or go to the "Cache" section |
| 390 // Click "Clear" |
| 391 // |
| 392 // For Opera: |
| 393 // |
| 394 // Open "File->Preferences" |
| 395 // Select "History and cache" |
| 396 // Click "Empty now" |
| 397 // |
| 398 |
| 399 |
| 400 /////////////////////////////////////////////////////////////////////////////// |
| 401 // |
| 402 // To see the definition of this page's JavaScript contents, see |
| 403 // |
| 404 // http://home.netscape.com/eng/mozilla/2.0/relnotes/demo/proxy-live.html |
| 405 // |
| 406 // Microsoft includes this in their KB article: |
| 407 // |
| 408 // http://support.microsoft.com/support/kb/articles/Q209/2/66.ASP |
| 409 // |
| 410 // Special PAC functions: |
| 411 // Hostname: |
| 412 // isPlainHostName(host) |
| 413 // dnsDomainIs(host, domain) |
| 414 // localHostOrDomainIs(host, hostdom) |
| 415 // isResolvable(host) |
| 416 // isInNet(host, pattern, mask) |
| 417 // Utility: |
| 418 // dnsResolve(host) |
| 419 // myIpAddress() |
| 420 // dnsDomainLevels(host) |
| 421 // URL: |
| 422 // shExpMatch(str, shexp) |
| 423 // Time: |
| 424 // weekdayRange(wd1, wd2, gmt) |
| 425 // dateRange(...) |
| 426 // timeRange(...) |
| 427 // |
| 428 // Other functions and methods that may work: |
| 429 // http://developer.netscape.com/docs/manuals/communicator/jsref/win1.htm |
| 430 // Note that "alert()" only works with Netscape4 and IE, and Mozilla 1.4+. |
| 431 // |
| 432 // NOTE: |
| 433 // isInNet() will resolve a hostname to an IP address, and cause |
| 434 // hangs on Mozilla/Firefox. Currently, these are stubbed out and replaced |
| 435 // with shExpMatch(host, "a.b.c.*"), which doesn't do the same thing, |
| 436 // but is sufficient for these purposes. |
| 437 // |
| 438 // Additional Mozilla/Firefox comments: |
| 439 // |
| 440 // All the above PAC functions are implemented in JavaScript, |
| 441 // and are added to the body of your PAC file when it is loaded. |
| 442 // See the "components/nsProxyAutoConfig.js" browser install |
| 443 // directory. |
| 444 // |
| 445 // - shExpMatch() is implemented as three pattern.replaces() |
| 446 // followed by a call to RegExp() (SLOW) |
| 447 // - isPlainHostname() just checks for lack of "." in the string |
| 448 // - dnsDomainIs() just matches strings exactly |
| 449 // - alert() is bound to this.proxyAlert(), which displays a message |
| 450 // in the JavaScript console window |
| 451 |
| 452 /////////////////////////////////////////////////////////////////////////////// |
| 453 // |
| 454 // Regular Expressions |
| 455 // |
| 456 // Angus Turnbull pointed out the JavaScript 1.2 RE operators to me. |
| 457 // These should work in NS4 and IE4 (or later), but I have only tested on |
| 458 // Mozilla (1.3), IE5.5, and IE6. PLEASE TELL ME IF IT WORKS FOR YOU! |
| 459 // |
| 460 // A good introduction is at: |
| 461 // http://www.evolt.org/article/Regular_Expressions_in_JavaScript/17/36435/ |
| 462 // Some references: |
| 463 // (old Netscape documentation is gone) |
| 464 // http://devedge.netscape.com/library/manuals/2000/javascript/1.5/referenc
e/regexp.html |
| 465 // http://developer.netscape.com/docs/manuals/js/client/jsref/regexp.htm |
| 466 // http://www.webreference.com/js/column5/ |
| 467 // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script5
6/html/js56jsobjRegExpression.asp |
| 468 // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script5
6/html/js56jsgrpRegExpSyntax.asp |
| 469 // Real-time evaluator: |
| 470 // http://www.cuneytyilmaz.com/prog/jrx/ |
| 471 // |
| 472 // I'm slowly replacing multiple glob patterns with regexps. |
| 473 // By using RE literals of /.../ rather than the constructor 'new RegExp()', |
| 474 // the regexps should be compiled as no-ads.pac is loaded. |
| 475 // |
| 476 // Important notes: |
| 477 // - if using the constructor, \ needs to be quoted; thus "\\." is used |
| 478 // to match a literal '.'. In the RE literal form, I need to end up |
| 479 // quoting any / for a URL path. |
| 480 // - Avoid these for now; they are broken or not supported in "older" |
| 481 // browsers such as NS4 and IE4: |
| 482 // - look-aheads (?=pat) |
| 483 // - non-greedy ? - a ? that follows *,+,?, and {}; (s)? is NOT non-greedy |
| 484 // |
| 485 |
| 486 // matches several common URL paths for ad images: |
| 487 // such as: /banner/ /..._banner/ /banner_... |
| 488 // but matches several words and includes plurals |
| 489 var re_banner = /\/(.*_){0,1}(ad|adverts?|adimage|adframe|adserver|admentor|advi
ew|banner|popup|popunder)(s)?[_.\/]/i; |
| 490 |
| 491 // matches host names staring with "ad" but not (admin|add|adsl) |
| 492 // or any hostname starting with "pop", "clicks", and "cash" |
| 493 // or any hostname containing "banner" |
| 494 // ^(ad(s)?.{0,4}\.|pop|click|cash|[^.]*banner|[^.]*adserv) |
| 495 // ^(ad(?!(min|sl|d\.))|pop|click|cash|[^.]*banner|[^.]*adserv) |
| 496 // ^(ad(?!(min|sl|d\.))|pop|click|cash|[^.]*banner|[^.]*adserv|.*\.ads\.) |
| 497 var re_adhost = /^(www\.)?(ad(?!(ult|obe.*|min|sl|d|olly.*))|tology|pop|click|ca
sh|[^.]*banner|[^.]*adserv|.+\.ads?\.)/i; |
| 498 |
| 499 // neg: |
| 500 // admin.foobar.com |
| 501 // add.iahoo.com |
| 502 // adsl.allow.com |
| 503 // administration.all.net |
| 504 // pos: |
| 505 // fire.ads.ighoo.com |
| 506 // ads.foo.org |
| 507 // ad0121.aaaa.com |
| 508 // adserver.goo.biz |
| 509 // popup.foo.bar |
| 510 |
| 511 /////////////////////////////////////////////////////////////////////////////// |
| 512 |
| 513 var isActive = 1; |
| 514 |
| 515 function FindProxyForURL(url, host) |
| 516 { |
| 517 // debug |
| 518 // alert("checking: url=" + url + ", host=" + host); |
| 519 |
| 520 // Excellent kludge from Sean M. Burke: |
| 521 // Enable or disable no-ads for the current browser session. |
| 522 // |
| 523 // To disable, visit this URL: http://no-ads.int/off |
| 524 // To re-enable, visit this URL: http://no-ads.int/on |
| 525 // |
| 526 // (this will not work with Mozilla or Opera if the alert()s are present) |
| 527 // |
| 528 // This happens before lowercasing the URL, so make sure you use lowercase! |
| 529 // |
| 530 if (shExpMatch(host, "no-ads.int")) { |
| 531 if (shExpMatch(url, "*/on*")) { |
| 532 isActive = 1; |
| 533 //alert("no-ads is enabled.\n" + url); |
| 534 } else if (shExpMatch(url, "*/off*")) { |
| 535 isActive = 0; |
| 536 //alert("no-ads has been disabled.\n" + url); |
| 537 } else if (shExpMatch(url, "*no-ads.int/")) { |
| 538 alert("no-ads is "+(isActive ? "enabled" : "disabled")+".\n" + url); |
| 539 } else { |
| 540 alert("no-ads unknown option.\n" + url); |
| 541 } |
| 542 |
| 543 return blackhole; |
| 544 } |
| 545 |
| 546 if (!isActive) { |
| 547 // alert("allowing (not active): return " + bypass); |
| 548 return bypass; |
| 549 } |
| 550 |
| 551 // Suggestion from Quinten Martens |
| 552 // Make everything lower case. |
| 553 // WARNING: all shExpMatch rules following MUST be lowercase! |
| 554 url = url.toLowerCase(); |
| 555 host = host.toLowerCase(); |
| 556 |
| 557 // |
| 558 // Local/Internal rule |
| 559 // matches to this rule get the 'local' proxy. |
| 560 // Adding rules here enables the use of 'local' |
| 561 // |
| 562 if (0 |
| 563 // LOCAL |
| 564 // add rules such as: |
| 565 // || dnsDomainIs(host, "schooner.com") |
| 566 // || isPlainHostName(host) |
| 567 // or for a single host |
| 568 // || (host == "some-local-host") |
| 569 ) { |
| 570 // alert("allowing (local): return " + localproxy); |
| 571 return localproxy; |
| 572 } |
| 573 |
| 574 // |
| 575 // Whitelist section from InvisiBill |
| 576 // |
| 577 // Add sites here that should never be matched for ads. |
| 578 // |
| 579 if (0 |
| 580 // WHITELIST |
| 581 // To add whitelist domains, simple add a line such as: |
| 582 // || dnsDomainIs(host, "schooner.com") |
| 583 // or for a single host |
| 584 // || (host == "some-host-name") |
| 585 |
| 586 // Note: whitelisting schooner.com will defeat the "is-it-working" |
| 587 // test page at http://www.schooner.com/~loverso/no-ads/ads/ |
| 588 |
| 589 // Apple.com "Switch" ads |
| 590 || shExpMatch(url, "*.apple.com/switch/ads/*") |
| 591 |
| 592 // SprintPCS |
| 593 || dnsDomainIs(host, ".sprintpcs.com") |
| 594 |
| 595 // Lego |
| 596 || dnsDomainIs(host, ".lego.com") |
| 597 |
| 598 // Dell login popups |
| 599 || host == "ecomm.dell.com" |
| 600 |
| 601 || host == "click2tab.mozdev.org" |
| 602 || host == "addons.mozilla.org" |
| 603 |
| 604 // Uncomment for metacrawler |
| 605 // || (host == "clickit.go2net.com") |
| 606 |
| 607 // Wunderground weather station banners |
| 608 || shExpMatch(url, "*banners.wunderground.com/cgi-bin/banner/ban/wxbanne
r*") |
| 609 || shExpMatch(url, "*banners.wunderground.com/weathersticker/*") |
| 610 ) { |
| 611 // alert("allowing (whitelist): return " + normal); |
| 612 return normal; |
| 613 } |
| 614 |
| 615 // To add more sites, simply include them in the correct format. |
| 616 // |
| 617 // The sites below are ones I currently block. Tell me of others you add! |
| 618 |
| 619 if (0 |
| 620 // BLOCK |
| 621 // Block IE4/5 "favicon.ico" fetches |
| 622 // (to avoid being tracked as having bookmarked the site) |
| 623 || shExpMatch(url, "*/favicon.ico") |
| 624 |
| 625 ////// |
| 626 // |
| 627 // Global Section |
| 628 // tries to match common names |
| 629 // |
| 630 |
| 631 // RE for common URL paths |
| 632 || re_banner.test(url) |
| 633 |
| 634 // RE for common adserver hostnames. |
| 635 // The regexp matches all hostnames starting with "ad" that are not |
| 636 // admin|add|adsl |
| 637 // (replaces explicit shExpMatch's below) |
| 638 || re_adhost.test(host) |
| 639 |
| 640 // || (re_adhost.test(host) |
| 641 // && !( |
| 642 // shExpMatch(host, "add*") |
| 643 // || shExpMatch(host, "admin*") |
| 644 // || shExpMatch(host, "adsl*") |
| 645 // ) |
| 646 // ) |
| 647 // // or any subdomain "ads" |
| 648 // || (dnsDomainLevels(host) > 2 && shExpMatch(host, "*.ads.*")) |
| 649 |
| 650 ////// |
| 651 // |
| 652 // banner/ad organizations |
| 653 // Just delete the entire namespace |
| 654 // |
| 655 |
| 656 // doubleclick |
| 657 || dnsDomainIs(host, ".doubleclick.com") |
| 658 || dnsDomainIs(host, ".doubleclick.net") |
| 659 || dnsDomainIs(host, ".rpts.net") |
| 660 || dnsDomainIs(host, ".2mdn.net") |
| 661 || dnsDomainIs(host, ".2mdn.com") |
| 662 |
| 663 // these set cookies |
| 664 || dnsDomainIs(host, ".globaltrack.com") |
| 665 || dnsDomainIs(host, ".burstnet.com") |
| 666 || dnsDomainIs(host, ".adbureau.net") |
| 667 || dnsDomainIs(host, ".targetnet.com") |
| 668 || dnsDomainIs(host, ".humanclick.com") |
| 669 || dnsDomainIs(host, ".linkexchange.com") |
| 670 |
| 671 || dnsDomainIs(host, ".fastclick.com") |
| 672 || dnsDomainIs(host, ".fastclick.net") |
| 673 |
| 674 // one whole class C full of ad servers (fastclick) |
| 675 // XXX this might need the resolver |
| 676 // || isInNet(host, "205.180.85.0", "255.255.255.0") |
| 677 || shExpMatch(host, "205.180.85.*") |
| 678 |
| 679 // these use 1x1 images to track you |
| 680 || dnsDomainIs(host, ".admonitor.com") |
| 681 || dnsDomainIs(host, ".focalink.com") |
| 682 |
| 683 || dnsDomainIs(host, ".websponsors.com") |
| 684 || dnsDomainIs(host, ".advertising.com") |
| 685 || dnsDomainIs(host, ".cybereps.com") |
| 686 || dnsDomainIs(host, ".postmasterdirect.com") |
| 687 || dnsDomainIs(host, ".mediaplex.com") |
| 688 || dnsDomainIs(host, ".adtegrity.com") |
| 689 || dnsDomainIs(host, ".bannerbank.ru") |
| 690 || dnsDomainIs(host, ".bannerspace.com") |
| 691 || dnsDomainIs(host, ".theadstop.com") |
| 692 || dnsDomainIs(host, ".l90.com") |
| 693 || dnsDomainIs(host, ".webconnect.net") |
| 694 || dnsDomainIs(host, ".avenuea.com") |
| 695 || dnsDomainIs(host, ".flycast.com") |
| 696 || dnsDomainIs(host, ".engage.com") |
| 697 || dnsDomainIs(host, ".imgis.com") |
| 698 || dnsDomainIs(host, ".datais.com") |
| 699 || dnsDomainIs(host, ".link4ads.com") |
| 700 || dnsDomainIs(host, ".247media.com") |
| 701 || dnsDomainIs(host, ".hightrafficads.com") |
| 702 || dnsDomainIs(host, ".tribalfusion.com") |
| 703 || dnsDomainIs(host, ".rightserve.net") |
| 704 || dnsDomainIs(host, ".admaximize.com") |
| 705 || dnsDomainIs(host, ".valueclick.com") |
| 706 || dnsDomainIs(host, ".adlibris.se") |
| 707 || dnsDomainIs(host, ".vibrantmedia.com") |
| 708 || dnsDomainIs(host, ".coremetrics.com") |
| 709 || dnsDomainIs(host, ".vx2.cc") |
| 710 || dnsDomainIs(host, ".webpower.com") |
| 711 || dnsDomainIs(host, ".everyone.net") |
| 712 || dnsDomainIs(host, ".zedo.com") |
| 713 || dnsDomainIs(host, ".bigbangmedia.com") |
| 714 || dnsDomainIs(host, ".ad-annex.com") |
| 715 || dnsDomainIs(host, ".iwdirect.com") |
| 716 || dnsDomainIs(host, ".adlink.de") |
| 717 || dnsDomainIs(host, ".bidclix.net") |
| 718 || dnsDomainIs(host, ".webclients.net") |
| 719 || dnsDomainIs(host, ".linkcounter.com") |
| 720 || dnsDomainIs(host, ".sitetracker.com") |
| 721 || dnsDomainIs(host, ".adtrix.com") |
| 722 || dnsDomainIs(host, ".netshelter.net") |
| 723 || dnsDomainIs(host, ".rn11.com") |
| 724 // http://vpdc.ru4.com/content/images/66/011.gif |
| 725 || dnsDomainIs(host, ".ru4.com") |
| 726 // no '.' for rightmedia.net |
| 727 || dnsDomainIs(host, "rightmedia.net") |
| 728 || dnsDomainIs(host, ".casalemedia.com") |
| 729 || dnsDomainIs(host, ".casalemedia.com") |
| 730 |
| 731 // C-J |
| 732 || dnsDomainIs(host, ".commission-junction.com") |
| 733 || dnsDomainIs(host, ".qkimg.net") |
| 734 // emjcd.com ... many others |
| 735 |
| 736 // */adv/* |
| 737 || dnsDomainIs(host, ".bluestreak.com") |
| 738 |
| 739 // Virtumundo -- as annoying as they get |
| 740 || dnsDomainIs(host, ".virtumundo.com") |
| 741 || dnsDomainIs(host, ".treeloot.com") |
| 742 || dnsDomainIs(host, ".memberprize.com") |
| 743 |
| 744 // internetfuel and _some_ of the sites they redirect to |
| 745 // (more internetfuel - from Sam G) |
| 746 || dnsDomainIs(host, ".internetfuel.net") |
| 747 || dnsDomainIs(host, ".internetfuel.com") |
| 748 || dnsDomainIs(host, ".peoplecaster.com") |
| 749 || dnsDomainIs(host, ".cupidsdatabase.com") |
| 750 || dnsDomainIs(host, ".automotive-times.com") |
| 751 || dnsDomainIs(host, ".healthy-lifetimes.com") |
| 752 || dnsDomainIs(host, ".us-world-business.com") |
| 753 || dnsDomainIs(host, ".internet-2-web.com") |
| 754 || dnsDomainIs(host, ".my-job-careers.com") |
| 755 || dnsDomainIs(host, ".freeonline.com") |
| 756 || dnsDomainIs(host, ".exitfuel.com") |
| 757 || dnsDomainIs(host, ".netbroadcaster.com") |
| 758 || dnsDomainIs(host, ".spaceports.com") |
| 759 || dnsDomainIs(host, ".mircx.com") |
| 760 || dnsDomainIs(host, ".exitchat.com") |
| 761 || dnsDomainIs(host, ".atdmt.com") |
| 762 || dnsDomainIs(host, ".partner2profit.com") |
| 763 || dnsDomainIs(host, ".centrport.net") |
| 764 || dnsDomainIs(host, ".centrport.com") |
| 765 || dnsDomainIs(host, ".rampidads.com") |
| 766 |
| 767 ////// |
| 768 // |
| 769 // banner servers |
| 770 // (typically these set cookies or serve animated ads) |
| 771 // |
| 772 |
| 773 || dnsDomainIs(host, "commonwealth.riddler.com") |
| 774 || dnsDomainIs(host, "banner.freeservers.com") |
| 775 || dnsDomainIs(host, "usads.futurenet.com") |
| 776 || dnsDomainIs(host, "banners.egroups.com") |
| 777 || dnsDomainIs(host, "ngadclient.hearme.com") |
| 778 || dnsDomainIs(host, "affiliates.allposters.com") |
| 779 || dnsDomainIs(host, "adincl.go2net.com") |
| 780 || dnsDomainIs(host, "webads.bizservers.com") |
| 781 || dnsDomainIs(host, ".addserv.com") |
| 782 || dnsDomainIs(host, ".falkag.net") |
| 783 || (host == "promote.pair.com") |
| 784 |
| 785 // marketwatch.com (flash ads), but CSS get loaded |
| 786 || (dnsDomainIs(host, ".mktw.net") |
| 787 && !shExpMatch(url, "*/css/*")) |
| 788 || dnsDomainIs(host, ".cjt1.net") |
| 789 || dnsDomainIs(host, ".bns1.net") |
| 790 |
| 791 // "undergroundonline" |
| 792 // comes from iframe with this url: http://mediamgr.ugo.com/html.ng/size
=728x90&affiliate=megagames&channel=games&subchannel=pc&Network=affiliates&ratin
g=g |
| 793 || dnsDomainIs(host, "image.ugo.com") |
| 794 || dnsDomainIs(host, "mediamgr.ugo.com") |
| 795 |
| 796 // web ads and "cheap Long Distance" |
| 797 || dnsDomainIs(host, "zonecms.com") |
| 798 || dnsDomainIs(host, "zoneld.com") |
| 799 |
| 800 // AOL |
| 801 || dnsDomainIs(host, ".atwola.com") |
| 802 || dnsDomainIs(host, "toolbar.aol.com") |
| 803 |
| 804 // animated ads shown at techbargains |
| 805 || (dnsDomainIs(host, ".overstock.com") |
| 806 && shExpMatch(url, "*/linkshare/*")) |
| 807 || (dnsDomainIs(host, ".supermediastore.com") |
| 808 && shExpMatch(url, "*/lib/supermediastore/*")) |
| 809 || (dnsDomainIs(host, ".shop4tech.com") |
| 810 && shExpMatch(url, "*/assets/*")) |
| 811 || (dnsDomainIs(host, ".softwareandstuff.com") |
| 812 && shExpMatch(url, "*/media/*")) |
| 813 || (dnsDomainIs(host, ".buy.com") |
| 814 && shExpMatch(url, "*/affiliate/*")) |
| 815 |
| 816 || (dnsDomainIs(host, "pdaphonehome.com") |
| 817 && (shExpMatch(url, "*/pocketpcmagbest.gif") |
| 818 || shExpMatch(url, "*/link-msmobiles.gif"))) |
| 819 || (dnsDomainIs(host, "ppc4you.com") |
| 820 && shExpMatch(url, "*/ppc_top_sites.gif")) |
| 821 |
| 822 // more animated ads... these really drive me crazy |
| 823 || (dnsDomainIs(host, ".freewarepalm.com") |
| 824 && shExpMatch(url, "*/sponsors/*")) |
| 825 |
| 826 ////// |
| 827 // |
| 828 // popups/unders |
| 829 // |
| 830 |
| 831 || dnsDomainIs(host, "remotead.cnet.com") |
| 832 || dnsDomainIs(host, ".1st-dating.com") |
| 833 || dnsDomainIs(host, ".mousebucks.com") |
| 834 || dnsDomainIs(host, ".yourfreedvds.com") |
| 835 || dnsDomainIs(host, ".popupsavings.com") |
| 836 || dnsDomainIs(host, ".popupmoney.com") |
| 837 || dnsDomainIs(host, ".popuptraffic.com") |
| 838 || dnsDomainIs(host, ".popupnation.com") |
| 839 || dnsDomainIs(host, ".infostart.com") |
| 840 || dnsDomainIs(host, ".popupad.net") |
| 841 || dnsDomainIs(host, ".usapromotravel.com") |
| 842 || dnsDomainIs(host, ".goclick.com") |
| 843 || dnsDomainIs(host, ".trafficwave.net") |
| 844 || dnsDomainIs(host, ".popupad.net") |
| 845 || dnsDomainIs(host, ".paypopup.com") |
| 846 |
| 847 // Popups from ezboard |
| 848 || dnsDomainIs(host, ".greenreaper.com") |
| 849 || dnsDomainIs(host, ".spewey.com") |
| 850 || dnsDomainIs(host, ".englishharbour.com") |
| 851 || dnsDomainIs(host, ".casino-trade.com") |
| 852 || dnsDomainIs(host, "got2goshop.com") |
| 853 // more ezboard crud (from Miika Asunta) |
| 854 || dnsDomainIs(host, ".addynamix.com") |
| 855 || dnsDomainIs(host, ".trafficmp.com") |
| 856 || dnsDomainIs(host, ".makingmoneyfromhome.net") |
| 857 || dnsDomainIs(host, ".leadcart.com") |
| 858 |
| 859 // http://www.power-mark.com/js/popunder.js |
| 860 || dnsDomainIs(host, ".power-mark.com") |
| 861 |
| 862 ////// |
| 863 // |
| 864 // User tracking (worse than ads) && hit counting "services" |
| 865 // |
| 866 |
| 867 // "web trends live" |
| 868 || dnsDomainIs(host, ".webtrendslive.com") |
| 869 || dnsDomainIs(host, ".wtlive.com") |
| 870 |
| 871 // 1x1 tracking images |
| 872 // ** (but also used in some pay-for-clicks that I want to follow, |
| 873 // ** so disabled for now. 9/2001) |
| 874 // || dnsDomainIs(host, "service.bfast.com") |
| 875 |
| 876 // one whole class C full of ad servers |
| 877 // XXX this might need the resolver |
| 878 // || isInNet(host, "66.40.16.0", "255.255.255.0") |
| 879 || shExpMatch(host, "66.40.16.*") |
| 880 |
| 881 || dnsDomainIs(host, ".web-stat.com") |
| 882 || dnsDomainIs(host, ".superstats.com") |
| 883 || dnsDomainIs(host, ".allhits.ru") |
| 884 || dnsDomainIs(host, ".list.ru") |
| 885 || dnsDomainIs(host, ".counted.com") |
| 886 || dnsDomainIs(host, ".rankyou.com") |
| 887 || dnsDomainIs(host, ".clickcash.com") |
| 888 || dnsDomainIs(host, ".clickbank.com") |
| 889 || dnsDomainIs(host, ".paycounter.com") |
| 890 || dnsDomainIs(host, ".cashcount.com") |
| 891 || dnsDomainIs(host, ".clickedyclick.com") |
| 892 || dnsDomainIs(host, ".clickxchange.com") |
| 893 || dnsDomainIs(host, ".sitestats.com") |
| 894 || dnsDomainIs(host, ".site-stats.com") |
| 895 || dnsDomainIs(host, ".hitbox.com") |
| 896 || dnsDomainIs(host, ".exitdirect.com") |
| 897 || dnsDomainIs(host, ".realtracker.com") |
| 898 || dnsDomainIs(host, ".etracking.com") |
| 899 || dnsDomainIs(host, ".livestat.com") |
| 900 || dnsDomainIs(host, ".spylog.com") |
| 901 || dnsDomainIs(host, ".freestats.com") |
| 902 || dnsDomainIs(host, ".addfreestats.com") |
| 903 || dnsDomainIs(host, ".topclicks.net") |
| 904 || dnsDomainIs(host, ".mystat.pl") |
| 905 || dnsDomainIs(host, ".hitz4you.de") |
| 906 || dnsDomainIs(host, ".hitslink.com") |
| 907 || dnsDomainIs(host, ".thecounter.com") |
| 908 || dnsDomainIs(host, ".roiservice.com") |
| 909 || dnsDomainIs(host, ".overture.com") |
| 910 || dnsDomainIs(host, ".xiti.com") |
| 911 || dnsDomainIs(host, ".cj.com") |
| 912 || dnsDomainIs(host, ".anrdoezrs.net") |
| 913 || dnsDomainIs(host, ".hey.it") |
| 914 || dnsDomainIs(host, ".ppctracking.net") |
| 915 || dnsDomainIs(host, ".darkcounter.com") |
| 916 || dnsDomainIs(host, ".2o7.com") |
| 917 || dnsDomainIs(host, ".2o7.net") |
| 918 || dnsDomainIs(host, ".gostats.com") |
| 919 || dnsDomainIs(host, ".everstats.com") |
| 920 || dnsDomainIs(host, ".onestat.com") |
| 921 || dnsDomainIs(host, ".statcounter.com") |
| 922 || dnsDomainIs(host, ".trafic.ro") |
| 923 || dnsDomainIs(host, ".exitexchange.com") |
| 924 |
| 925 // clickability, via CNN |
| 926 || dnsDomainIs(host, ".clickability.com") |
| 927 || dnsDomainIs(host, ".savethis.com") |
| 928 |
| 929 ////// |
| 930 // |
| 931 // Dead domain parking |
| 932 // |
| 933 || dnsDomainIs(host, ".netster.com") |
| 934 |
| 935 ////// |
| 936 // |
| 937 // Search engine "optimizers" |
| 938 // |
| 939 || dnsDomainIs(host, ".searchmarketing.com") |
| 940 |
| 941 ////// |
| 942 // |
| 943 // Spyware/worms |
| 944 // |
| 945 |
| 946 || dnsDomainIs(host, ".friendgreetings.com") |
| 947 || dnsDomainIs(host, ".permissionedmedia.com") |
| 948 || dnsDomainIs(host, ".searchbarcash.com") |
| 949 |
| 950 ////// |
| 951 // |
| 952 // "Surveys" |
| 953 // |
| 954 |
| 955 || dnsDomainIs(host, ".zoomerang.com") |
| 956 |
| 957 ////// |
| 958 // |
| 959 // "Casino" ads (scams) |
| 960 // |
| 961 |
| 962 || dnsDomainIs(host, ".aceshigh.com") |
| 963 || dnsDomainIs(host, ".idealcasino.net") |
| 964 || dnsDomainIs(host, ".casinobar.net") |
| 965 || dnsDomainIs(host, ".casinoionair.com") |
| 966 |
| 967 || (dnsDomainIs(host, ".go2net.com") |
| 968 && shExpMatch(url, "*adclick*") |
| 969 ) |
| 970 |
| 971 ////// |
| 972 // |
| 973 // Spammers |
| 974 // |
| 975 |
| 976 || dnsDomainIs(host, ".licensed-collectibles.com") |
| 977 || dnsDomainIs(host, ".webdesignprofessional.com") |
| 978 |
| 979 ////// |
| 980 // |
| 981 // Directed at extra annoying places |
| 982 // |
| 983 |
| 984 // Attempts to download ad-supported spyware without asking first |
| 985 || dnsDomainIs(host, ".gator.com") |
| 986 |
| 987 // ebay |
| 988 || ((dnsDomainIs(host, "pics.ebay.com") |
| 989 || dnsDomainIs(host, "pics.ebaystatic.com")) |
| 990 && shExpMatch(url, "*/pics/mops/*/*[0-9]x[0-9]*") |
| 991 ) |
| 992 || (dnsDomainIs(host, "ebayobjects.com") |
| 993 && shExpMatch(url, "*search/keywords*") |
| 994 ) |
| 995 || dnsDomainIs(host, "admarketplace.com") |
| 996 || dnsDomainIs(host, "admarketplace.net") |
| 997 |
| 998 // Bravenet & Ezboard |
| 999 || (dnsDomainIs(host, ".ezboard.com") |
| 1000 && shExpMatch(url, "*/bravenet/*") |
| 1001 ) |
| 1002 || (dnsDomainIs(host, ".bravenet.com") |
| 1003 && ( shExpMatch(host, "*counter*") |
| 1004 || shExpMatch(url, "*/jsbanner*") |
| 1005 || shExpMatch(url, "*/bravenet/*") |
| 1006 ) |
| 1007 ) |
| 1008 |
| 1009 // GeoCities |
| 1010 // (checking "toto" from Prakash Persaud) |
| 1011 || (( dnsDomainIs(host,"geo.yahoo.com") |
| 1012 || dnsDomainIs(host,".geocities.com")) |
| 1013 && ( |
| 1014 shExpMatch(url,"*/toto?s*") |
| 1015 || shExpMatch(url, "*geocities.com/js_source*") |
| 1016 || dnsDomainIs(host, "visit.geocities.com") |
| 1017 ) |
| 1018 ) |
| 1019 |
| 1020 // Yahoo ads (direct and via Akamai) |
| 1021 // http://us.a1.yimg.com/us.yimg.com/a/... |
| 1022 || (dnsDomainIs(host,"yimg.com") |
| 1023 && ( shExpMatch(url,"*yimg.com/a/*") |
| 1024 || shExpMatch(url,"*yimg.com/*/adv/*") |
| 1025 ) |
| 1026 ) |
| 1027 // "eyewonder" ads at Yahoo |
| 1028 || dnsDomainIs(host,"qz3.net") |
| 1029 || dnsDomainIs(host,".eyewonder.com") |
| 1030 |
| 1031 // background ad images |
| 1032 || dnsDomainIs(host,"buzzcity.com") |
| 1033 |
| 1034 // FortuneCity - ads and tracking |
| 1035 || (dnsDomainIs(host,".fortunecity.com") |
| 1036 && ( shExpMatch(url,"*/js/adscript*") |
| 1037 || shExpMatch(url,"*/js/fctrack*") |
| 1038 ) |
| 1039 ) |
| 1040 |
| 1041 // zdnet |
| 1042 // tracking webbugs: |
| 1043 // http://gserv.zdnet.com/clear/ns.gif?a000009999999999999+2093 |
| 1044 || (dnsDomainIs(host, ".zdnet.com") |
| 1045 && ( dnsDomainIs(host, "ads3.zdnet.com") |
| 1046 || host == "gserv.zdnet.com" |
| 1047 || shExpMatch(url, "*/texis/cs/ad.html") |
| 1048 || shExpMatch(url, "*/adverts") |
| 1049 ) |
| 1050 ) |
| 1051 |
| 1052 // cnet |
| 1053 // web bugs and ad redirections |
| 1054 // taken care of by hostname rules: |
| 1055 // http://adimg.com.com/... |
| 1056 // http://adlog.com.com/... |
| 1057 // http://dw.com.com/clear/c.gif |
| 1058 // http://dw.com.com/redir?astid=2&destUrl=http%3A%2F%2Fwww.buy ... |
| 1059 // http://mads.com.com/mac-ad?... |
| 1060 || (host == "dw.com.com" || host == "mads.com.com") |
| 1061 || (dnsDomainIs(host, ".com.com") |
| 1062 && ( host == "dw.com.com" |
| 1063 || host == "mads.com.com" |
| 1064 ) |
| 1065 ) |
| 1066 |
| 1067 // nytimes |
| 1068 || (dnsDomainIs(host, ".nytimes.com") |
| 1069 && shExpMatch(url,"*/adx/*") |
| 1070 ) |
| 1071 |
| 1072 // pop-after |
| 1073 || dnsDomainIs(host, ".unicast.net") |
| 1074 |
| 1075 |
| 1076 // Be Free affiliate ads |
| 1077 || dnsDomainIs(host, ".reporting.net") |
| 1078 || dnsDomainIs(host, ".affliate.net") |
| 1079 || (dnsDomainIs(host, ".akamai.net") |
| 1080 && shExpMatch(url, "*.affiliate.net/*") |
| 1081 ) |
| 1082 |
| 1083 // Infospace.com popunder |
| 1084 // for "webmarket.com" & "shopping.dogpile.com" -- just say no! |
| 1085 || (dnsDomainIs(host, ".infospace.com") |
| 1086 && shExpMatch(url, "*/goshopping/*") |
| 1087 ) |
| 1088 || dnsDomainIs(host, ".webmarket.com") |
| 1089 || dnsDomainIs(host, "shopping.dogpile.com") |
| 1090 |
| 1091 // goto.com popunder for information.gopher.com |
| 1092 || dnsDomainIs(host, "information.gopher.com") |
| 1093 |
| 1094 // About.com popunder and floating ad bar |
| 1095 || (dnsDomainIs(host, ".about.com") |
| 1096 && (0 |
| 1097 || shExpMatch(url, "*/sprinks/*") |
| 1098 || shExpMatch(url, "*about.com/0/js/*") |
| 1099 || shExpMatch(url, "*about.com/f/p/*") |
| 1100 ) |
| 1101 ) |
| 1102 |
| 1103 // Dell |
| 1104 || (dnsDomainIs(host, ".dell.com") |
| 1105 && shExpMatch(url, "*/images/affiliates/*") |
| 1106 ) |
| 1107 |
| 1108 // IFilm iframes |
| 1109 || (dnsDomainIs(host, ".ifilm.com") |
| 1110 && (shExpMatch(url, "*/partners/*") |
| 1111 || shExpMatch(url, "*/redirect*") |
| 1112 ) |
| 1113 ) |
| 1114 |
| 1115 // tomshardware |
| 1116 // they are most annoying: |
| 1117 // - cookies on their background images to track you |
| 1118 // - looping shockwave ads |
| 1119 // this kills most of the crud |
| 1120 // || isInNet(host, "216.92.21.0", "255.255.255.0") |
| 1121 || ((dnsDomainIs(host, ".tomshardware.com") |
| 1122 || shExpMatch(host, "216.92.21.*")) |
| 1123 && ( shExpMatch(url, "*/cgi-bin/banner*") |
| 1124 || shExpMatch(url, "*/cgi-bin/bd.m*") |
| 1125 || shExpMatch(url, "*/images/banner/*") |
| 1126 ) |
| 1127 ) |
| 1128 |
| 1129 || shExpMatch(url, "*mapsonus.com/ad.images*") |
| 1130 |
| 1131 // Slashdot: added these when I saw hidden 1x1 images with cookies |
| 1132 || dnsDomainIs(host, "adfu.blockstackers.com") |
| 1133 || (dnsDomainIs(host, "slashdot.org") |
| 1134 && ( |
| 1135 shExpMatch(url, "*/slashdot/pc.gif*") |
| 1136 || shExpMatch(url, "*/pagecount.gif*") |
| 1137 || shExpMatch(url, "*/adlog.pl*") |
| 1138 ) |
| 1139 ) |
| 1140 || dnsDomainIs(host, "googlesyndication.com") |
| 1141 || dnsDomainIs(host, "google-analytics.com") |
| 1142 |
| 1143 // it-aint-cool.com |
| 1144 || (dnsDomainIs(host, "aintitcool.com") |
| 1145 && ( |
| 1146 shExpMatch(url, "*/newline/*") |
| 1147 || shExpMatch(url, "*/drillteammedia/*") |
| 1148 || shExpMatch(url, "*/foxsearchlight/*") |
| 1149 || shExpMatch(url, "*/media/aol*") |
| 1150 || shExpMatch(url, "*swf") |
| 1151 ) |
| 1152 ) |
| 1153 |
| 1154 // Staples & CrossMediaServices |
| 1155 || (dnsDomainIs(host, ".staples.com") |
| 1156 && shExpMatch(url, "*/pixeltracker/*") |
| 1157 ) |
| 1158 || dnsDomainIs(host, "pt.crossmediaservices.com") |
| 1159 |
| 1160 // OfficeMax affiliate art (affArt->affart because of toLowerCase) |
| 1161 || (dnsDomainIs(host, ".officemax.com") |
| 1162 && shExpMatch(url, "*/affart/*") |
| 1163 ) |
| 1164 |
| 1165 // complicated JavaScript for directed ads! |
| 1166 // 1/5/2004: allow /js/ as they now use it for graphs |
| 1167 // || (dnsDomainIs(host, ".anandtech.com") |
| 1168 // && (shExpMatch(url,"*/js/*") |
| 1169 // || shExpMatch(url,"*/bnr_*") |
| 1170 // ) |
| 1171 // ) |
| 1172 |
| 1173 // hardocp |
| 1174 // http://65.119.30.151/UploadFilesForNewegg/onlineads/newegg728hardocp.
swf |
| 1175 || (host == "hera.hardocp.com") |
| 1176 || shExpMatch(url,"*/onlineads/*") |
| 1177 |
| 1178 // complicated JavaScript for gliding ads! |
| 1179 || (dnsDomainIs(host, ".fatwallet.com") |
| 1180 && shExpMatch(url,"*/js/*") |
| 1181 ) |
| 1182 |
| 1183 // cnet ads |
| 1184 || dnsDomainIs(host, "promo.search.com") |
| 1185 |
| 1186 // IMDB celeb photos |
| 1187 // (Photos/CMSIcons->photos/cmsicons because of toLowerCase) |
| 1188 || (dnsDomainIs(host, "imdb.com") |
| 1189 && ( shExpMatch(url, "*/photos/cmsicons/*") |
| 1190 || shExpMatch(url, "*/icons/*/celeb/*") |
| 1191 || shExpMatch(url, "*.swf") |
| 1192 ) |
| 1193 ) |
| 1194 // incredibly annoying IMDB shock/flash ads |
| 1195 || dnsDomainIs(host, "kliptracker.com") |
| 1196 || dnsDomainIs(host, "klipmart.com") |
| 1197 |
| 1198 || host == "spinbox.techtracker.com" |
| 1199 |
| 1200 // Amazon affiliate 'search'. retrieves a JS that writes new HTML |
| 1201 // that references one or more images "related to your search". |
| 1202 // (If there is a real use for rcm.amazon.com, let me know) |
| 1203 // http://rcm.amazon.com/e/cm?t=starlingtechnolo&l=st1&search=cy
nicism&mode=books&p=11&o=1&bg1=CEE7FF&fc1=000000&lc1=083
194&lt1=_blank |
| 1204 || host == "rcm.amazon.com" |
| 1205 |
| 1206 ////// |
| 1207 // |
| 1208 // "Other Scum And Villainry" |
| 1209 // |
| 1210 |
| 1211 // Popup from "reserved" domains at register.com |
| 1212 // (I considered blocking all of register.com) |
| 1213 || (dnsDomainIs(host, ".register.com") |
| 1214 && (shExpMatch(url,"*.js") |
| 1215 || shExpMatch(host, "searchtheweb*") |
| 1216 || shExpMatch(host, "futuresite*") |
| 1217 ) |
| 1218 ) |
| 1219 |
| 1220 || dnsDomainIs(host, ".oingo.com") |
| 1221 || dnsDomainIs(host, ".namingsolutions.com") |
| 1222 |
| 1223 // "Data collection" |
| 1224 || dnsDomainIs(host, ".coremetrics.com") |
| 1225 |
| 1226 // Sets your home page |
| 1227 || dnsDomainIs(host, ".firehunt.com") |
| 1228 |
| 1229 // tracking |
| 1230 || dnsDomainIs(host, ".appliedsemantics.com") |
| 1231 |
| 1232 // Scum who buy ad space from the above |
| 1233 // || dnsDomainIs(host, ".hartfordrents.com") |
| 1234 // || dnsDomainIs(host, ".chicagocomputerrentals.com") |
| 1235 // || dnsDomainIs(host, ".ccrsolutions.com") |
| 1236 // || dnsDomainIs(host, ".rushcomputer.com") |
| 1237 // || dnsDomainIs(host, ".localesimates.com") |
| 1238 // || dnsDomainIs(host, ".unitedvision.com") |
| 1239 // XXX this might need the resolver |
| 1240 // || isInNet(host, "216.216.246.31", "255.255.255.255") |
| 1241 || (host == "216.216.246.31") |
| 1242 |
| 1243 // avsforum ads |
| 1244 // || isInNet(host, "216.66.21.35", "255.255.255.255") |
| 1245 || (host == "216.66.21.35") |
| 1246 || dnsDomainIs(host, ".avsads.com") |
| 1247 |
| 1248 // bogus "search" sites at non-existent sites |
| 1249 || dnsDomainIs(host, ".search411.com") |
| 1250 |
| 1251 // palmgear.com |
| 1252 || (dnsDomainIs(host, ".palmgear.com") |
| 1253 && ( shExpMatch(url, "*/adsales/*") |
| 1254 || shExpMatch(url, "*/emailblast*") |
| 1255 ) |
| 1256 ) |
| 1257 |
| 1258 ////// |
| 1259 // |
| 1260 // Contributed adult sites |
| 1261 // |
| 1262 |
| 1263 || dnsDomainIs(host, ".porntrack.com") |
| 1264 || dnsDomainIs(host, ".sexe-portail.com") |
| 1265 || dnsDomainIs(host, ".sextracker.com") |
| 1266 || dnsDomainIs(host, ".sexspy.com") |
| 1267 || dnsDomainIs(host, ".offshoreclicks.com") |
| 1268 || dnsDomainIs(host, ".exxxit.com") |
| 1269 || dnsDomainIs(host, "private-dailer.biz") |
| 1270 || shExpMatch(url, "*retestrak.nl/misc/reet.gif") |
| 1271 || shExpMatch(url, "*dontstayin.com/*.swf") |
| 1272 |
| 1273 // debug |
| 1274 // || (alertmatch("NOT:" + url) && 0) |
| 1275 |
| 1276 ) { |
| 1277 |
| 1278 // alert("blackholing: " + url); |
| 1279 |
| 1280 // deny this request |
| 1281 return blackhole; |
| 1282 |
| 1283 } else { |
| 1284 // debug |
| 1285 // alert("allowing: " + url); |
| 1286 |
| 1287 // all other requests go direct and avoid any overhead |
| 1288 return normal; |
| 1289 } |
| 1290 } |
| 1291 |
| 1292 /////////////////////////////////////////////////////////////////////////////// |
| 1293 // |
| 1294 // This line is just for testing; you can ignore it. But, if you are having |
| 1295 // problems where you think this PAC file isn't being loaded, then change this |
| 1296 // to read "if (1)" and the alert box should appear when the browser loads this |
| 1297 // file. |
| 1298 // |
| 1299 // This works for IE4, IE5, IE5.5, IE6 and Netscape 2.x, 3.x, and 4.x. |
| 1300 // (For IE6, tested on Win2K) |
| 1301 // This does not work for Mozilla before 1.4 (and not for Netscape 6.x). |
| 1302 // In Mozilla 1.4+ and Fireox, this will write to the JavaScript console. |
| 1303 // |
| 1304 if (0) { |
| 1305 alert("no-ads.pac: LOADED:\n" + |
| 1306 " version: "+noadsver+"\n" + |
| 1307 " normal: "+normal+"\n" + |
| 1308 " blackhole: "+blackhole+"\n" + |
| 1309 " localproxy: "+localproxy+"\n" + |
| 1310 " bypass: "+bypass+"\n" |
| 1311 // MSG |
| 1312 ); |
| 1313 } |
| 1314 |
| 1315 // The above should show you that this JavaScript is executed in an |
| 1316 // unprotected global context. NEVER point at someone elses autoconfig file; |
| 1317 // always load from your own copy! |
| 1318 |
| 1319 // an alert that returns true |
| 1320 function alertmatch(str) |
| 1321 { |
| 1322 // alert("match: "+str); |
| 1323 return 1; |
| 1324 } |
| 1325 |
| 1326 /////////////////////////////////////////////////////////////////////////////// |
| 1327 // |
| 1328 // Replacement function for dnsDomainIs(). This is to replace the |
| 1329 // prefix problem, which a leading '.' used to be used for. |
| 1330 // |
| 1331 // dnsDomainIs("bar.com", "bar.com") => true |
| 1332 // dnsDomainIs("www.bar.com", "bar.com") => true |
| 1333 // dnsDomainIs("www.foobar.com", "bar.com") => true <<< incorrect |
| 1334 // |
| 1335 // isInDomain("bar.com", "bar.com") => true |
| 1336 // isInDomain("www.bar.com", "bar.com") => true |
| 1337 // isInDomain("www.foobar.com", "bar.com") => false <<< correct |
| 1338 // |
| 1339 function isInDomain(host, domain) { |
| 1340 if (host.length > domain.length) { |
| 1341 return (host.substring(host.length - domain.length - 1) == "."+domain); |
| 1342 } |
| 1343 return (host == domain); |
| 1344 } |
| 1345 |
| 1346 /////////////////////////////////////////////////////////////////////////////// |
| 1347 // |
| 1348 // Tired of reading boring comments? Try reading today's comics: |
| 1349 // http://www.schooner.com/~loverso/comics/ |
| 1350 // |
| 1351 // or getting a quote from my collection: |
| 1352 // http://www.schooner.com/~loverso/quote/ |
| 1353 // |
| 1354 |
| 1355 // eof |
| 1356 //intelliserv.net |
| 1357 //intellisrv.net |
| 1358 //rambler.ru |
| 1359 //rightmedia.net |
| 1360 //calloffate.com |
| 1361 //fairmeasures.com |
| 1362 |
| OLD | NEW |