扫描应用的安全漏洞
要点打开“安全”,点击“运行安全扫描”。一两分钟内,MonstarX 会用 33 条规则检查你的代码,以陌生访客的身份探测运行中的应用,并让 AI 阅读整个应用。你会得到一个从 A 到 F 的等级和一份检测项列表,最严重的排在最前,每一项都说明在哪里、为什么需要关注、需要修改什么。选好要修复的检测项,MonstarX 会通过一次普通构建修复它们,然后重新扫描。你还可以把结果下载为报告。
快速写出来的应用往往过于信任浏览器:任何人都能调用的函数、只凭编号就查出一条预约却不检查它属于谁、直接采用页面传来的价格。攻击者找的正是这些漏洞。
安全 标签页会像攻击者一样分析你的应用,把发现的问题按严重程度从高到低列出来,并帮你修复。你可以把它看作内置在 MonstarX 里的一次小型渗透测试(有人故意尝试攻破系统的安全检查)。
如何运行安全扫描?
Section titled “如何运行安全扫描?”-
打开你的项目,点击顶部栏中的 安全。
-
点击 运行安全扫描。大约需要一两分钟。
-
三个部分会依次完成。你可以离开这个标签页:扫描在 MonstarX 的服务器上运行,不会中断。点击 取消 会停止扫描,并保留目前已找到的检测项。
扫描进行时,顶部栏中 安全 标签页的徽标会显示一个加载图标,完成后显示未解决检测项的数量(颜色取决于最严重的那一项),如果没有未解决项,则显示一个绿点。之后要再次扫描,点击标签页顶部的 重新扫描。
扫描会检查什么?
Section titled “扫描会检查什么?”一次扫描包含三个部分:
| 部分 | 做什么 | 费用 |
|---|---|---|
| 代码检查 | 用 33 条规则检查应用的每个文件:缺少登录检查、修改记录时不检查所有者、把密钥写进代码、用文本拼接数据库查询、不安全的 HTML、未经检查的上传、未验证的 webhook 等。 | 免费 |
| 实时探测 | 以没有账户的陌生访客身份,向运行中的应用发送只读请求:本应只给已登录用户看的页面、对任何人都响应的路由、跨站访问;对已发布的应用,还会检查安全响应头和绝不应该公开的文件。 | 免费 |
| AI 审查 | 一个 AI 模型带着这些检测项阅读整个应用,确认或排除问题,并寻找只有读代码才能发现的问题,比如信任页面传来的价格,或者页面发送了却从不显示的数据。 | 消耗额度,与一次聊天请求类似 |
如果你的应用已发布上线,实时探测会针对已发布的应用,否则针对预览。结果中会注明探测的是哪一个。
什么是 OWASP Top 10 和 CWE?
Section titled “什么是 OWASP Top 10 和 CWE?”OWASP 是一家非营利组织,它发布的 Top 10 列出了 Web 应用最严重的几类安全风险,是这方面最知名的清单。每个检测项都会归入其中一类,让你(或安全专家)知道它属于哪种问题:
| 通俗地说 | |
|---|---|
| A01 访问控制失效 | 有人能查看或修改不属于自己的内容。 |
| A02 加密机制失效 | 密钥或验证码的存储或生成方式太弱。 |
| A03 注入 | 别人输入的文字被当作命令或代码执行。 |
| A04 不安全的设计 | 应用的逻辑可能被滥用,比如无限发送免费邮件或无限预约。 |
| A05 安全配置错误 | 设置过于开放,比如缺少安全响应头。 |
| A06 存在漏洞和过时的组件 | 使用了带有已知漏洞的旧软件。 |
| A07 身份识别与认证失效 | 登录或会话处理不够安全。 |
| A08 软件和数据完整性失效 | 未经检查就信任来自外部的代码或数据。 |
| A09 安全日志与监控失效 | 密钥泄露到日志中,或者攻击发生了却没人察觉。 |
| A10 服务器端请求伪造 | 应用可能被诱导去请求攻击者指定的地址。 |
CWE(Common Weakness Enumeration,通用缺陷枚举)是一份带编号的具体缺陷目录,例如“CWE-639:通过用户可控制的 ID 查找记录”。每个检测项都链接到它的 OWASP 类别,如果有对应的 CWE,也会链接到 CWE 页面,方便你深入了解。
如何看懂结果?
Section titled “如何看懂结果?”顶部会显示一个 满分 100 的评分,以及从 A 到 F 的等级、按严重程度统计的未解决检测项、扫描和探测了什么、AI 审查花了多少额度,以及审查用几句话写下的总结。
评分从 100 分开始,每个 严重 检测项扣 40 分,每个 高 扣 15 分,每个 中 扣 5 分,每个 低 扣 1 分。等级告诉你下一步该做什么:
| 等级 | 分数 | 含义 |
|---|---|---|
| A | 90–100 | 未发现严重问题。 |
| B | 75–89 | 有少量问题需要处理。 |
| C | 55–74 | 在让更多人使用应用之前,先修复高风险检测项。 |
| D | 35–54 | 存在严重漏洞:请在发布前修复。 |
| F | 0–34 | 应用目前很容易受到攻击。 |
每个检测项都会显示严重程度、标题、OWASP 类别、CWE、来源(代码检查、实时探测 或 AI 审查)、扫描的确定程度(已确认、很可能存在 或 需要检查),以及文件和行号。点击一项即可打开:
- 该行附近的代码,并标出那一行。
- 用通俗的话说明问题是什么、为什么需要关注 以及 需要修改什么。
- AI 审查 的备注:它是否确认了这个检测项,以及如何确认的。
- 在代码中打开 会跳转到“代码”标签页中的对应文件。
如果 AI 审查认为某个检测项是误报,会显示 AI 审查:可能并非实际问题。这个检测项仍会留在列表中,排在最后,但不计入评分。
在列表下方,检查内容 会展开运行过的每一项检查,按 OWASP 类别分组,并显示打勾、检测项数量或跳过的原因。
如何修复发现的问题?
Section titled “如何修复发现的问题?”-
勾选你想修复的检测项,或点击 选择全部。这时会出现 修复 2 个检测项 按钮。有构建正在运行时,它会保持灰色不可用。
-
点击它。MonstarX 会告诉你接下来会发生什么,然后再次点击 修复 2 个检测项。
-
每个检测项都会成为你的功能计划中的一项任务(安全:…;如果计划快满了,它们会合并成一项任务),同时有一个构建请求发送到聊天中,并带有“安全”徽标。它和其他请求一样运行,会保留一个版本,之后 QA 可能会测试应用。
-
构建完成后,扫描会自动重新运行。已经消失的检测项会显示为已解决(构建助手已修复 2 项)。仍然存在的检测项会重新出现,并标记为 修复后仍存在。
如果某个检测项不是真正的问题怎么办?
Section titled “如果某个检测项不是真正的问题怎么办?”打开它,点击 忽略,然后说明原因:
- 并非实际问题
- 接受风险:你知道这个问题,并且接受它。
- 已通过其他方式处理
被忽略的检测项会移到 已忽略 列表中,在之后的每次扫描中都会留在那里,即使其他代码有了变化也一样。点击 移回列表 可以把它放回列表。
如何下载安全报告?
Section titled “如何下载安全报告?”点击结果底部的 下载报告。你会得到一个 Markdown 文件(一种可以用任何编辑器打开的纯文本文档),以你的项目命名,例如 paws-co-booking-security-report.md。它的结构和渗透测试报告一样:
- 范围与方法:多少条规则检查了多少个文件、探测了什么,以及 AI 审查做了什么。
- 摘要:评分、按严重程度统计的未解决检测项,以及审查的总结。
- 检测项:每一项都有 OWASP 和 CWE 链接、所在位置、相关代码、问题是什么、为什么需要关注,以及需要修改什么。
- 自上次扫描以来已解决的检测项,以及 所有者已忽略的检测项(附上你的理由)。
- 检查:每一项检查及其结果。
很适合分享给开发者、客户或审计人员。扫描停止运行后即可下载报告。
扫描免费吗?
代码检查和实时探测免费。AI 审查会消耗额度,与一次聊天请求类似,结果中会显示花了多少。修复检测项和其他构建一样会消耗额度。
等级高就说明我的应用安全吗?
没有任何扫描能保证这一点。它只能发现规则、探测和审查看得到的问题。请先修复严重和高风险检测项,再重新扫描;涉及资金或个人数据的部分,在大量用户使用之前,请找专人审查。
应该在发布前还是发布后扫描?
两次都要。发布前扫描,抓住大的漏洞。应用上线后再扫描一次:有些检查(比如安全响应头和绝不应该公开的文件)只会针对已发布的应用运行。
我把项目分享给别人,对方能看到扫描结果吗?
不能。扫描会列出每一个薄弱点,所以只有所有者能看到“安全”标签页。
扫描会检查 MonstarX 自己的登录和数据库代码吗?
不会。这些部分在每个应用中都相同,由 MonstarX 负责维护。扫描检查的是为你的应用编写的代码,以及运行中的应用。
开始扫描时如果正有构建在运行,会怎样?
扫描会等待构建完成(最多 10 分钟),以便检查完成后的代码。