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

前提条件

  • 已经有一个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 config

app = Flask(__name__)
# 绑定配置文件
app.config.from_object(config)

# 设置Redis连接为Flask-Limiter的存储
limiter = Limiter(
    key_func=lambda: request.remote_addr,  # 获取用户IP
    app=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 = 5000
    print(f"服务器已启动,监听:0.0.0.0:{port}")
    app.run(host="0.0.0.0", port=port)

步骤4:部署和测试

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

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

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

相关推荐
有来技术6 小时前
Spring Boot 4 + Vue3 企业级多租户 SaaS:从共享 Schema 架构到商业化套餐设计
java·vue.js·spring boot·后端
浒畔居7 小时前
机器学习模型部署:将模型转化为Web API
jvm·数据库·python
抠头专注python环境配置7 小时前
基于Pytorch ResNet50 的珍稀野生动物识别系统(Python源码 + PyQt5 + 数据集)
pytorch·python
百***78757 小时前
Kimi K2.5开源模型实战指南:核心能力拆解+一步API接入(Python版,避坑全覆盖)
python·microsoft·开源
喵手7 小时前
Python爬虫实战:针对天文历法网站(以 TimeandDate 或类似的静态历法页为例),构建高精度二十四节气天文数据采集器(附xlsx导出)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集天文历法网站数据·构建二十四节气天文数据
东东5167 小时前
学院个人信息管理系统 (springboot+vue)
vue.js·spring boot·后端·个人开发·毕设
zhaotiannuo_19987 小时前
Python之2.7.9-3.9.1-3.14.2共存
开发语言·python
Keep_Trying_Go8 小时前
基于GAN的文生图算法详解ControlGAN(Controllable Text-to-Image Generation)
人工智能·python·深度学习·神经网络·机器学习·生成对抗网络·文生图
三水不滴8 小时前
Redis缓存更新策略
数据库·经验分享·redis·笔记·后端·缓存
LostSpeed8 小时前
openpnp - python2.7 script - 中文显示乱码,只能显示英文
python·openpnp