我使用Fortify的SCA找到我的应用程序中的安全问题(如大学功课)。 我也遇到过,我现在无法摆脱掉一些“登录锻造”的问题。
基本上,我记录一些价值观而来从一个web界面的用户输入:
logger.warn("current id not valid - " + bean.getRecordId()));
同时强化该报告作为日志锻造的问题,因为getRecordId()返回的用户输入。
我按照这个文章 ,我很替换为空“新线”,但问题仍然报道
logger.warn("current id not valid - " + Util.replaceNewLine(bean.getRecordId()));
任何人都可以提出一个方法来解决这个问题?
阿丽娜,我其实是你用来解决您的日志注入问题的文章的作者。 希望这是有益的。
维塔利是正确与问候来加强。 你需要建立什么Fortify的所谓的“自定义规则”。
这将可能是一个数据流净化规则。 一个基本的例子可以在这里找到: http://www.cigital.com/newsletter/2009-11-tips.php 。 如果你拥有Fortify的,应该有你的产品文档中自定义规则写作指导。
我不知道你会使用污点标志,但它会看起来像“-LOG_FORGING”。 你会基本上是写一个规则来删除日志每当数据通过您的实用方法通过锻造“污点”。 Fortify的将他们认为通过任何数据通过现在是安全的,被写入日志,并不会造成日志锻造。
我知道这已经回答了,但我想一个例子将是不错:)
<?xml version="1.0" encoding="UTF-8"?>
<RulePack xmlns="xmlns://www.fortifysoftware.com/schema/rules">
<RulePackID>D82118B1-BBAE-4047-9066-5FC821E16456</RulePackID>
<SKU>SKU-Validated-Log-Forging</SKU>
<Name><![CDATA[Validated-Log-Forging]]></Name>
<Version>1.0</Version>
<Description><![CDATA[Validated-Log-Forging]]></Description>
<Rules version="3.14">
<RuleDefinitions>
<DataflowCleanseRule formatVersion="3.14" language="java">
<RuleID>DDAB5D73-8CF6-45E0-888C-EEEFBEFF2CD5</RuleID>
<TaintFlags>+VALIDATED_LOG_FORGING</TaintFlags>
<FunctionIdentifier>
<NamespaceName>
<Pattern/>
</NamespaceName>
<ClassName>
<Pattern>Util</Pattern>
</ClassName>
<FunctionName>
<Pattern>replaceNewLine</Pattern>
</FunctionName>
<ApplyTo implements="true" overrides="true" extends="true"/>
</FunctionIdentifier>
<OutArguments>return</OutArguments>
</DataflowCleanseRule>
</RuleDefinitions>
</Rules>
</RulePack>
您需要标记您replaceNewLine在Fortify的消毒杀菌剂(如果我没有记错),它会停止上报问题。