Gagancm/arcis

GitHub: Gagancm/arcis

一行代码集成、覆盖 15 种攻击向量的跨语言安全中间件,为 Node.js、Python 和 Go 应用提供运行时输入净化与威胁防护。

Stars: 0 | Forks: 0

# Arcis [![npm version](https://img.shields.io/npm/v/@arcis/node.svg)](https://www.npmjs.com/package/@arcis/node) [![PyPI version](https://img.shields.io/pypi/v/arcis.svg)](https://pypi.org/project/arcis/) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/85d66ec734012305.svg)](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防护, 上游代理, 中间件, 原型污染, 命令注入, 安全头, 安全开发, 应用防火墙, 搜索引擎查询, 无后门, 日志审计, 漏洞缓解, 网络安全, 网络安全审计, 自动化攻击, 自动化防护, 蓝队分析, 路径遍历, 输入验证, 逆向工具, 防御工具, 隐私保护