wordpress防止频繁请求

wordpress防止频繁请求

  • im000
    版主

    最近一直在折腾Wordpress,昨天在全局代码加入了频繁请求检测,防止暴力请求导致系统资源耗尽。全局加入js,统一检测,分种类限制。网站动态内容太多,本身访问负载压力就大很多,如果带有请求功能的元素,比如从,标签,可以一直快速点击,只要10个人瞬间就能制造大量请求,服务器无法负载,网站就暂停假死了。做demo的时候不需要考虑这些,只要网站好看,体验流畅就可以了。但当你决定做一个产品的时候,这个缺陷出一定要修复。姑且不用考虑恶意请求,就说手抖的用户多了,多点几下,也会造成巨大的资源浪费。

    最科学的方法是在设计请求链接的时候加入防抖措施, 同时防止恶意请求。但是我用的主题显然完全没考虑性能和安全问题,导致我修改起来很麻烦,只能通过投机取巧的办法限制恶意请求。我现在在每个页面都加入了保护机制,限制请求次数,超过次数则强制 退出页面,转到指定页面。这只能说是治标的方法,很多更优雅的解决方式,因为要做大动作,也舍弃了。wordpress的很多主题设计者,都是面向小客户的,做的都是demo性质的东西,和dz这样的成熟商业产品是有很大差距的。如果你知识做个博客,企业网站,或者一个小网店,那么wordpress是可以可以很快交付的。如果你和老王一样,用它来做功能复杂的社区,那要处理的bug,会特别的多,必须有思想准备。

    幸运的是,wordpress的核心代码,重要的插件比如buddypress,bbpress一经相当成熟了,我要做的仅仅是修修补补,最坏的情况就是有一天忍不了了,彻底重写这个主题,所有问题一并解决。

    暂且还是修修补补,同时抓紧内容建设。

    零弈社区
    管理员

    全局检测,对所有标签以及input执行累计请求检测,超过10次则警告并转到警告页面,这是为了防止自动点击软件和暴力点击。这段代码不影响正常用户体验,但可以有效阻止恶意点击请求。

    <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
    <script type="text/javascript">
    var inputClick=0;
    
    $(function() {
      $("input").on("click",function() {
    
            inputClick++;
            if(inputClick > 10){
    			   alert("别点了大哥!");
               window.location.replace("/click_me");
            }
    
      });
    });
    
    </script>

    将上列代码放置到主题的header.php中即可,如果你要限制的是Li或者button,甚至div,将input替换成对应的元素即可,这是jquery代码,支持一切可点击的元素。需要指出的是,最好使用插件(我用的是Head, Footer and Post Injections),而不是修改php文件,因为以后你还要放置站长工具代码,验证页面归属代码等等,都修改文件会很麻烦。另外wp-login.php不执行这段代码,你需要使用钩子加入一个新的JS文件到wp-login.php。wp-login.php可以增加验证码,有插件可以实现,另外有的安全插件可以对频繁请求的IP进行屏蔽,怎么选择看自己喜好。

    这个是比较差的解决方案,优雅,low。比较优雅的办法,是修改CSS的pointer-event属性,点击之后设置其为none,延迟1秒之后设置为auto,实测在测试页面按钮上是可以用的,但是在我的环境中,无法实现,我没去深究。由于时间有限我将代码存在笔记中,以后有时间重写主题再使用优雅的解决方案。最好重写的时候,就对请求进行安全设计,避免这些可以暴力点击的沙雕代码。

    im000
    版主

    已经在各处增加代码,防止发送空请求。已经在门户文章分享代码,有兴趣的可以到创业笔记栏目阅读。

正在查看 3 个帖子:1-3 (共 3 个帖子)

哎呀,回复话题必需登录。

首页门户导航动态群组
论坛首页创业帮自媒体挨踢协会
墓志铭疯人院中年危机搜索