TTokenySpace
返回 Skills 列表

代码安全审计员(免费版)

提供基于OWASP Top 10的代码安全审计检查,支持安全编码模式对比、输入验证和认证安全自检,适合开发者安全审查。

#中文
0

安装到 Tokeny(自动)

下载 ZIP
安装"security-auditor-tool-free"技能
技能信息:
- 名称: 代码安全审计员(免费版)
- 标识: security-auditor-tool-free
- 描述: 提供基于OWASP Top 10的代码安全审计检查,支持安全编码模式对比、输入验证和认证安全自检,适合开发者安全审查。
- 版本: 1.0.0
下载地址:
https://www.tokeny.space/api/skills/security-auditor-tool-free/download
继续

复制上方内容到 Tokeny 客户端并在会话中发送即可自动安装;也可直接 下载 ZIP并拖动到技能窗口安装。

SKILL.md

代码安全审计员(免费版)

概述

代码安全审计员免费版是一款面向开发者的代码安全审查工具。基于 OWASP Top 10:2021 安全框架,提供涵盖访问控制、加密失败、注入、XSS、配置错误等核心漏洞类型的审计检查清单。每个漏洞类型包含 BAD/GOOD 代码对比示例,帮助开发者快速理解安全编码模式与反模式,并提供可操作的修复建议.

核心能力

OWASP Top 10 检查清单

编号漏洞类型严重等级检查要点
A01访问控制失效HIGH认证检查、授权验证、CORS配置
A02加密失败HIGH密码哈希、数据加密、TLS配置
A03注入CRITICALSQL注入、命令注入、参数化查询
A05安全配置错误MEDIUM默认凭据、错误信息泄露、安全头
A07身份认证失败HIGHJWT安全、Cookie配置、速率限制

处理: 解析OWASP Top 10 检查清单的输入参数,完成核心逻辑,返回结构化响应. 输出: 返回OWASP Top 10 检查清单的响应数据,包含状态码、结果和日志.

免费版与专业版对比

功能免费版专业版
OWASP覆盖Top 5Top 10全覆盖
代码示例TypeScriptTS+Python+Go+Java
审计报告文本格式HTML/PDF/SARIF
自动扫描不支持AST静态分析
框架支持Next.js/Express10+框架
合规映射不支持PCI-DSS/OWASP ASVS
持续监控不支持Git Hook集成

处理: 解析免费版与专业版对比的输入参数,完成核心逻辑,返回结构化响应. 输出: 返回免费版与专业版对比的响应数据,包含状态码、结果和日志.

核心功能执行

input_params参数进行配置.

处理: 解析核心功能执行的输入参数,完成核心逻辑,返回结构化响应. 输出: 返回核心功能执行的响应数据,包含状态码、结果和日志.

  • 执行此能力时使用input_params参数,支持创建/查询/导出操作 能力覆盖范围:本skill的核心能力覆盖以下场景关键词:代码审计、含安全编码模式、输入验证、认证安全检查、适合开发者自检、核心能力、安全审计检查清单、安全编码模式与反、模式对比、输入验证与文件上、传安全、认证与、安全最佳实践、HTTP、头配置指南、依赖安全扫描命令等。这些关键词对应description中声明的使用场景,均已在上述能力点中提供对应的操作支持.

使用场景

场景一:SQL注入审计

检查代码中是否存在SQL注入漏洞. BAD - 存在注入:

// ❌ 字符串拼接,存在SQL注入风险
const query = `SELECT * FROM users WHERE email = '${email}'`
const result = await db.query(query)

GOOD - 参数化查询:

// ✅ 使用参数化查询
const user = await db.query('SELECT * FROM users WHERE email = $1', [email])
// ...
// ✅ 使用ORM内置安全查询
const user = await prisma.user.findUnique({ where: { email } })

检查要点:

  • 所有数据库查询使用参数化语句或ORM
  • 查询中无字符串拼接
  • OS命令执行使用参数数组,而非shell字符串
  • 用户输入不用于 eval()Function()

场景二:访问控制审计

// ❌ BAD: 无授权检查
app.delete('/api/posts/:id', async (req, res) => {
  await db.post.delete({ where: { id: req.params.id } })
  res.json({ success: true })
})
// ...
// ✅ GOOD: 验证身份和权限
app.delete('/api/posts/:id', authenticate, async (req, res) => {
  const post = await db.post.findUnique({ where: { id: req.params.id } })
  if (!post) return res.status(404).json({ error: 'Not found' })
  if (post.authorId !== req.user.id && req.user.role !== 'admin') {
    return res.status(403).json({ error: 'Forbidden' })
  }
  await db.post.params.id } })
  res.json({ success: true })
})

场景三:认证安全审计

检查JWT和Cookie安全配置.

import { SignJWT, jwtVerify } from 'jose'
// ...
const secret = new TextEncoder().encode(process.env.JWT_SECRET)
// ...
// ✅ 安全的JWT创建
export async function createToken(payload: { userId: string; role: string }) {
  return new SignJWT(payload)
    .setProtectedHeader({ alg: 'HS256' })
    .setIssuedAt()
    .setExpirationTime('15m')  // 短期访问令牌
    .setAudience('your-app')
    .setIssuer('your-app')
    .sign(secret)
}
// ...
// ✅ 安全的JWT验证
export async function verifyToken(token: string) {
  try {
    const { payload } = await jwtVerify(token, secret, {
      algorithms: ['HS256'],
      audience: 'your-app',
      issuer: 'your-app',
    })
    return payload
  } catch {
    return null
  }
}
// ...
// ✅ 安全的Cookie配置
cookies().set('session', token, {
  httpOnly: true,     // 禁止JavaScript访问
  secure: true,       // 仅HTTPS
  sameSite: 'lax',    // CSRF防护
  maxAge: 60 * 60 * 24 * 7,
  path: '/',
})

不适用场景

以下场景代码安全审计员(免费版)不适合处理:

  • 渗透测试未授权目标
  • 物理安全防护
  • 社会工程学攻击

触发条件

需要安全检测、合规审计、漏洞扫描、加密防护时使用。不适用于非本工具能力范围的需求.

快速开始

  1. 阅读## 核心能力章节了解skill功能
  2. 按## 依赖说明配置环境
  3. 执行所需能力对应的命令
  4. 参考## 错误处理章节处理异常
  5. 查看## FAQ解答常见疑问

安全审计检查流程

class CodeSecurityAuditor:
    """代码安全审计器"""
# ...
    OWASP_CHECKS = {
        "A01_access_control": {
            "name": "访问控制失效",
            "patterns": [
                (r"app\.(get|post|put|delete)\(.*(?!.*authenticate)", "路由缺少认证中间件"),
                (r"res\.json\(.*user.*\)", "API响应可能泄露用户数据"),
            ]
        },
        "A03_injection": {
            "name": "注入漏洞",
            "patterns": [
                (r"SELECT.*FROM.*\$\{.*\}", "SQL注入: 字符串拼接查询"),
                (r"exec\(`.*\$\{.*\}`\)", "命令注入: 拼接shell命令"),
                (r"eval\(.*\)", "代码注入: 使用eval()"),
            ]
        },
        "A02_crypto": {
            "name": "加密失败",
            "patterns": [
                (r"password.*[:=].*['\"][^'\"]+['\"]", "明文密码存储"),
                (r"md5\(|sha1\(", "弱哈希算法"),
                (r"http://.*", "非加密HTTP连接"),
            ]
        }
    }
# ...
    def audit_file(self, filepath):
        """审计单个文件"""
        findings = []
        with open(filepath, 'r', encoding='utf-8', errors='ignore') as f:
            content = f.read()
            lines = content.split('\n')
# ...
            for check_id, check in self.OWASP_CHECKS.items():
                for pattern, description in check["patterns"]:
                    import re
                    for match in re.finditer(pattern, content, re.IGNORECASE):
                        line_num = content[:match.start()].count('\n') + 1
                        findings.append({
                            "owasp": check_id,
                            "name": check["name"],
                            "line": line_num,
                            "code": lines[line_num - 1].strip() if line_num <= len(lines) else "",
                            "issue": description,
                            "severity": "HIGH" if "注入" in description or "明文" in description else "MEDIUM"
                        })
        return findings

输入验证模式

import { z } from 'zod'
// ...
// ✅ 使用Zod进行输入验证
const userSchema = z.object({
  email: z.string().email().max(255),
  password: z.string().min(8).max(128),
  name: z.string().min(1).max(100).regex(/^[a-zA-Z\s'-]+$/),
  age: z.number().int().min(13).max(150).optional(),
})
// ...
export async function createUser(formData: FormData) {
  const parsed = userSchema.safeParse({
    email: formData.get('email'),
    password: formData.get('password'),
    name: formData.get('name'),
  })
// ...
  if (!parsed.success) {
    return { error: parsed.error.flatten() }
  }
  // 安全使用 parsed.data
}

示例

安全HTTP头配置

// next.config.js
const securityHeaders = [
  { key: 'Strict-Transport-Security', value: 'max-age=63072000; includeSubDomains; preload' },
  { key: 'X-Frame-Options', value: 'SAMEORIGIN' },
  { key: 'X-Content-Type-Options', value: 'nosniff' },
  { key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' },
  { key: 'Permissions-Policy', value: 'camera=(), microphone=(), geolocation=()' },
  {
    key: 'Content-Security-Policy',
    value: [
      "default-src 'self'",
      "script-src 'self'",
      "style-src 'self' 'unsafe-inline'",
      "img-src 'self' data: https:",
      "connect-src 'self' https://api.example.com",
      "frame-ancestors 'none'",
    ].join('; '),
  },
]
// ...
module.exports = {
  async headers() {
    return [{ source: '/(.*)', headers: securityHeaders }]
  },
}

最佳实践

1. 密码存储安全

// ❌ BAD: 明文存储
await db.user.create({ data: { password: req.body.password } })
// ...
// ✅ GOOD: bcrypt 12+轮
import bcrypt from 'bcryptjs'
const hashedPassword = await bcrypt.hash(req.body.password, 12)
await db.user.create({ data: { password: hashedPassword } })

2. XSS防护

// ❌ BAD: 直接渲染用户输入
<div dangerouslySetInnerHTML={{ __html: userComment }} />
// ...
// ✅ GOOD: 消毒后渲染
import DOMPurify from 'isomorphic-dompurify'
<div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(userComment) }} />
// ...
// ✅ BEST: 纯文本渲染(React自动转义)
<div>{userComment}</div>

3. 环境变量管理

// ❌ BAD: 硬编码密钥
const API_KEY = "sk-1234567890abcdef"
// ...
// ✅ GOOD: 环境变量
const API_KEY = process.env.API_KEY
if (!API_KEY) throw new Error('API_KEY not configured')

依赖详情

# 检查依赖漏洞
npm audit
npm audit fix
# ...
# 更新依赖
npx npm-check-updates -u

常见问题

Q1: 如何确定需要审计哪些代码?

A: 重点关注以下文件:

  • 路由处理文件(含API端点)
  • 认证/授权相关文件(auth.ts, middleware.ts)
  • 数据库查询文件
  • 文件上传处理
  • 配置文件(next.config, .env)

Q2: BAD/GOOD示例可以直接使用吗?

A: 示例代码展示安全编码模式,可直接参考。但需根据您的具体框架和业务逻辑调整.

Q3: 免费版覆盖哪些OWASP类别?

A: 免费版覆盖Top 5: A01访问控制、A02加密失败、A03注入、A05配置错误、A07认证失败。专业版覆盖全部Top 10.

Q4: 如何获取自动扫描功能?

A: 免费版提供手动检查清单。专业版提供AST静态分析自动扫描,可检测代码中的安全漏洞并生成报告.

依赖说明

运行环境

  • Agent平台: 支持SKILL.md的任意AI Agent(Claude Code / Cursor / Codex / Gemini CLI等)
  • 操作系统: Windows / macOS / Linux
  • 开发语言: TypeScript/JavaScript(示例代码)

第三方依赖

依赖项类型是否必需获取方式
Node.js运行时推荐nodejs.org
josenpm包可选npm install jose(JWT示例)
bcryptjsnpm包可选npm install bcryptjs(密码哈希)
zodnpm包可选npm install zod(输入验证)
isomorphic-dompurifynpm包可选npm install isomorphic-dompurify(XSS防护)

API Key 配置

  • 免费版无需API Key,所有检查基于代码审查
  • 代码示例中的环境变量(如JWT_SECRET)需在项目中配置

可用性分类

  • 分类: MD+EXEC(纯Markdown指令,部分功能需exec命令行执行)
  • 说明: 基于Markdown的AI Skill,通过自然语言指令驱动Agent执行代码安全审计任务

错误处理

错误场景原因处理方式
配置错误参数缺失或格式错误检查依赖说明中的配置要求
运行时错误运行环境不满足确认运行环境符合依赖说明
网络错误连接超时或不可达执行ping命令测试网络连通性,检查防火墙和代理设置连接后执行ping命令测试网络连通性,检查防火墙和代理设置连接后重新执行命令,参考国内替代方案

已知限制

  • 需LLM支持,无LLM环境不可用
  • 复杂业务场景建议结合人工经验判断
  • 执行效率受模型能力与网络环境影响
  • 当前为免费版本,如需完整功能请升级到付费版获取全部能力

输出格式

{
  "success": true,
  "data": {
    "result": "代码安全审计员(免费版)处理结果",
    "execution_time": "0.5s",
    "metadata": {
      "version": "1.0",
      "processor": "security auditor"
    }
  },
  "execution_log": ["解析输入参数", "执行核心处理", "格式化输出结果"],
  "error": null
}

评论

加载中…