辛辛苦苦翻译的、写的文字很快被人原封不动剽窃、不断有莫名其妙 IP 查询不存在的网址、一些不希望看到的蜘蛛来爬取你的网站?我自己的网站和很多朋友的网站每天都在经历着大范围的令人恶心的剽窃、骚扰、攻击。怎样保护自己网站的数据、避免个人隐私泄露,也许这是一个永恒的话题,是矛与盾的关系,并且魔高一尺、道高一丈,道高一尺、魔高一丈,攻与防一直是对立与统一的。
今天看到 明月登楼 博主写的帖子,介绍了一款新的防字符串查询骚扰的插件 Block Bad Queries,感觉很不错。不由想起了很多种防骚扰、屏蔽而异来访的方法。我在这里大概归类一下。
防止别人活机器人来访、镜像,可以从前端解决,也可以从后端解决,我在这里主要笼统说的是后端方法。包括主机设置和主机网站系统设置两方面。
主机设置
后台控制面板
我们自己的网站,不管是服务器还是虚拟主机,都有后台控制面板,我们可以在这里设置,例如把一些不希望看到的 IP 拒绝于网站之外。利用 CDN 的防护功能进行设置 IP 访问流量限制、开启白名单、防盗链功能等。
本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利
服务器系统
当然,也可以通过服务器程序来设置,比如 Apache/Nginx/Windows,自己写一些代码来设置。
明月登楼 博主写的这篇文章让我想起了 Windows 主机上过滤字符串的方法。可以这样设置:
- <configuration>
- <system.webServer>
- <security>
- <requestFiltering>
- <denyUrlSequences>
- <add sequence=".." />
- <add sequence=":" />
- <add sequence="\" />
- <add sequence="bad" />
- <add sequence="sequence" />
- </denyUrlSequences>
- <alwaysAllowedUrls>
- <add url="/bad_sequence.txt" />
- </alwaysAllowedUrls>
- </requestFiltering>
- </security>
- </system.webServer>
- </configuration>
当满足规则时,服务器返回 404 信息。只不过这段代码是 Windows 主机服务器端的,需要放到 web.config 文件中,类似于 Apache 主机的 .htaccess 文件。Windows 主机其他屏蔽过滤措施可以看我前面的博文:通过 Web.config 文件设置禁止某些IP地址、蜘蛛访问网站或某文件。
本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利
安装安全软件
独立主机也可以安装安全软件,例如 360 的安全软件。
本文禁止全文转载。任何形式转载请联系作者(时光在路上 www.timezls.com) Copyright © 2023. All Rights Reserved
网站本身的程序
也可以从后端的网站程序着手来自定义规则。这一点上,博主 张戈 写了非常精彩的代码,传送门 → ,很实用,很有效。
本文禁止无授权转载 - 时光在路上 www.timezls.com 保留所有权利
不过,这种从网站后端网站系统代码来定义规则的方法并不总是很奏效。例如,当使用了 CDN 加速后,后端程序就基本失效了,转而变成了前端问题,前端问题在有点棘手,感觉简单的方法不多。
另外,如果使用了加速插件,也会存令动态文件变成静态文件,问题从后端转到前端。
前一阵子我在 明月登楼 博主那里看到了缓存加速的插件 WP-Rocket,试用了一下,效果非常给力,网页浏览起来非常顺滑。但是,这个插件会令你网站系统使用 PHP 书写的屏蔽规则失效。WP-Rocket 设置中的选项“不传送缓存页面给这些使用者代理(User Agents)
”的意思是让含这些 UA 信息的访问者直接访问“源站”,即访问不缓存的页面。这时候看似我们之前的 PHP 代码又有效了。其实也不然,有很大局限性:WP-Rocket 缓存文件禁止某些 User Agent
设置选项中填写的信息并不是正则表达,并不能变成字符串中的关键字,而是“丁是丁、卯是卯”的规则,你写了 ZmEu 这个字段,并不能阻止 ZmEu2.0
、From ZmEu
等这样的关键字,这和张戈写的 PHP 代码功能上差了一大截。
这一点让我很不爽,我决定暂时不用。
经过一段时间折腾,终于找到了一个比较适合的方法,那就是修改一下 WP-Rocket 中的 PHP 文件,把张戈 写的那段 PHP 代码移植到 WP-Rocket 文件中去。以下是具体方法:
找到 WP-Rocket 插件中的 process.php 文件(目录:wp-rocket/inc/front/),在代码的开头,也就是<?php
一行的下面,添加张戈编写的代码,以下代码我修改了一些,略同:
- // 防止含下列 UA 关键字和空 UA 信息的恶意来访者
- $ua = $_SERVER['HTTP_USER_AGENT'];
- $now_ua = array( '/AhrefsBot/i', '/ApacheBench/i' ); // 这里可以继续多添加其他字符串关键字
- if( !$ua ) { // 空 UA
- header( "Content-type: text\/html; charset=utf-8" );
- wp_die( '请勿采集本站,因为采集的站长木有小JJ!' );
- } else { // 其他 UA 信息中命中字符串关键字的
- foreach( $now_ua as $value )
- if( preg_match( $value, $ua ) ) {
- header( "Content-type: text\/html; charset=utf-8" );
- wp_die( '请勿采集本站,因为采集的站长木有小JJ!' );
- }
- }
以上方法解决了 WP-Rocket 插件 不能用正则表达匹配关键字的问题,用 WP-Rocket 插件直接拒绝不受欢迎的来访者,连让其浏览非缓存文件的机会也没有,从而解决了 WP-Rocket 插件静态化导致原来 PHP 代码失效的问题。
本文禁止全文转载。任何形式转载请联系作者(时光在路上 www.timezls.com) Copyright © 2023. All Rights Reserved
代码中,头部返回信息设置,你也可以自己根据情况自定义,比如 403/503
,wp_die()
也可以换成exit()
。可以自己网上查一下,我就不详述了。
如果不再使用 CDN 继续加速,那么这款插件基本就 perfect 了。结合 明月登楼 博主最近刚介绍的 Block Bad Queries 插件,屏蔽效果会提升一大截。
我前一篇文章是用来解决使用 Wp Super Cahce 插件再继续使用 CDN,CDN服务器会缓存登录者资料的问题,也是由静态化引起,有兴趣的朋友可以看一下。
本文禁止全文转载。任何形式转载请联系作者(时光在路上 www.timezls.com) Copyright © 2023. All Rights Reserved