VSGuard 是第一个使安全自动化的MCP服务器,适用于AI辅助开发。它将OWASP ASVS和OWASP LLM Top 10标准直接集成到您的AI编码工作流程中,在您编写代码时(而不是在部署后)捕获SQL注入、提示注入、弱认证和其他50多种漏洞。
此MCP服务器与Claude Code、Cursor和其他MCP客户端集成,以实现代码生成过程中的主动安全。通过提供以下内容,帮助AI代理从一开始就编写安全的代码:
check_security_requirements - 在编写代码前获取相关的ASVS要求scan_code - 根据ASVS映射分析代码中的漏洞suggest_fix - 生成带有解释的安全代码替代方案支持Cursor和Claude Code!使用基于HTTP的配置格式:
{
"mcpServers": {
"vsguard": {
"type": "http",
"url": "https://vsguard.fastmcp.app/mcp"
}
}
}
要通过Smithery自动安装VSGuard:
npx -y @smithery/cli install @harn1shmodi/vsguard
# 克隆仓库
git clone https://github.com/yourname/vsguard-mcp
cd vsguard-mcp
# 安装依赖
pip install -e .
{
"mcpServers": {
"vsguard": {
"command": "python",
"args": ["/绝对路径/to/vsguard-mcp/src/server.py"]
}
}
}
在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
在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,))
在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/
当前实现包括:
服务器从结构化的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("太短")
自定义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"
发现自动映射到ASVS要求:
所有响应都格式化以最大化LLM理解:
在data/asvs/中创建或编辑YAML文件:
requirements:
- id: "X.Y.Z"
level: 1
category: "您的类别"
requirement: "要求文本"
cwe: "CWE-XXX"
description: "详细说明"
implementation_guide: "如何实现"
code_examples:
- "示例代码"
在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"],
}
}
}
欢迎贡献!改进领域:
MIT许可证 - 详情见LICENSE文件。
对于问题、疑问或贡献,请在GitHub上打开一个issue。
用心构建,为了安全的AI辅助开发