我在一些非常大的项目上运行了Fortify (2.6.5),但它没有标记出一些关键问题,这是它确实必须要做的。似乎Fortify对名为“password”的变量执行了一些模式匹配,然后执行数据流分析。这很好,并有助于确保不会对此类敏感数据发生侵犯隐私的情况,例如将它们写入记录器(在调试中)。
这一切都很好,但我们也有通过其他变量名传递密码到系统中的情况,比如“credential”,以及其他需要严格处理的机密信息,就像Fortify对包含字符串“password”的变量所做的那样!
有没有什么简单的方法可以添加/配置这样的关键字列表,以便Fortify像“密码”一样对它们执行操作?
发布于 2012-02-25 03:57:51
“容易”取决于您对自定义规则的适应程度。您绝对可以使用CharacterizationRule向名为"credential“的变量添加一个+私有污点标志(与违反隐私规则相关的污点)。
下面是结构匹配规则的一个小示例片段,您需要开始使用该规则:
VariableAccess va: va.variable.name matches "(?i).*credential.*" and
not va in [AssignmentStatement: lhs.location is va]
and
( va.variable.type.name == "java.lang.String" or
va.variable.type.name == "java.lang.StringBuffer" or
va.variable.type.name matches "byte.*" or
va.variable.type.name matches "char.*")
发布于 2012-03-31 19:10:20
使用AWB自定义规则向导可以更轻松地完成此操作。从规则类型列表中,选择"Characterization“,然后选择"Characterization for private source”。
您的变量"credential“将成为秘密或私有数据的来源。只需按照向导操作,它就会用您指定的正则表达式创建一条规则。该表达式区分大小写,并且遵循Java正则表达式方言:http://docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html
https://stackoverflow.com/questions/9434458
复制相似问题