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

ops/2025/3/6 4:25:42/

前提条件

  • 已经有一个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/ops/154727.html

相关文章

2025年01月31日Github流行趋势

项目名称:Qwen2.5项目地址url:https://github.com/QwenLM/Qwen2.5项目语言:Shell历史star数:13199今日star数:459项目维护者:jklj077, JustinLin610, bug-orz, huybery, JianxinMa项目简介:Qwen…

DeepSeek模型:开启人工智能的新篇章

DeepSeek模型:开启人工智能的新篇章 在当今快速发展的技术浪潮中,人工智能(AI)已经成为了推动社会进步和创新的核心力量之一。而DeepSeek模型,作为AI领域的一颗璀璨明珠,正以其强大的功能和灵活的用法&…

前端八股CSS:盒模型、CSS权重、+与~选择器、z-index、水平垂直居中、左侧固定,右侧自适应、三栏均分布局

一、盒模型 题目:简述CSS的盒模型 答:盒模型有两种类型,可以通过box-sizing设置 1.标准盒模型(content-box):默认值,宽度和高度只包含内容区域,不包含内边距、边框和外边距。 2.边框盒模型&a…

C++初阶 -- 初识STL和string类详细使用接口的教程(万字大章)

目录 一、STL 1.1 什么是STL 1.2 STL的版本 1.3 STL的六大组件 二、string类 2.1 string类的基本介绍 2.2 string类的默认成员函数 2.2.1 构造函数 2.2.2 析构函数 2.2.3 赋值运算符重载 2.3 string类对象的容量操作 2.3.1 size和length 2.3.2 capacity 2.3.3 r…

实验二 数据库的附加/分离、导入/导出与备份/还原

实验二 数据库的附加/分离、导入/导出与备份/还原 一、实验目的 1、理解备份的基本概念,掌握各种备份数据库的方法。 2、掌握如何从备份中还原数据库。 3、掌握数据库中各种数据的导入/导出。 4、掌握数据库的附加与分离,理解数据库的附加与分离的作用。…

MapReduce简单应用(一)——WordCount

目录 1. 执行过程1.1 分割1.2 Map1.3 Combine1.4 Reduce 2. 代码和结果2.1 pom.xml中依赖配置2.2 工具类util2.3 WordCount2.4 结果 参考 1. 执行过程 假设WordCount的两个输入文本text1.txt和text2.txt如下。 Hello World Bye WorldHello Hadoop Bye Hadoop1.1 分割 将每个文…

OceanBase 读写分离探讨

版本信息 OceanBase: 4.2.1.10 OBProxy: 4.3.3.0 租户类型: MySQL租户 弱一致性读 官方声明 默认情况下,所有的请求都是发送到数据的 Leader 副本上,即强一致性的请求,因为 OLAP 的分析计算,一般对于数据的一致性要求不高&…

创建前端项目的方法

目录 一、创建前端项目的方法 1.前提:安装Vue CLI 2.方式一:vue create项目名称 3.方式二:vue ui 二、Vue项目结构 三、修改Vue项目端口号的方法 一、创建前端项目的方法 1.前提:安装Vue CLI npm i vue/cli -g 2.方式一&…