• 032.CI4框架CodeIgniter,使用throttle类进行IP频繁访问限制,一段时间内限制某IP只GET/POST多少次


    01.我们在App/Filters目录中创建一个Throttle.php文件,其中写的是1分钟内只能访问10次,如果超出了1秒才能访问一次,代码如下:

    <?php namespace AppFilters;
    
    use CodeIgniterFiltersFilterInterface;
    use CodeIgniterHTTPRequestInterface;
    use CodeIgniterHTTPResponseInterface;
    use ConfigServices;
    
    class Throttle implements FilterInterface
    {
        //这是一个为应用程序使用 Trottler 类来实现速率限制的实例
        public function before(RequestInterface $request)
        {
            $throttler = Services::throttler();
    
            // 在整个站点上将IP地址限制为每秒不超过1个请求
            if ($throttler->check($request->getIPAddress(), 10, MINUTE) === false) {
                return Services::response()->setStatusCode(429);
            }
        }
    
        //暂时无事可做
        public function after(RequestInterface $request, ResponseInterface $response)
        {
        }
    }

    02.我们在App/Config/Filters文件中,写入以下代码:

        public $aliases = [
            'csrf'     => CodeIgniterFiltersCSRF::class,
            'toolbar'  => CodeIgniterFiltersDebugToolbar::class,
            'honeypot' => CodeIgniterFiltersHoneypot::class,
            'throttle' => AppFiltersThrottle::class,
        ];
        public $methods = [
            'post' => ['throttle', 'CSRF'],
            'get'  => ['throttle'],
        ];

    03. 我们在controller控制器中写入一段输出的代码

    <?php namespace AppControllers;
    
    class Hello extends BaseController
    {
        //http://127.0.0.1/CI4/public/index.php/hello/
    
        function __construct()
        {
        }
    
        public function index()
        {
            echo '青青子衿悠悠我心' . rand(100, 999);
        }
        //--------------------------------------------------------------------
    }

    04.打开浏览器,我们浏览器访问http://127.0.0.1/CI4/public/index.php/hello/,效果如下

    05.我们1分钟超过10次访问http://127.0.0.1/CI4/public/index.php/hello/之后,会发现浏览器无法显示。需要等2秒再访问,这样就很完美的起到了限制IP频繁访问的作用了。

    原创不易,如果您认为这篇文章有价值,认同作者的付出,可以微信二维码打赏任意金额给作者(微信号:382477247)哦,谢谢。

     

  • 相关阅读:
    SSDB安装配置记录
    Ubuntu上通过nginx部署Django笔记
    PyCharm创建virtualenv方法
    Python3--列表生成式
    K最近邻算法项目实战
    K最近邻算法
    人工智能之机器学习
    C#把汉字转换成16进制(HEX)并向串口发送数据
    Ubuntu-18.04.2系统 Nginx+uWSGI+Django 部署生产环境
    HTTP响应状态码说明
  • 原文地址:https://www.cnblogs.com/tianpan2019/p/12410409.html
Copyright © 2020-2023  润新知