关于磬灵风软和伊甸园论坛的 BT 发布页的 JavaScript 弹窗广告的摧残过滤手法
Posted: Dec 01 2008, 18:16
一般过滤 JS 弹窗都是采用直接匹配头尾相应的标签来完全过滤。
但是遇到比较长的 JS 内容,这样过滤明显加重了 Proxomitron 的负担,理论上也会拖慢网页加载速度。
所以使用帮助中技巧篇提到的“Quick and Dirty”这种摧残式的过滤手法是比较好的选择。
现在来看下磬灵风软论坛 BT 发布页的一段网页源代码:
也不知道是谁创建了这段“经典”的 JS 代码,由于在别人点击下载链接的同时,它会调用事先准备好的某个广告,弹出来给你额外“享用”,所以在伊甸园的 BT 发布页的那些下载页面里也能找到相同的代码……
统计下,有 1093 字节长……
显然又长又臭,但是直接整个替换似乎费时费力,但是同时,我们可以注意到网页源代码下面还有一段有关联:
关联词就是里面的“popupADDiv”,属于 Div 标签。
我们把这个标签单独列出来看下:
这个标签里有个 onmouseenter="isAD=false;this.focus()" 属性引起了我的足够重视,查了下,是指在鼠标指针进入这个区域时触发。
所以说这才是一个导火线……因此我们找到要摧残的对象后,就直接爽快地把这些 DIV 标签的属性清除就好了。
用下面一个网页过滤规则来做:
这个规则直接把 <div id="popupADDiv" onfocusout="hAD()" onmouseenter="isAD=false;this.focus()" onmouseleave="isAD=true"> 替换成了光秃秃的 <div>
这样就让 JS 弹窗脚本失效了,但是下面的那个百度文字广告也出来了,可以自己再过滤下。
但是遇到比较长的 JS 内容,这样过滤明显加重了 Proxomitron 的负担,理论上也会拖慢网页加载速度。
所以使用帮助中技巧篇提到的“Quick and Dirty”这种摧残式的过滤手法是比较好的选择。
现在来看下磬灵风软论坛 BT 发布页的一段网页源代码:
Code: Select all
<script type="text/javascript">
var isAD = false;
var timeOutID = null;
function sAD()
{
rAD();
var popupAD = $("popupADDiv");
popupAD.style.display = "block";
popupAD.style.left = document.body.scrollLeft + (document.body.clientWidth - popupAD.clientWidth)/2;
var _w = window.pageXOffset || document.documentElement.scrollTop;
popupAD.style.top = _w + 120;
popupAD.focus();
mAD(50, 0, 1);
}
function hAD()
{
if (isAD)
{
var popupAD = $("popupADDiv");
popupAD.style.display = "none";
rAD();
isAD=false;
}
}
function mAD(interval, start, step)
{
var popupAD = $("popupADDiv");
var pBar = $("processBar");
pBar.innerHTML = "<table bgcolor='#6AAAE2' width='"+(popupAD.clientWidth*start/100)+"' height='10' border='0' cellpadding='0' cellspacing='0'>
<tr><td></td></tr></table>";
if (start < 100)
{
timeOutID = setTimeout("mAD("+interval+", "+(start+step)+", "+step+")", interval);
}
else
{
timeOutID = null;
}
}
function rAD()
{
if (timeOutID != null)
{
clearTimeout(timeOutID);
timeOutID = null;
}
}
</script>
统计下,有 1093 字节长……
显然又长又臭,但是直接整个替换似乎费时费力,但是同时,我们可以注意到网页源代码下面还有一段有关联:
Code: Select all
<div id="popupADDiv" onfocusout="hAD()" onmouseenter="isAD=false;this.focus()" onmouseleave="isAD=true">
<div><script type='text/javascript'>
cpro_client='bdwxl_8642ahm_cpr';
cpro_at='text_image';
cpro_161=4;
cpro_flush=4;
cpro_uap=1;
cpro_w=360;
cpro_h=300;
cpro_template='text_default_360_300';
cpro_cbd='#trans';
cpro_cbg='#trans';
cpro_ctitle='#0000ff';
cpro_cdesc='#444444';
cpro_curl='#008000';
cpro_cflush='#e10900';
</script>
<script language='JavaScript' type='text/javascript' src='http://cpro.baidu.com/cpro/ui/cp.js'></script>
</div>
<div id="processBar" style="background:#EEEEEE;"></div>
</div>
我们把这个标签单独列出来看下:
Code: Select all
<div id="popupADDiv" onfocusout="hAD()" onmouseenter="isAD=false;this.focus()" onmouseleave="isAD=true">
...
</div>
所以说这才是一个导火线……因此我们找到要摧残的对象后,就直接爽快地把这些 DIV 标签的属性清除就好了。
用下面一个网页过滤规则来做:
Code: Select all
[Patterns]
Name = "33_1000fr2_DIVruin"
Active = TRUE
URL = "bt.1000fr.com/"
Bounds = "<div\s*>"
Limit = 104
Match = "*id="popupADDiv"*"
Replace = "<div>"
这样就让 JS 弹窗脚本失效了,但是下面的那个百度文字广告也出来了,可以自己再过滤下。