返回市场
可视守护-mcp

可视守护-mcp

作者:harn1shmodi3 星标更新:2025-10-20

项目介绍

VSGuard MCP - 用于AI编码代理的安全护栏

smithery 徽章 ASVS Python License

VSGuard 是第一个使安全自动化的MCP服务器,适用于AI辅助开发。它将OWASP ASVS和OWASP LLM Top 10标准直接集成到您的AI编码工作流程中,在您编写代码时(而不是在部署后)捕获SQL注入、提示注入、弱认证和其他50多种漏洞。

概览

此MCP服务器与Claude Code、Cursor和其他MCP客户端集成,以实现代码生成过程中的主动安全。通过提供以下内容,帮助AI代理从一开始就编写安全的代码:

  • OWASP ASVS要求 - 基于ASVS v4.0的实时安全指导
  • 漏洞扫描 - 使用自定义ASVS规则的静态分析
  • 安全代码修复 - 提供可操作的修复建议及代码示例

功能

三大核心工具

  1. check_security_requirements - 在编写代码前获取相关的ASVS要求
  2. scan_code - 根据ASVS映射分析代码中的漏洞
  3. suggest_fix - 生成带有解释的安全代码替代方案

安全覆盖范围

  • ✅ 认证(ASVS 第2章)
  • ✅ 会话管理(ASVS 第3章)
  • ✅ 访问控制(ASVS 第4章)
  • ✅ 输入验证与注入预防(ASVS 第5章)
  • ✅ 加密(ASVS 第6-9章)
  • ✅ 数据保护

支持的语言

  • Python(主要)
  • JavaScript/TypeScript
  • Java, Go, Ruby, PHP, C/C++, C#, Rust(通过Semgrep)

快速开始

支持Cursor和Claude Code!使用基于HTTP的配置格式:

{
  "mcpServers": {
    "vsguard": {
      "type": "http",
      "url": "https://vsguard.fastmcp.app/mcp"
    }
  }
}

如果您更喜欢使用Smithery

要通过Smithery自动安装VSGuard:

npx -y @smithery/cli install @harn1shmodi/vsguard

如果您更喜欢远程安装

# 克隆仓库
git clone https://github.com/yourname/vsguard-mcp
cd vsguard-mcp

# 安装依赖
pip install -e .

配置Claude Code/Cursor的mcp.json

{
  "mcpServers": {
    "vsguard": {
      "command": "python",
      "args": ["/绝对路径/to/vsguard-mcp/src/server.py"]
    }
  }
}

使用示例

示例1:在代码生成过程中获取安全要求

在Claude桌面中:

创建一个用户登录端点,遵循asvs要求。

Claude将调用:

check_security_requirements(
    code_type="authentication",
    language="python"
)

响应:

# OWASP ASVS 安全要求

## 级别1要求(8)

### 2.1.1:密码安全
要求:验证用户设置的密码至少有12个字符长。

实施指南:
- 在用户注册和更改密码期间添加验证
- 拒绝少于12个字符的密码
- 考虑允许更长的密码(64+字符)

代码示例:
```python
def validate_password_length(password: str) -> bool:
    if len(password) < 12:
        raise ValueError("密码必须至少12个字符")
    return True

示例2:检查现有代码中的漏洞

在Claude桌面中:

你能检查登录逻辑代码中的安全问题吗?

Claude将调用:

scan_code(
    code="""def login(username, password):
    query = f"SELECT * FROM users WHERE username = '{username}'"
    cursor.execute(query)""",
    language="python"
)

响应:

❌ 扫描失败

总发现:1
- 🟠 高:1

违反的ASVS要求:5.3.4, 5.3.5

## 详细发现

### 1. 🟠 SQL注入
严重性:高
ASVS要求:5.3.4, 5.3.5

问题:
检测到SQL注入漏洞。用户输入直接拼接到SQL查询中。

位置:input.py:第2行

易受攻击的代码:
query = f"SELECT * FROM users WHERE username = '{username}'"

修复方法:
使用带占位符的参数化查询,而不是字符串拼接。

示例:
cursor.execute("SELECT * FROM users WHERE username = ?", (username,))

示例3:获取安全代码修复

在Claude桌面中:

如何修复这个SQL注入漏洞?

Claude将调用:

suggest_fix(
    vulnerable_code="cursor.execute(f'SELECT * FROM users WHERE id = {user_id}')",
    vulnerability_type="sql_injection",
    language="python"
)

响应:

# 安全修复建议

解决的ASVS要求:5.3.4, 5.3.5

## ❌ 易受攻击的代码
cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")

## ✅ 安全代码
cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))

# 或使用SQLAlchemy ORM:
from sqlalchemy import select
stmt = select(User).where(User.username == username)
user = session.execute(stmt).scalar_one_or_none()

测试

# 运行测试
pytest tests/

# 运行特定测试
pytest tests/test_asvs_loader.py

# 包含覆盖率
pytest --cov=src tests/

覆盖范围

当前实现包括:

  • 超过40项ASVS要求,涵盖认证、会话管理、输入验证和加密
  • 超过25项自定义Semgrep规则,检测常见漏洞
  • 超过10项修复模板,附带安全代码示例
  • 多种语言支持(Python, JavaScript, TypeScript等)

漏洞检测

  • SQL注入(ASVS 5.3.4, 5.3.5)
  • 跨站脚本(ASVS 5.3.3, 5.3.10)
  • 弱密码验证(ASVS 2.1.1, 2.1.7)
  • 弱加密(ASVS 6.2.2, 6.2.5)
  • 硬编码的秘密(ASVS 2.3.1, 14.3.3)
  • 会话管理问题(ASVS 3.x)
  • XML外部实体(XXE)(ASVS 5.5.2)
  • 命令注入(ASVS 5.3.4)
  • 更多...

工作原理

1. ASVS要求数据库

服务器从结构化的YAML文件加载OWASP ASVS v4.0要求:

requirements:
  - id: "2.1.1"
    level: 1
    category: "密码安全"
    requirement: "验证用户设置的密码至少有12个字符长。"
    cwe: "CWE-521"
    description: "密码应足够长..."
    implementation_guide: "在注册期间添加验证..."
    code_examples:
      - |
        if len(password) < 12:
            raise ValueError("太短")

2. 使用Semgrep进行静态分析

自定义Semgrep规则检测ASVS违规:

rules:
  - id: asvs-5-3-4-sql-injection
    pattern: cursor.execute(f"... {$VAR} ...")
    message: "ASVS 5.3.4: SQL注入漏洞"
    severity: ERROR
    metadata:
      asvs_id: "5.3.4"
      cwe: "CWE-89"

3. 智能映射

发现自动映射到ASVS要求:

  • 漏洞类型(sql_injection → ASVS 5.3.4)
  • CWE ID(CWE-89 → ASVS 5.3.4, 5.3.5)
  • 代码模式(登录端点 → 认证要求)

4. 优化LLM输出

所有响应都格式化以最大化LLM理解:

  • 清晰的结构,带有标题和章节
  • 带语法高亮的代码示例
  • 严重性指示器(🔴 🟠 🟡)
  • 可操作的修复步骤
  • ASVS要求引用

🔧 扩展服务器

添加新的ASVS要求

data/asvs/中创建或编辑YAML文件:

requirements:
  - id: "X.Y.Z"
    level: 1
    category: "您的类别"
    requirement: "要求文本"
    cwe: "CWE-XXX"
    description: "详细说明"
    implementation_guide: "如何实现"
    code_examples:
      - "示例代码"

添加自定义Semgrep规则

data/rules/中创建YAML文件:

rules:
  - id: custom-rule-id
    patterns:
      - pattern: vulnerable_pattern()
    message: "漏洞描述"
    severity: ERROR
    metadata:
      asvs_id: "X.Y.Z"
      cwe: "CWE-XXX"
      remediation: "如何修复"

添加修复模板

编辑src/fixes/templates.py

FIX_TEMPLATES = {
    "vulnerability_type": {
        "python": {
            "vulnerable": "# 不好的代码",
            "secure": "# 好的代码",
            "explanation": "为什么更好",
            "asvs_requirements": ["X.Y.Z"],
        }
    }
}

🤝 贡献

欢迎贡献!改进领域:

  1. 更多的ASVS要求 - 覆盖更多章节
  2. 更多的语言 - 扩展语言支持
  3. 更多的扫描器 - 集成Bandit,detect-secrets
  4. 更好的AI集成 - 改善LLM输出格式
  5. 性能 - 优化扫描速度

⚡ 由以下技术支持

  • FastMCP 2.0 - 适用于MCP服务器的现代Python框架
  • Semgrep - 静态分析引擎
  • OWASP ASVS - 安全验证标准

📝 许可证

MIT许可证 - 详情见LICENSE文件。

🔗 资源

🙏 致谢

  • OWASP为ASVS标准
  • Anthropic为MCP协议
  • Semgrep为扫描引擎

📧 支持

对于问题、疑问或贡献,请在GitHub上打开一个issue。


用心构建,为了安全的AI辅助开发