网站被镜像、反代,或者网站被抄袭采集,所有辛苦码字写原创的作者都不愿这样的事情发生在自己身上。如果抄袭采集网站排名比原创更高,滋味就更不好受了。

本文整理总结了一些实用的网站防止被镜像/反代,防采集方法,希望能帮到原创作者。

本文首发于:https://itlanyan.com/prevent-site-from-mirror-and-crawled/

网站防止被镜像/反代方法

防止网站被直接反代

Nginx、Caddy等web软件具有强大的反向代理能力,配合sub_filterproxy_redirect等指令能很容易地完美镜像/反代一个网站。

防止这种反代的方法主要有两种:

1. 前端使用js判断域名是否合法,不是授权域名则跳转到原域名。以下是一个示例代码:

var domain = "你的网站域名"; // 例如 itlanyan.com
if (location.href.indexOf(domain) === -1) {
  window.location = '要跳转的网址'; // 例如 https://itlanyan.com
}

肯定有网友会担心这段js中的域名也会被替换,这样就达不到预期的效果。解决这个担忧的方法是对js进行混淆,例如使用 JSFuck 混淆,处理后几乎没人能看得懂代码真实意图,更不用说替换了。

2. 分析后端访问日志,将可疑IP加入黑名单或者限制访问频率。确定你的网站被镜像/反代了,对方还是热门网站,那么其IP应该频繁出现在访问日志中。分析网站日志,将可疑IP加入黑名单或者限制访问,一定程度上能解决被反代的困扰。

两种方法中,第一种强烈建议部署使用,不仅简单有效,而且部署起来也很方便。

防止网站以iframe方式反代

上面的方法能防止被直接反代,但可以通过嵌入iframe的方法绕过,即将网站嵌入到一个frame中。这种情况下,无论用上面的js前端判断还是后端日志分析,一切都正常。

防止网站被第三方通过frame方式反代的解决办法有:

1. 前端JS判断网页是否顶级页面,不是则跳转。以下是判断是否顶级页面的js代码:

if (window.top != window.self) {
    window.top.location = '你的网址'; // 例如 https://itlanyan.com
}

同样,部署时建议将这段代码先混淆。

2. 页面输出时加上不允许被嵌套在frame中的header。主要的header有两个:旧式的X-FRAME-OPTIONS以及现代浏览器支持的Content-Security-Policy。例如可在/etc/nginx/nginx.conf中加入指令:

# 一般来说写一个就足够,写两个更好
add_header X-FRAME-OPTIONS DENY;
add_header Content-Security-Policy "frame-ancestors 'none';";

或者写在Apache的.htaccess文件中:

Header set X-FRAME-OPTIONS "deny"
Header set Content-Security-Policy "frame-ancestors 'none';"

浏览器看到这两个header,就会拒绝在iframe中展示页面,从而防止这种镜像/反代方式。

防止网站被镜像/反代总结

镜像/反代网站的方法主要有两种,都可以通过结合前后端来防止。如果不想让你的网站被镜像/反代,最简单的做法是将上面的两段js代码混淆后随页面一起输出,同时设置X-FRAME-OPTIONSContent-Security-Policy两个header。

网站防采集技巧

一般来说,转载和采集是不同的:看到好文章才会被分享转载,多是手动操作;采集则是通过程序批量转发文章,不管文章质量。当然,即使是转载,都应该给出原文链接,这是基本的素质和对原作者的尊重。

遗憾的是,中文互联网上存在大量抄袭采集的文章,以每日头条热备资讯为代表。这些采集站使用软件大量采集他人原创文章,并且排名非常靠前,大大促长了不原创靠采集吸引流量的风气。这种不给出原文链接,不尊重原作者劳动成果的采集行为,需要被防止和联合抵制

网站防采集
网站防采集

网站防采集技巧方法汇总

首先,对于内容由前端动态生成的网站,采集难度就会大一些,因为大部分采集程序不会运行JS脚本。如果你熟悉JAMstack构建网站,用JS输出网页内容能有效避开新手的采集。值得注意的是,这种方式下请做好后端API的鉴权和限流。

第二种做法和第一种类似:后端输出加密内容,前端js解密后再显示原文。这招对付程序采集很有效,但不影响正常用户访问。不过需要注意的是,这种做法可能对SEO不友好。

第三种做法不能算防止采集,但可以强制让采集网站带上原文链接,算是小技巧吧。做法便是随机在每个文章的中加上带有原文链接的句子或段落,同时为元素添加一个不可见的类。注意,设置不可见需要写在css类里,不能直接写在元素的style属性上,否则对方采集后同样不可见。本文便有一个段落携带了文章链接,但页面上看不到,你能找出来吗?

此外,不少采集软件能自动替换已采集过的网址,如果想保持到你网站的链接,可以考虑使用 短网址服务

最后一种做法是检查网站访问日志,将可疑IP加入黑名单。采集站一般会定期或者频繁访问网站,可以根据这些特征找到可疑IP。要注意的是,如果网站支持RSS订阅,记得输出摘要而不是原文,否则采集就太方便了。

网站防采集总结

严格来说,不存在确定有效的防止采集方法,以上做法都只是增加采集难度而已。从技术层面来说,防采集是一种策略对抗,需要不断投入精力才能不断化解新的采集手段。

参考

1. How to prevent my site page to be loaded via 3rd party site frame of iFrame

2. How to Prevent Your Website from being Placed in a Frame

3. 如何防止网站内容被采集

4. 小心Nginx的add_header指令

5. 使用uBlacklist净化谷歌搜索结果