有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java日志伪造强化修复

我正在使用Fortify SCA查找应用程序中的安全问题(作为大学作业)。我遇到了一些我无法摆脱的“原木锻造”问题

基本上,我会记录一些来自web界面的用户输入值:

logger.warn("current id not valid - " + bean.getRecordId()));

Fortify将此报告为日志伪造问题,因为getRecordId()返回用户输入

我一直在关注这个article,我正在用空格替换“新行”,但这个问题仍然有报道

logger.warn("current id not valid - " + Util.replaceNewLine(bean.getRecordId()));

有人能提出解决这个问题的方法吗


共 (2) 个答案

  1. # 1 楼答案

    Alina,我是你用来解决日志注入问题的那篇文章的作者。希望能有所帮助

    维塔利在强化方面是正确的。您需要构建Fortify所称的“自定义规则”

    这可能是一个数据流清理规则。这里可以找到一个基本的例子:http://www.cigital.com/newsletter/2009-11-tips.php。如果您拥有Fortify,您的产品文档中应该有一个自定义规则编写指南

    我不知道你要用的污点标志是什么,但它看起来有点像“原木锻造”。基本上,只要数据通过实用程序方法传递,就可以编写一条规则来删除日志伪造“污点”。强化他们将假设通过那里传递的任何数据现在都可以安全地写入日志,并且不会导致日志伪造

  2. # 2 楼答案

    我知道这个问题已经得到了回答,但我觉得最好举个例子:)

    <?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>