一次网站被挂恶意代码的查错经历

      程序员职业的特点,难免会影响自己的业余爱好,比如空闲时间别人逛淘宝,程序员就逛博客园、刷微博的时候也会关注一些互联网技术方面的微博,还有一部分像我,做一名业余站长,利用下班时间维护更新下网站内容,看着IP数的增长、百度收录、关键字的排名攀升,自己也会得到满足,顺带的是,挂在网站上的几个GG、百度联盟广告也有些许的收入,解决两餐问题还是可以的,其实程序员做网站最主要的是为了兴趣,想赚大钱的话就不会做草根小站长了。

     废话了不少,说说这次遇到的网站被挂恶意代码的经历吧;

     恶意代码的表现是:从百度收录的文章点过来到网站就会弹出好几个色*情网站弹窗页,而我从浏览器地址栏直接输入网址的话,就不会出现,按照常规的排查手段,马上到站点查看有没有恶意文件,然后检查下网站的文件有没有被注入了恶意的代码,经过排查,都是正常的(这里犯错了,我只检查了模板文件,没有检查JS文件,为后续留下隐患),继而,我怀疑是不是广告联盟的代码问题呢?所以,我把模板文件备份一下,把全部的广告联盟代码、分享组件代码全部都去掉,发现还是会弹窗,因为好几天都没能把这个问题解决,跟同学都觉得这个问题真是太神,其中怀疑过VPS的空间商是不是被黑了,但是发现网站更换模板之后就没有弹窗了,于是还是把排查重点放在模板文件上。

    排查有了新的转机,当我把所有外部引用JS(广告、分享条、微博、日志推荐)都排查掉之后,我开始怀疑网站的JS文件了,结果在Jquery里发现了这段恶意的代码,因为恶意弹窗是在网页一开始加载就连续的弹出来,心想,也应该是在JS一开始加载的地方,在Jquery加载之前,这里值得一提的是,这段恶意代码也非常有技术含量!

  可以看出,在Jquery加载之前,输出了一段Javascript引用,代码是引用了一张图片 link5.jpg ,好,把这张图片download下来看看

也是很普通的一张图片,但是你以为这真的是一张普普通通的图片你就错了,还记得以前在网上见过一张传闻有"内涵”的图片,打开也是一张普通的图片,但是用记事本打开之后,里面岛国的种子地址(声明:我并没有下载)所以,用记事本打开它来看看究竟。

其中,document.referrer是获取网站的来源,比如从百度过来的,referrer="www.baidu.com",很多网站都是利用这个HTTP的属性来防止盗链的,可见,他是判断了有来源的话才会输出他的广告JS代码,目的就是为了不让站长容易发现弹窗广告的问题。

    从这次排查恶意代码的经历可以看出,网站安全是多么重要的一件事,假如你没有对用户上传的图片进行检查,网站就会留下很大的隐患,所以单靠检查文件后缀是不行的,这方面博客园做得比较好,发布这篇随笔的时候,link5.jpg 这张图片无法上传!

   后记:感谢博客园的朋友支持,本篇随笔成为今天博客园评论最多的文章,今天这么多回复,也有不少园友给出了建议和部分技术上的解答,其中有:

@ Slmuro : 浏览器遇到type=text/javascript 不会理会路径是什么 一律理解为JS文件。就像ASP.NET动态输出JS时用后缀是.aspx的文件一个道理。
<src 和ipt 这个是因为 JS遇到"</script> “就会不把它当做字符串直接理解为JS结束标签,所以如果要JS动态写新的含有"</script> “输出到页面,要把这个分隔开来.

posted @ 2013-02-22 09:28  dotnetgeek  阅读(5826)  评论(62编辑  收藏  举报