flask中安全策略简要说明

问题:针对服务安全基础策略

策略一、接口入参长度限制

策略二、接口入参不接收特殊字符

解决方案:

一、flask对象实例化后,提供有config配置

复制代码
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024  # 设置为16MB

二、flask有提供参数校验前的函数,可以以装饰器的方式调用实现接收参数前的处理

from flask import Flask, request, jsonify

app = Flask(name)

定义一个函数来校验参数中是否包含特殊字符

def validate_parameters(params):

for key, value in params.items():

if not isinstance(value, str):

continue

if any(char in value for char in '\<', '\>', '\&', '"', "'", ';', '\\\\'):

return False

return True

@app.before_request

def before_request():

if request.method in 'POST', 'PUT':

if 'application/json' in request.headers.get('Content-Type', ''):

params = request.get_json()

else:

params = request.form

if not validate_parameters(params):

return jsonify({'error': 'Parameters contain special characters'}), 400

@app.route('/your-endpoint', methods='POST')

def your_endpoint():

这里可以安全地使用参数,因为它们已经被校验过不包含特殊字符

data = request.get_json() if request.is_json else request.form

处理你的逻辑...

return jsonify({'message': 'Success'}), 200

if name == 'main':

app.run(debug=True)

小结:提供前置函数,这个思想非常值得学习。本来还在考虑,按正常操作,会需要给每一个路由都添加指定的方法来实现逻辑筛选,这种常规思维的方式会让工作量变的很大。做许多没有意义的事情。后续这个思想会需要继续进行深化

相关推荐
葫芦和十三11 小时前
图解 MongoDB 05|文档模型设计:内嵌 vs 引用,反范式不是免费午餐
后端·mongodb·agent
不能放弃治疗14 小时前
单 Agent 实现模式
后端
兵慌码乱15 小时前
基于 MediaPipe 与 PySide2 的手势交互音乐控制系统实现:轻量化视觉交互全流程解析
python·opencv·计算机视觉·人机交互·手势识别·mediapipe·pyside2
IT_陈寒16 小时前
Redis内存爆了,原来我漏掉了这个致命配置
前端·人工智能·后端
fliter17 小时前
最后一块拼图:用 bitvec 构造 IPv4 包,真正做出自己的 Ping
后端
luckdewei18 小时前
FastAPI 资产管理系统实战:复杂 ORM 关联、Alembic 迁移与 N+1 查询优化
python
fliter18 小时前
用 Rust 解析并生成 ICMP 包:checksum、nom 与 cookie-factory
后端
蝎子莱莱爱打怪18 小时前
XZLL-IM干货系列 03|消息 ID 设计:一个 UUID 搞不定的事,我用两个 ID 解决了
后端·面试·开源
fliter18 小时前
从 panic 到 Result:用 Rust 重新整理一个 ping 项目的错误处理
后端
森蓝情丶19 小时前
我给 AI 搭了个法庭:一个前端仔的 LangGraph 实战全记录
前端·后端