所以,我一直在修补一个基本的防火墙插件,今天我偶然发现了一个问题。缓存。我忘了我已经安装了LightSpeed cache的一个测试站点,然后开始我的插件工作。我将其设置为错误日志,并开始尝试加载网站的主页。一个小时后,经过几十次刷新,仍然没有看到任何错误日志,我记住了缓存。无论我在缓存中插入了什么URI,它都完全控制了我的插件,并且基本上禁止了插件的加载。在我的插件的第一行,在错误日志中创建一个条目。。。没有什么我禁用缓存的那一刻,就有了错误日志。
LightSpeed唯一允许我的插件运行的时间是在管理端。不在公共方面。
所以,问题来了。如果您计划编写一些插件来获取传入的URI或IP或用户代理并对其进行处理,那么如果这些缓存插件完全绕过并基本上禁用了您的插件,您怎么能指望它工作呢?
如果这些缓存插件甚至拒绝让它加载和运行,你的插件怎么可能检测到它们呢?好的,所以您可以在插件激活期间开始查找目录和标题等,但假设它们在插件之后安装缓存。然后呢?
我已经尝试挂接wp、init、plugins\\u-load、muplugins\\u-load,lightspeed仍在设法绕过我的插件。
所以,让我们假设,无论出于什么疯狂的原因,我想阻止TOR出口节点的所有IP。如果缓存甚至不允许你的插件启动,你该如何阻止IP???
SO网友:Jacob Peattie
这就是缓存插件的全部要点。缓存插件允许页面正常加载所有插件,然后将结果保存为静态HTML页面。在指定的时间段内,或在缓存清空之前,未来的请求将直接发送到该HTML文件。这使得页面加载速度更快,因为WordPress和插件不需要再次运行。但正如你所指出的,这也有缺点。
所以,让我们假设出于任何疯狂的原因,我想阻止所有IP从TOR出口节点。如果缓存甚至不允许你的插件启动,你应该如何阻止IP???
如果安装了缓存插件,您可能无法仅通过WordPress插件完成此操作。最好的情况是什么都不被阻止,最坏的情况是缓存来自被阻止IP的请求,从而阻止所有人。
那么插件如何处理缓存呢?这取决于受影响的功能。
有些插件根本无法工作,需要将它们所在的任何页面从缓存中排除,或者需要将登录用户从缓存中排除。一些缓存插件有一个API,插件可以使用该API告诉缓存插件不要缓存给定的页面。例如WP Rocket looks for 常数,DONOTCACHEPAGE
. 如果该常量对于特定页面为true,则不会缓存该页面。在您的情况下,您将排除每个页面,因此这不是一个好的解决方案一些执行重定向的插件,如Redirection, 可以选择将重定向导出到服务器读取的Apache/Nginx文件。这样插件就不需要运行,因为服务器将处理重定向具有特定于用户的动态输出的插件,如WooCommerce的购物车,将使用AJAX异步加载数据。这些插件通常不会缓存AJAX请求因此,如果您的插件用于阻止来自某些IP的请求,我建议使用#2这样的插件,您可以选择在服务器上创建/更新负责阻止的文件。