用途
本技能用于对项目代码进行语言与框架层面的安全最佳实践审查,并给出改进建议。它所提供的方法论是先识别当前上下文使用的语言和框架,再从该技能的 references 目录加载对应语言或框架的安全最佳实践信息,用于编写默认安全的新代码、被动检测既有代码中的重大问题,或在用户明确要求时生成漏洞报告并建议修复。
主要能力
- 识别项目中所有的语言与框架,重点关注前后端核心框架。
- 从 references 目录读取相关安全文档,文件名格式为
<language>-<framework>-<stack>-security.md,同时检查框架无关的<language>-general-<stack>-security.md。 - 对同时包含前端与后端的 Web 应用,要求同时检查两端的参考文档;若前端框架未指定,可参考
javascript-general-web-frontend-security.md。 - 在 references 目录无匹配信息时,依据已知的语言、框架安全最佳实践进行判断,必要时可在线检索;但若被要求生成报告,需告知用户缺少具体指导。
- 生成按严重性分级、带数字 ID 的漏洞报告,关键发现附一句话影响说明,代码引用包含行号。
- 按用户请求逐项进行修复,遵循项目既定的变更、提交与测试流程。
使用方式
该技能支持三种运行模式:
- 主模式(编写默认安全代码):将加载到的安全信息用于后续编写安全的代码,适用于启动新项目或撰写新代码。
- 次模式(被动检测):在为用户处理项目、编写代码的过程中被动发现漏洞,聚焦影响最大的漏洞与安全默认值,并向用户提示关键或重要问题。
- 报告模式:当用户主动要求安全报告或改进代码库安全性时,生成完整报告。报告写入
security_best_practices_report.md或用户指定的其它位置,包含简短执行摘要,并按漏洞严重性清晰分区,聚焦最关键发现。报告完成后向用户汇报发现并告知最终写入位置。
工作流决策树
- 若语言/框架不明确,检查仓库以确定并列出证据。
- 若 references 中存在匹配指导,仅加载相关文件并遵循其说明。
- 若无匹配指导,可考虑已知的安全最佳实践;但若被要求生成报告,需告知用户暂无具体指导(仍可生成报告或检测确实存在的严重漏洞)。
覆盖规则
客户可能有绕过或覆盖这些最佳实践的特定情况。应关注项目文档与提示文件中要求覆盖某些最佳实践的规则;在覆盖时可向用户报告,但不应与其争辩。若因项目特定原因需要绕过某条最佳实践,可建议在项目中补充文档说明原因,以便后续沿用该绕过方式。
适用场景
- 新项目或新代码的默认安全编写。
- 既有代码库的被动安全检测。
- 用户明确请求的安全漏洞报告与修复。
报告格式要求
- 以 Markdown 文件形式写入,默认
security_best_practices_report.md,或用户指定位置。 - 顶部为简短执行摘要。
- 按漏洞严重性分成多个区段,聚焦最关键发现。
- 所有发现使用数字 ID 便于引用。
- 关键发现包含一句话影响说明。
- 引用代码时包含行号。
- 报告写入后向用户总结发现并告知写入位置。
修复原则
- 有报告时,先让用户阅读报告,再询问是否开始修复。
- 修复时一次只处理单个发现,代码注释需说明基于具体安全最佳实践及原因。
- 始终考虑改动是否影响用户代码功能、是否引入回归;不安全代码可能因其它原因被依赖,应避免破坏项目。
- 遵循用户配置的正常变更/提交流程与测试流程,避免将多个无关发现打包进同一个提交。
通用安全建议
- 避免为公开资源使用递增 ID:面向互联网暴露的资源 ID 不应使用小的自增 ID,应使用较长的随机 UUID4 或随机十六进制字符串,防止用户推断资源数量并猜测 ID。
- 关于 TLS:本技能提示,多数开发工作不使用 TLS 或由范围外的 TLS 代理提供,因此不应将缺少 TLS 作为安全问题上报;同时慎用 “secure” cookie 与 HSTS 相关建议,因为这些设置若不结合实际 TLS 部署会破坏应用或造成重大影响。
限制
- 参考资料仅覆盖 references 目录中已有的语言与框架;无匹配文档时无法提供具体指导。
- 用户可以按项目需要覆盖某些最佳实践,技能会遵循项目文档中的覆盖规则。
- 缺少 TLS 通常不作为安全问题报告;不应推荐 HSTS。
- 关于具体支持的框架列表、安装命令与价格等信息,资料中暂未提供。