【Flask】在Flask应用中使用Flask-Limiter进行简单CC攻击防御

news/2025/2/2 3:40:25/

前提条件

  • 已经有一个Flask应用。
  • 已经安装了Flask和redis服务。

步骤1:安装Redis和Flask-Limiter

首先,需要安装redisFlask-Limiter库。推荐在生产环境中使用Redis存储限流信息。

pip install redis Flask-Limiter

Flask-Limiter会通过redis存储限流信息,确保应用不会在高并发的情况下发生性能瓶颈。

步骤2:配置Redis连接

在Flask应用的配置文件中,指定Redis的连接地址。通常,Redis会运行在默认端口6379,并且你可以选择使用一个数据库(Redis默认有16个数据库,编号为0-15)。这里,我们使用0号数据库。

python"># config.py
REDIS_URL = "redis://127.0.0.1:6379/0"  # Redis连接地址和数据库编号

如果你使用的是Redis集群或其他定制的Redis服务,可以根据需要修改REDIS_URL

步骤3:设置Flask-Limiter

在Flask应用中初始化Flask-Limiter,并配置使用Redis作为存储。这一步将限制每个IP地址在一定时间内的请求次数,防止CC攻击。

Flask-Limiter配置

python">from flask import Flask, send_file, request
from flask_limiter import Limiter
import configapp = Flask(__name__)
# 绑定配置文件
app.config.from_object(config)# 设置Redis连接为Flask-Limiter的存储
limiter = Limiter(key_func=lambda: request.remote_addr,  # 获取用户IPapp=app,storage_uri=app.config['REDIS_URL'],  # Redis连接地址default_limits=["15 per minute"]  # 设置全局每分钟最多请求次数
)# 示例视图函数
@app.route('/')
@limiter.limit("15 per minute")  # 每个IP每分钟最多访问15次
def index():return send_file("static/index.html")@app.route("/favicon.ico", methods=["GET"])
@limiter.limit("15 per minute")  # 同样限制该视图的请求
def favicon():return send_file("static/favicon.ico")if __name__ == "__main__":port = 5000print(f"服务器已启动,监听:0.0.0.0:{port}")app.run(host="0.0.0.0", port=port)

步骤4:部署和测试

启动Redis服务: 确保Redis服务在本地或服务器上运行,默认端口是6379

启动Flask应用: 运行Flask应用并进行测试,确保限流机制有效。

我自己使用的是宝塔进行搭建Python的Flask项目,整体根据以上步骤是基表方便实现的。


http://www.ppmy.cn/news/1568595.html

相关文章

360大数据面试题及参考答案

数据清理有哪些方法? 数据清理是指发现并纠正数据文件中可识别的错误,包括检查数据一致性,处理无效值和缺失值等。常见的数据清理方法有以下几种: 去重处理:数据中可能存在重复的记录,这不仅会占用存储空间,还可能影响分析结果。通过对比每条记录的关键属性,若所有关键…

【硬件测试】基于FPGA的QPSK+帧同步系统开发与硬件片内测试,包含高斯信道,误码统计,可设置SNR

目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1QPSK 2.2 帧同步 3.Verilog核心程序 4.开发板使用说明和如何移植不同的开发板 5.完整算法代码文件获得 1.算法仿真效果 本文是之前写的文章 《基于FPGA的QPSK帧同步系统verilog开发,包含testbench,高斯信道,误码统计,可…

IDEA创建修改gitee仓库

一、创建gitee仓库 创建gitee仓库 点击复制仓库地址 右击项目名 --> Open In --> Terminal 初始化仓库 git init 添加仓库地址 复制之前创建的仓库地址 git remote add origin 仓库地址 二、修改IDEA的gitee仓库 查询当前项目所在仓库 git remote -v 删除原仓库…

树莓派入门笔记(二)最常用的树莓派 Linux 命令及说明_树莓派系统命令

startx #树莓派进入图形界面 df -h #统计整体磁盘情况 du -sh #单独目录点用情况 软件安装删除 sudo apt-get install 软件名1 软件名2 软件名3…… #安装软件 sudo apt-get remove 软件名1 软件名2 软件名3…… #卸载软件 sudo apt-get remove –purge 软件名1 #卸载并清除配…

如何跨互联网adb连接到远程手机-蓝牙电话集中维护

如何跨互联网adb连接到远程手机-蓝牙电话集中维护 --ADB连接专题 一、前言 随便找一个手机,安装一个App并简单设置一下,就可以跨互联网的ADB连接到这个手机,从而远程操控这个手机做各种操作。你敢相信吗?而这正是本篇想要描述的…

WordPress Web Directory Free插件本地包含漏洞复现(附脚本)(CVE-2024-3673)

免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将…

【Django教程】用户管理系统

Get Started With Django User Management 开始使用Django用户管理 By the end of this tutorial, you’ll understand that: 在本教程结束时,您将了解: Django’s user authentication is a built-in authentication system that comes with pre-conf…

解决双系统引导问题:Ubuntu 启动时不显示 Windows 选项的处理方法

方法 1:检查 GRUB 引导菜单是否隐藏 启动进入 Ubuntu 系统。打开终端,输入以下命令编辑 GRUB 配置文件:sudo nano /etc/default/grub检查以下配置项: GRUB_TIMEOUT0:如果是 0,将其改为一个较大的值&#x…