最近不知道为啥?明月总是因为自己的疏忽造成一些看着很怪异的问题,比如最近虾咪博客上的微博同步插件就突然失效了,无法完成文章发布的同步在插件设置里死活无法获取到 Token,百思不得其解呀!最后竟然发现是因为服务器端 PHP 因为 CentOS 更新升级造成配置重置了,而 WordPress 需要 PHP 函数被禁用了,因此……。
好吧,这些小问题还都算是可以忍受的范畴,那么博客总是被劫持就是“是可忍,孰不可忍”了。在解决了虾咪自己手机浏览器的劫持问题,还是有用户反映在百度搜索进入本博客后会出现被劫持跳转的问题。随着这次百度移动搜索推出烽火算法 2.0,开始严厉打击恶意劫持,这个问题就需要及时的解决了,否则后果严重呀。
烽火算法 2.0 主要针对以下两类问题
- 未经用户允许恶意窃取用户手机号码等隐私数据的行为。
- 恶意劫持百度流量的行为,主要表现在:
- 搜索用户通过百度移动搜索到达网站后,搜索用户离开网站页面,通过后退后被劫持到虚假的百度搜索结果页中;
- 搜索用户通过百度移动搜索到达网站页面后,搜索用户离开网站页面,无法回退到百度搜索结果中,搜索用户点击回退会一直被困在站点内。
看到了吧,百度对劫持的打击可不管你的站点是被劫持了还是被植入后门木马了,只要有劫持跳转的一律可能被作为打击对象,所以明月当前要做的就是避免博客出现劫持跳转这种情况的发生。
劫持防范措施
在对代码进行了分析后,基本可以判断这是运营商劫持造成的,至于是哪个运营商?移动、联通、电信好像没有一个好鸟吧?同时也可以看出目前博客面临的劫持主要就是基于 iFrame 的 CFSCross Frame Script和 Clickjacking(点击劫持)攻击,通俗点儿将就是封杀前端一切的 iFrame 就可以解决了,这时候想起来在部署配置 Nginx 的时候专门有X-Frame-Options来设置的,我好像设置的是 SAMEORIGIN,就是只允许为同源域名下的 iFrame 页面才可以调用,然后这样的设置就被//mt.rtmark.net 这样的源地址引用给利用了,我去!
使用 X-Frame-Options 有三个可选的值:
- DENY:浏览器拒绝当前页面加载任何 Frame 页面
- SAMEORIGIN:frame 页面的地址只能为同源域名下的页面
- ALLOW-FROM:允许 frame 加载的页面地址
PHP 代码:
header(‘X-Frame-Options:Deny’);
Nginx 配置:
add_header X-Frame-Options SAMEORIGIN
Apache 配置:
Header always append X-Frame-Options SAMEORIGIN
迅速在 Nginx 配置文件里将 X-Frame-Options 修改为 DENY 后,重启 Nginx,再次在手机上不同浏览器测试好像劫持问题消失了都,看来问题确实就是出在这里了,看到这里如果您在手机端浏览器浏览本博客发现有被劫持跳转的请及时给明月留言告之哦,谢谢了!
最后总结
很多人都再说给网站启用了 HTTPS 后就可以解决各种劫持问题了,目前来看并不见得,最终还是要看你的安全防范措施的,现在的劫持技术也是在不断的摸索更新中,一个小小的疏忽都可能造成被劫持成功。最近百度移动端搜索的烽火算法 2.0 上线了,为了防止自己的博客被“打击”,建议大家都多排查一下自己的网站是否存在“被劫持”的现象,特别是通过手机端百度搜索结果链接后的劫持,这个你通过被的搜索引擎是没法触发的,明月的测试排查都是任意一个手机浏览器里进入百度主页搜索本博客品牌词“虾咪填海”或者“虾咪博客”,点击搜索结果中的本博客链接进入博客多点击几个链接后观察有无劫持跳转的。