今天下午,同事过来说有几个页面显示不正常,去到他那边一看,果然。但是回到我的机器上,同样的情况下却没有出现问题。看了他那边的页面源码,发现页面上被某名奇妙的加入了一些js代码,使得页面的window.open无法使用。原有的代码是这样的:
<script type="text/javascript" language="javascript">
<!--
if (window != window.top) {
window.open('index.html', '_top');
}
// -->
</script>
|
就是把当前frame显示的东西打开到最顶层的窗口。
而被插入的代码如下:
<script language="JavaScript">
<!--
function SymError()
{
return true;
}
window.onerror = SymError;
var SymRealWinOpen = window.open;
function SymWinOpen(url, name, attributes)
{
return (new Object());
}
window.open = SymWinOpen;
//-->
</script>
|
页面的末尾还有:
<script language="JavaScript">
<!--
var SymRealOnLoad;
var SymRealOnUnload;
function SymOnUnload()
{
window.open = SymWinOpen;
if(SymRealOnUnload != null)
SymRealOnUnload();
}
function SymOnLoad()
{
if(SymRealOnLoad != null)
SymRealOnLoad();
window.open = SymRealWinOpen;
SymRealOnUnload = window.onunload;
window.onunload = SymOnUnload;
}
SymRealOnLoad = window.onload;
window.onload = SymOnLoad;
//-->
</script>
|
看了这段代码,我开始怀疑是某个防火墙搞的鬼。果然,在他的机器上正安着NIS,我让他关掉后再测试,一切OK。
说实话,我虽然一直都没有用Norton,但是印象也不差,不过这一次,真是让我十分鄙视它。从代码可以看出,它只是把window.open替换掉,等到页面全部加载完了再恢复,以此行为来阻止“弹出窗口”。在我看来,这种做法好坏不分,简单粗暴,而且毫无技术含量。
本来,阻止弹出窗口这种工作,应该是浏览器份内的事,既然它要狗拿耗子多管闲事,那做好一点也就算了,反正大家都这么干。可是它又不肯下功夫做,只是简单的把window.open替换掉,于是,加载过程中,任何对window.open的调用都无效。而任何一个有心要做弹出广告的人,只要稍微加点代码,就可以直接无视NIS加的东东。倒是那些做正常应用的开发人员,如果漏了测试NIS的过滤,反而有可能会得罪客户。就冲这一点,说它毫无技术含量也不为过。
再者,NIS在做这种事的时候,没有给用户提供任何说明,甚至于代码里都没有加任何注释说明这段代码是由它插入的。这种行为跟流氓软件的行径已经相差不远了,都是偷偷摸摸的往用户的东西里面加自己的东西,唯一不同的是,一个是在系统里面加东西,一个是在用户浏览的网页里面加东西。
总而言之,NIS的弹窗控制做得简单粗暴,毫无技术含量,可以看出,其开发人员非常不负责任,由此可见其产品质量如何。我用了半年的KIS,还没有发现有这种偷偷摸摸加代码的情况。前段时间刚买了Pc-cillin,过年后测试一下看看会不会有这种问题:)
阅读(2035) | 评论(0) | 转发(1) |