SharkEyes-Dev/SharkEyes-Shield

GitHub: SharkEyes-Dev/SharkEyes-Shield

一个专为 FastAPI 设计的轻量级 WAF 中间件,通过 Bot 检测、Header 校验、敏感路径拦截和 payload 大小限制来提供基础 Web 应用防护。

Stars: 1 | Forks: 0

# SharkEyes Shield Lite 一个专为 FastAPI 设计的轻量级、高性能中间件,用于提供基础的 Web 应用保护(WAF)。它可以过滤简单的恶意 Bot,拦截自动化的简易扫描器,并在应用层执行严格的 payload 大小限制。 ## 功能 * **Bot 和扫描器检测:** 使用预编译的正则表达式,立即拒绝来自简单恶意解析器、自动化质量控制工具和安全扫描器(例如 `curl`、`selenium`、`sqlmap`、`ahrefs`)的请求。 * **Header 验证:** 通过检查 User-Agent 字符串的长度,确保请求中存在 User-Agent 和 Accept header。 * **路径保护:** 拦截对隐藏文件和已知敏感路径(例如 `.env`、`wp-admin`)的访问。 * **Payload 控制:** 限制数据修改方法(`POST`、`PUT`、`PATCH`)的最大文件大小(`Content-Length`)。 ## 快速开始 ### 1. 集成 将中间件添加到你的 FastAPI 应用中: Python ``` from fastapi import FastAPI from config import BAD_PATHS, MAX_FILE_SIZE app = FastAPI() def block_response(reason: str): logger.warning(f"Blocked request: {reason}") return JSONResponse( content={"detail": REASON}, status_code=status.HTTP_403_FORBIDDEN ) @app.middleware("http") async def shakeyes_shield_lite(request: Request, call_next): user_agent = request.headers.get("user-agent", "") accept = request.headers.get("accept", "") if not accept or not user_agent: return block_response("Missing accept header or user agent ") if not (10 <= len(user_agent) <= 253): return block_response("Strange User Agent Length") if AGENT_REGEX.search(user_agent): return block_response("Blocked user agent") if request.url.path.startswith(BAD_PATHS): return block_response("Attempt to access bad path ") if request.method in ("PUT", "POST", "PATCH"): content_type = request.headers.get("content-type", "") content_length = request.headers.get("content-length", "") if not content_length or not content_type: return block_response("Missing content type or content ength") try: if int(content_length) > MAX_FILE_SIZE: return block_response("File size limit") except ValueError: return block_response("Bad type of content-length") return await call_next(request) @app.get("/") async def root(): return {"message": "Secure Hello World"} ``` ### 安全处理流程 [Client 请求] │ ├──► [ 检查 Header ] ───► 缺失或格式错误? ──►403 Forbidden ├──► [ 检查 Bot 正则 ] ──► 匹配黑名单? ────► 403 Forbidden ├──► [ 检查恶意路径 ] ──► 受限路径? ─────► 403 Forbidden ├──► [ 检查 Payload ] ───► 大小 > MAX_FILE_SIZE? ──►403 Forbidden │ [ FastAPI Router ](请求安全) ### 日志与监控 该防护盾利用 Python 内置的 logging 模块。所有被拦截的请求都会以 WARNING 级别进行记录,并提供建拦截原因,这些日志可以轻松导入到 ELK Stack、Grafana Loki 或 Datadog 等工具中。 许可证 [**Apache-2.0 许可证**](https://github.com/SharkEyes-Dev/SharkEyes-Shield?tab=Apache-2.0-1-ov-file)
标签:AV绕过, FastAPI, Python, Syscall, WAF, Web开发, 中间件, 无后门, 逆向工具, 防护工具