源代码位置 (Pro)
源代码位置将位置模型扩展到了静态分析领域:除了 URL(DAST)和依赖项(SCA)之外,代码位置用于描述某个 SAST 发现项在源代码中的位置——通过其文件路径和行号来标识。
源代码位置需要启用位置功能(测试版)。如需在您的实例上启用位置功能,请联系 。
建模内容
每个报告了文件路径的静态发现项都会获得一个代码位置。该位置的规范值为 path/to/file.py:42(如果工具未报告行号,则仅为文件路径)。与所有位置一样,代码位置是共享对象:位于同一文件同一行的两个发现项会引用同一个位置,该位置同时携带按发现项和按资产划分的引用状态。
代码位置由扫描管理:它们通过导入和重新导入创建和更新,而不是手动创建。系统没有“新建源代码位置”操作——扫描器才是代码发现项所在位置的权威数据来源。
在哪里查看
- 侧边栏中的所有源代码会列出该实例中的每个代码位置,筛选和标签方式与 URL 及依赖项相同。
- 资产的位置菜单中的查看源代码会将列表范围限定为单个资产。
- 发现项页面会显示其当前的代码位置,如果该发现项发生过移动,还会显示其位置历史。
变动历史
源代码会不断变动:提交会改变行号,重构会重命名文件。当为某个工具启用了位置漂移匹配后,发生移动的发现项会保留其身份标识,其代码位置引用会记录变动轨迹:
- 该发现项对旧位置的引用会被标记为已缓解,并注明发现项移动到了何处以及匹配的原因(最近行、数据流、文件重命名等)。
- 系统会创建一个指向新位置的引用,并保持其活动状态。
最终会形成一条可浏览的替代链——“该发现项最初位于 auth.py:42,随后移动到 auth.py:57,再移动到 session.py:31”——并以时间线的形式呈现在发现项页面上。同一套历史记录机制也适用于 URL 移动和依赖项版本升级,因此这三种位置类型共用同一套时间线界面。
历史记录从该实例启用位置功能的那一刻开始记录。在此之前发生移动的发现项会保留其当前位置;此前的变动虽然已经生效,但不会被记录下来。对于拥有多年历史数据(早于该功能上线)的实例,可以使用变动合并命令,在合并历史上的“关闭再重建”链条的同时重建变动轨迹。
状态准确性
无论是否启用漂移匹配,代码位置引用状态都会在每种匹配算法下通过重新导入保持准确:
- 每次重新导入时,都会同步匹配发现项的当前代码引用,因此发生移动的发现项不会让其旧引用永远保持活动状态。
- 这种不受开关影响的同步机制同样适用于依赖引用:当某个 SCA 发现项的软件包版本升级时,旧版本的引用会被标记为已缓解,而不会与新版本的引用同时保持活动状态。
与发现项字段的关系
发现项自身的 file_path / line 字段仍然是权威的标量值(筛选、哈希计算和 API 所公开的正是这些字段);代码位置则是对同一坐标的共享、引用计数视图。重新导入会根据最新扫描结果刷新这些标量值,位置机制再据此推导出位置——两者不会出现不一致。