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开发, 中间件, 无后门, 逆向工具, 防护工具