wordpress网站禁止复制防采集混合全面方案(非js与js)

相信大家都遭遇到了辛辛苦苦写了很久的文章,用心做的教程,却被别个用采集器,或者复制粘贴发布,这种还好,有些会留下原地址,但是很多复制的站长根本不会留下原作者地址,以至于后面相互转载,到最后甚至不知道原作者是谁了。

这篇文章的内容为 js 和 非js 的一些禁止复制代码,当然,是还有效的代码,对于目前的 Chrome 或 IE;同时为了更好的效果,另加一些大家会忽略的地方,例如打印模式。其次是 WordPress 在这方面的一些关联代码。

首先为 js 部分,控制键盘、选中、右键,这段代码可以放到 header {wordpress通常在header.php中}或 js {请尽量选择公共js文件}文件当中:

<script>
function stop(){
return false;
}
document.oncontextmenu=stop;
document.ondragstart=stop;
document.onselectstart=stop;
document.onkeydown = function (e) {
    var ev = window.event || e;
    var code = ev.keyCode || ev.which;
    if (code == 116) {
    ev.keyCode ? ev.keyCode = 0 : ev.which = 0;
    cancelBubble = true;
    return false;
    }
}
</script>

 

但是,一旦用户禁止了 js 的执行,例如 Chrome、Firefox 都可以很方便的禁用它,专业拷贝户可能很多都知道。

于是加入 CSS 的控制,以下可以放入 header,但是我建议 header 放一份,并将里面的内容往 CSS 文件里再放置一份,这样一来当 F12 去除了其中一个,另外一个再寻找起来会麻烦且花时间(位于 CSS 文件中的代码 对方需要在开发模式中清理 CSS 内容,而且这样可以导致整个无法直视):

<style type="text/css">html { -ms-user-select: none; -moz-user-select: none; -webkit-user-select: none; }</style>

 

另外你需要在 CSS 中再注意一点,Ctrl+P,也就是打印功能,可以唤出来,再在里面操作拷贝就没事了。因为打印很少用到,除非你的网站有专门为此而设计的。将以下代码放至 CSS 中,或者你也可以增强一下的跟上面那段 CSS 组合双保险:

@media print {
html { display: none; }
}

 

但至此,还少一个,就是禁止另存为,这个现在还没有解决方案,但介于另存为之后依旧会保留代码部分,即便在本地打开另存的网页,也同样无法操作复制。另一点是 F12 开发者模式,这里就不建议禁止了,需要这么麻烦为了拷贝一段代码而研究的人,始终有方法得到内容的,只是步骤增多。

以上介绍的这些方法主要防止通过一些最简单的捷径直接右键复制的类型。足以。


下边是一些 WordPress 中我使用的,它们放置于 函数模板:

来自某个博客的简单防采集,但我没试过不知道有效没:

// 防采集
$ua = $_SERVER['HTTP_USER_AGENT'];
$now_ua = array('FeedDemon ','ZmEu','Indy Library','oBot','jaunty'); // 将恶意 USER_AGENT 存入数组
if(!$ua) { // 禁止空 USER_AGENT
    header("Content-type: text/html; charset=utf-8");
    wp_die('System Error!');
} else {
    foreach($now_ua as $value )
    if(eregi($value,$ua)) {
    header("Content-type: text/html; charset=utf-8");
    wp_die('System Error!');
    }
}
add_filter('the_content','tedlfie_copyright');

 

WordPress 可选不全文输出 RSS,但没有完全关闭的开关,以下可关闭 RSS,如果站点无需订阅功能,以此防止 RSS 方式的采集插件:

// 关闭 Feed RSS
function tedlife_disable_feed() {
    wp_die(__('Feed OFF'));
}
add_action('do_feed', 'tedlife_disable_feed', 1);
add_action('do_feed_rdf', 'tedlife_disable_feed', 1);
add_action('do_feed_rss', 'tedlife_disable_feed', 1);
add_action('do_feed_rss2', 'tedlife_disable_feed', 1);
add_action('do_feed_atom', 'tedlife_disable_feed', 1);

 

但是,还是被采集了呢?当然,即使不采集,我们加一下“转载请注明”也不错,代码会位于正文底部一同被采集,当然,采集器应该可以设定屏蔽某个特殊字段:

// 内页添加转载请注明
function tedlfie_copyright($content) {
    if( is_singular("post") ){
        $content.= '<p class="post-copy"><span style="color:#f00;">转载请注明:</span><a href="'.get_permalink().'" rel="external nofollow" target="_blank">'.get_the_title().'</a> - <a href="'.get_bloginfo('url').'" rel="external nofollow" target="_blank">'.get_bloginfo('name').'</a></p>';
    }
    return $content;
}

 

总的来说也不存在绝对的方案,即便你做成图片,图片文字也是可以提取的,再不成我手动输,只是增加获取的难度。

如今复制与采集当道,以上这些即为了小站的良好发展,虽只可防部分小人。原创内容被大点的站拿走之后是很郁闷的,作为作者站,文章最重在搜索引擎的排行却不如拷贝者排前,本来公开的资源回头再另一个人那里反而成为了限制资源之类的…

希望大家在推荐他人内容的时候都保留一个作者名与出处链接以示礼节,重不在价值而于方式。

原创作者:空气猫