发送fastapi请求时,为防止SQL注入,想要校验字符型参数是否包含敏感词,比如insert delete update truncate = 等,如何使用正则表达式对这些敏感词进行校验,同时忽略大小写。
1条回答 默认 最新
- 专家-司宇[在线] 2024-08-04 02:10关注
引自免费微信小程序:皆我百晓生
在FastAPI中,你可以使用依赖注入和中间件来验证请求参数是否包含敏感词。这里是一个简单的示例,展示如何使用FastAPI和依赖注入来验证请求参数是否包含敏感词,并且使用正则表达式来忽略大小写。同时我会给出一个Python的完整代码示例:
首先,我们需要定义一个依赖函数,用于检查参数是否包含敏感词。我们可以创建一个函数来验证这些词是否存在于查询参数或路径参数中,并通过HTTP响应告诉客户端其参数的有效性。你可以修改正则表达式来匹配其他你想要的敏感词,并通过该函数进行修改:
import re from fastapi import FastAPI, Depends, status from fastapi.exceptions import HTTPException from fastapi.middleware.httpx_headers import AsyncHeadersMiddleware from typing import Annotated app = FastAPI() app.add_middleware(AsyncHeadersMiddleware) # 如果你使用的是异步中间件的话需要添加这一行 # 定义敏感词列表,你可以根据需要添加更多的敏感词到列表中 sensitive_words = ['insert', 'delete', 'update', 'truncate'] sensitive_word_pattern = re.compile('|'.join(sensitive_words), re.IGNORECASE) # 创建正则表达式忽略大小写匹配敏感词列表中的词 async def validate_params(request): # 创建依赖函数来验证参数是否包含敏感词 params = await request.params() # 获取所有请求参数值,可以按需修改为其他方式获取参数值,如查询参数或路径参数等 for key, value in params.items(): # 遍历所有参数值进行校验 if sensitive_word_pattern.search(value): # 如果找到敏感词则抛出异常终止请求处理并返回错误信息给客户端 raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=f"Detected sensitive word '{value}' in parameter '{key}'") return {} # 返回空的字典表明未检测到敏感词(即通过验证)或者可以返回其他信息如成功消息等(按需修改) @app.get("/") # 以 GET 请求为例演示使用依赖注入的方式实现参数的校验功能 async def get_resource(params: Annotated[dict] = Depends(validate_params)): # 使用依赖注入方式传入校验后的参数列表(如果校验不通过则不会执行后续逻辑) # 这里是处理请求的逻辑代码,你可以根据自己的业务需求进行处理... 进行正常的逻辑处理。这里没有依赖请求的具体路径参数等特性直接展示了概念框架而已。需要结合实际需求替换具体的业务逻辑代码。注意如果validate_params抛出异常则不会执行后续逻辑。请按需修改处理逻辑代码以适应你的应用需求。 return {'message': 'Parameters passed validation successfully.'} # 返回成功信息表示参数通过了验证处理(按需修改) ... pass 结束点注解:通过依赖注入的方式,在路由函数处理之前先进行参数的校验工作,保证传入参数的安全性,提高了应用的健壮性。通过中间件的使用进一步增强了请求处理的灵活性和扩展性。请根据实际需求修改路由函数以及中间件的配置以满足应用的需求。请根据实际情况修改异常处理机制以确保应用能妥善处理各种异常情况。在实际应用中还需要考虑其他因素如错误处理、日志记录等。同时请确保敏感词列表和正则表达式根据实际需求进行更新和维护以确保应用的安全性和可靠性。注意在真实环境中还需要考虑性能和效率问题以及并发访问情况下的同步问题(如有必要)。以上只是一个基本的概念性演示并不是真实世界环境的完美解决方案还需要进行完善和调整以满足你的特定需求和目标架构。(已根据你问题的内容解释了具体示例代码的含义和用法)
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
- ¥50 浦育平台scratch图形化编程
- ¥20 求这个的原理图 只要原理图
- ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
- ¥20 微信的店铺小程序如何修改背景图
- ¥15 UE5.1局部变量对蓝图不可见
- ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
- ¥20 sentry如何捕获上传Android ndk 崩溃
- ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
- ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?