Gagancm/arcis
GitHub: Gagancm/arcis
一行代码集成、覆盖 15 种攻击向量的跨语言安全中间件,为 Node.js、Python 和 Go 应用提供运行时输入净化与威胁防护。
Stars: 0 | Forks: 0
# Arcis
[](https://www.npmjs.com/package/@arcis/node)
[](https://pypi.org/project/arcis/)
[](https://opensource.org/licenses/MIT)
[](https://github.com/Gagancm/arcis/actions/workflows/ci.yml)
适用于 Node.js、Python 和 Go 的单行安全中间件。
Arcis 保护你的代码,就像 Dependabot 保护你的依赖项一样。
**处理 15 种攻击向量。1040+ 项测试。零依赖。**
| 类别 | 拦截内容 |
|----------|--------------|
| XSS | 脚本注入、事件处理程序、`javascript:` URI、SVG/iframe 载荷 |
| SQL 注入 | 关键字、布尔逻辑、注释、基于时间的盲注(`SLEEP`、`BENCHMARK`) |
| NoSQL 注入 | MongoDB 操作符(拦截 `$gt`、`$where`、`$regex` 等 25+ 种操作符) |
| 命令注入 | Shell 元字符、危险命令、重定向 |
| 路径遍历 | `../`、编码变体(`%2e%2e`)、空字节注入 |
| 原型污染 | `__proto__`、`constructor`、`__defineGetter__`,拦截 7 个键(不区分大小写) |
| HTTP Header 注入 | CRLF 注入、响应拆分、空字节 |
| SSRF | 私有 IP、环回地址、链路本地地址、云元数据、危险协议 |
| 开放重定向 | 绝对 URL、`javascript:`、协议相对 URL、反斜杠/控制字符绕过 |
| 错误信息泄露 | 在生产环境中清理堆栈跟踪、数据库错误、连接字符串、内部 IP |
| CORS 配置错误 | 基于白名单的源、拦截 `null` 源、强制执行 `Vary: Origin` |
| Cookie 安全 | 对所有 Cookie 强制执行 HttpOnly、Secure、SameSite |
| 速率限制 | 基于单个 IP,支持内存或 Redis,包含 `X-RateLimit-*` 响应头 |
| 安全响应头 | CSP、HSTS、X-Frame-Options,开箱即用 10 个响应头 |
| 输入验证 | 类型检查、范围、枚举、批量赋值防护、安全日志记录 |
## 安装
```
npm install @arcis/node # Node.js
pip install arcis # Python
go get github.com/GagancM/arcis # Go
```
## 快速开始
### Node.js
Arcis 分为两层:可在任何地方运行的**框架无关核心函数**,以及针对特定框架的**中间件适配器**。
#### 使用 Express(内置适配器)
```
import { arcis } from '@arcis/node';
app.use(arcis());
// That's it. Sanitization, rate limiting, and security headers are on.
```
#### 使用任何框架(Fastify、Koa、Hono 等)
核心的清理、验证和日志功能不依赖任何框架。你可以直接在任何 Node.js 项目中使用它们:
```
import {
sanitizeString,
sanitizeObject,
detectXss,
detectSql,
detectCommandInjection,
detectPathTraversal,
createSafeLogger,
createRedactor,
} from '@arcis/node';
// Sanitize user input — works anywhere
const clean = sanitizeString(userInput);
const cleanBody = sanitizeObject(requestBody);
// Detect threats without sanitizing
if (detectXss(value)) { /* reject */ }
if (detectSql(value)) { /* reject */ }
// Safe logging — no framework needed
const logger = createSafeLogger();
logger.info('User login', { email, password: 'will-be-redacted' });
```
**编写自己的中间件非常简单。** 这是一个 Fastify 示例:
```
import { sanitizeObject } from '@arcis/node';
fastify.addHook('preHandler', async (request, reply) => {
if (request.body) request.body = sanitizeObject(request.body);
if (request.query) request.query = sanitizeObject(request.query);
});
```
Koa:
```
import { sanitizeObject } from '@arcis/node';
app.use(async (ctx, next) => {
if (ctx.request.body) ctx.request.body = sanitizeObject(ctx.request.body);
if (ctx.query) ctx.query = sanitizeObject(ctx.query);
await next();
});
```
Hono:
```
import { sanitizeObject } from '@arcis/node';
app.use('*', async (c, next) => {
const body = await c.req.json().catch(() => null);
if (body) c.set('sanitizedBody', sanitizeObject(body));
await next();
});
```
### Python
```
# Flask
from arcis import Arcis
Arcis(app)
# FastAPI
from arcis import ArcisMiddleware
app.add_middleware(ArcisMiddleware)
# Django — 在 settings.py 中添加到 MIDDLEWARE
'arcis.django.ArcisMiddleware'
```
### Go
```
// Gin
r.Use(arcisgin.Middleware())
// Echo
e.Use(arcisecho.Middleware())
```
## 功能概述
只需一行 `app.use(arcis())` 即可获得上述所有 15 个类别的防护。或者使用单独的函数进行精细化控制:
- **清理(Sanitize)** — `sanitizeString()`、`sanitizeObject()` 剥离危险模式
- **检测(Detect)** — `detectXss()`、`detectSql()`、`detectHeaderInjection()` 标记威胁而不修改输入
- **验证(Validate)** — `validateUrl()` 阻止 SSRF,`validateRedirect()` 阻止开放重定向
- **保护(Protect)** — 速率限制、安全响应头、安全日志记录、错误处理
## 架构
Arcis 将**核心安全逻辑**与**框架适配器**分离:
```
@arcis/node
├── Core (framework-agnostic)
│ ├── sanitizeString / sanitizeObject — clean any input
│ ├── detectXss / detectSql / ... — threat detection
│ ├── createSafeLogger / createRedactor — safe logging
│ ├── MemoryStore / RedisStore — rate limit backends
│ └── Error classes and constants
│
└── Adapters (framework-specific)
└── Express middleware (arcis(), arcis.sanitize(), arcis.rateLimit(), ...)
```
核心函数是纯函数 —— 不涉及 `req`、`res` 或 `next`。它们接收值并返回值。这意味着它们可以与 Express、Fastify、Koa、Hono、Nest、原始 `http.createServer`、Bun、Deno、Serverless 函数或其他任何环境一起使用。
子路径导入(Subpath imports)可用于 tree-shaking:
```
import { sanitizeString } from '@arcis/node/sanitizers';
import { createSafeLogger } from '@arcis/node/logging';
import { MemoryStore } from '@arcis/node/stores';
```
## 支持的框架
| SDK | 内置适配器 | 核心函数 | 状态 |
|-----|-------------------|----------------|--------|
| Node.js | Express | 适用于任何框架 | 稳定版 |
| Python | Flask, FastAPI, Django | 独立运行 | 稳定版 |
| Go | net/http, Gin, Echo | 独立运行 | 稳定版 |
| Java | Spring Boot | — | 计划中 |
| C# | ASP.NET Core | — | 计划中 |
**Node.js 路线图:** 计划为 Fastify、Koa 和 Hono 提供内置适配器。核心函数已经可以在这些框架中工作 —— 你只需编写一个简短的中间件封装(参见上面的示例)。
## 工作原理
所有 SDK 在运行时从共享的 `patterns.json` 加载安全模式。通过共享规范(`API_SPEC.md`)和测试向量(`TEST_VECTORS.json`)确保跨语言行为的一致性。
## 文档
详细的配置、API 参考、Redis 设置、精细化中间件用法和架构文档请参阅 [Wiki](https://github.com/Gagancm/arcis/wiki)。
## 贡献
1. 所有更改必须通过现有测试
2. 新功能需要提供与 `spec/TEST_VECTORS.json` 对齐的测试用例
3. 对 `packages/core/patterns.json` 中模式的更改必须在所有 SDK 中同步反映
## 许可证
MIT
标签:API安全, API密钥检测, CISA项目, CORS配置, DevSecOps, GNU通用公共许可证, Go, HTTP安全, JSON输出, MITM代理, Node.js, NoSQL注入, Python, Ruby工具, SQL注入防护, SSRF防护, TLS, WAF, Web安全, XML 请求, XSS防护, 上游代理, 中间件, 原型污染, 命令注入, 安全头, 安全开发, 应用防火墙, 搜索引擎查询, 无后门, 日志审计, 漏洞缓解, 网络安全, 网络安全审计, 自动化攻击, 自动化防护, 蓝队分析, 路径遍历, 输入验证, 逆向工具, 防御工具, 隐私保护