2.2. 创建基本 YAML 规则
本节论述了如何创建基本 MTA YAML 规则。假设您已安装了 MTA。有关安装说明,请参阅 MTA CLI 指南。
2.2.1. 创建基本 YAML 规则模板 复制链接链接已复制到粘贴板!
基于 MTA YAML 的规则有以下基本结构:
when(condition) message(message) tag(tags)
when(condition)
message(message)
tag(tags)
流程
在
/home/<USER>/ 目录中,创建一个文件,其中包含 YAML 规则的基本语法,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.2. 创建基本 YAML 规则集模板 复制链接链接已复制到粘贴板!
如果要对多个类似的规则进行分组,可以通过将其文件放在一个目录中并在目录 root 中创建 ruleset.yaml 文件来为它们创建一个规则集。当您使用- rules 选项将此目录作为输入传递给 MTA CLI 时,MTA 会将目录中的所有文件视为属于 ruleset.yaml 文件中定义的规则集。
流程
如果要使用-
rules选项传递整个目录,请为ruleset.yaml文件创建一个模板:name: <RULESET_NAME> description: <RULESET_DESCRIPTION> labels: - key=val
name: <RULESET_NAME>1 description: <RULESET_DESCRIPTION> labels:2 - key=valCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.3. 创建 YAML 规则 复制链接链接已复制到粘贴板!
每个规则文件包含一个或多个 YAML 规则。每个规则都包含元数据、条件和操作。
流程
创建
when条件。YAML 规则的
when条件可以是provider、和或或。创建
供应商条件provider 条件用于定义对特定语言提供程序的搜索查询,并调用提供程序的特定功能。
条件的一般格式为 <
provider_name>.<capability>。该条件还具有 inner 字段,用于指定搜索的详细信息。创建供应商条件及其内部字段的方式取决于您使用的供应商以及您调用的功能。下表列出了可用的提供程序及其功能。选择一个供应商及其功能,以满足您要创建的规则的目的。条件的一部分还没有包含任何条件的字段。
Expand 供应商 功能 描述 java引用找到模式引用,包括注解,带有可选代码位置,用于详细搜索
依赖项检查应用程序是否有给定依赖项
builtinxml使用 XPath 查询搜索 XML 文件
json使用 JSONPath 查询搜索 JSON 文件
FileContent使用 RegEx 模式搜索常规文件中的内容
file查找名称与给定模式匹配的文件
hasTags检查是否通过标记规则为应用程序创建标签
go
引用查找模式引用
依赖项检查应用程序是否有给定依赖项
以下示例显示了使用
引用能力的java供应商条件。Example
when: java.referenced:
when: java.referenced:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
为
供应商条件添加合适的字段。下表列出了所有可用的供应商、其功能及其字段。选择属于您选择的供应商和功能的字段。请注意,一些字段是必须的。
Expand 供应商 功能 字段 必需? 描述 java引用pattern是
RegEx pattern
位置否
源代码位置;请参阅下面所有支持的搜索位置列表
annotated否
注解及其元素(名称和值)
依赖项名称是
依赖项的名称
nameregex否
与名称匹配的正则表达式模式
upperBound否
匹配小于或等于的版本号
lowerBound否
匹配大于或等于的版本号
builtinxmlXPath是
XPath 查询
命名空间否
映射到范围向下查询到命名空间
filepaths否
用于范围搜索的可选文件列表
jsonXPath是
XPath 查询
filepaths否
用于范围搜索的可选文件列表
FileContentpattern是
在内容中匹配的正则表达式模式
filePattern否
仅在与此模式匹配的文件中搜索
filepattern是
查找与此模式匹配的名称的文件
hasTags这是字符串标签的内联列表。有关标签格式的详情,请参阅 Rule Actions 中的 Tag Actions。
go引用pattern是
RegEx pattern
依赖项名称是
依赖项的名称
nameregex否
与名称匹配的正则表达式模式
upperBound否
匹配小于或等于的版本号
lowerBound否
匹配大于或等于的版本号
以下搜索位置可用于范围
java搜索:- CONSTRUCTOR_CALL
- TYPE
- 继承
- METHOD_CALL
- 注解
- IMPLEMENTS_TYPE
- ENUM_CONSTANT
- RETURN_TYPE
- IMPORT
VARIABLE_DECLARATION
以下示例显示搜索软件包引用的规则的
when条件。Example
when: java.referenced: location: PACKAGE pattern: org.jboss.*when: java.referenced: location: PACKAGE pattern: org.jboss.*Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建
AND或OR条件当
所有子条件都匹配时,和 条件都匹配。创建和条件,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当任何子条件都匹配时,
或条件会匹配。创建或条件,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.4. 使用自定义 YAML 规则运行分析 复制链接链接已复制到粘贴板!
要运行分析,请在 CLI 中使用-- rules 选项。
流程
要在一条规则文件
/home/<USER>/rule.yaml中使用规则,请运行以下命令:mta-cli analyze --input /home/<USER>/data/ --output /home/<USER>/output/ --rules /home/<USER>/rule.yaml
mta-cli analyze --input /home/<USER>/data/ --output /home/<USER>/output/ --rules /home/<USER>/rule.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
/home/<USER>/data/- 源代码或二进制的目录 -
/home/<USER>/output/- 报告的目录(HTML 和 YAML)
-
-
要使用多个规则文件,您需要将它们放在目录中并添加
ruleset.yaml文件。然后,目录被视为 规则集,您可以将其作为输入传递给规则选项。
请注意,如果您要在 CLI 中使用-- target 或-- source 选项,则引擎将仅选择与该目标标签匹配的规则。因此,请确保您在规则上添加了目标或源标签。如需了解更多详细信息,请参阅 保留标签。