2012-10-08 57 views
11

我使用Fortify的SCA找到我的應用程序中的安全問題(如大學功課)。我遇到了一些我無法擺脫的「日誌鍛造」問題。日誌鍛造強化修復

基本上,我記錄一些價值而來的用戶輸入從網絡接口:

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

和Fortify的這個報告作爲日誌鍛造的問題,因爲getRecordId()返回用戶輸入。

我跟了這article,而我與替換空間「新線」,但問題仍然報道

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

任何人都可以提出一個方法來解決這個問題?

+0

恕我直言,這是所有關於內容,:)你有消毒用戶輸入一個很好的做法,這應該是視爲一種警告,在某些情況下,如異構軟件體系結構(從JAVA調用C應用程序)未經規範的用戶輸入可能是危險的(更換新行遠非適當的清理;)),格式攻擊也可能構成威脅, ID是一個數字(Long,Integer,Double),你可以跳過它:),如果它是字符串,你也可以跳過它但記住它:)。 – fatfredyy

回答

6

阿麗娜,我其實是你用來解決您的日誌注入問題的文章的作者。希望它有幫助。

維塔利是正確與問候來加強。您需要構建Fortify所稱的「自定義規則」。

這將可能是一個數據流淨化規則。一個基本的例子可以在這裏找到:http://www.cigital.com/newsletter/2009-11-tips.php。如果您擁有Fortify,則應在產品文檔中提供自定義規則編寫指南。

我不知道你會使用污點標誌,但它會看起來像「-LOG_FORGING」。實際上,只要數據通過實用程序方法傳遞,就會編寫一條規則來刪除日誌僞造「污點」。 Fortify會讓他們認爲通過那裏的任何數據現在可以安全地寫入日誌,並且不會造成日誌僞造。

+0

謝謝John!遵循您的建議和文檔,我設法編寫了我需要的自定義規則。你的文章也非常有用。 –

+2

此鏈接不再存在:http://www.cigital.com/newsletter/2009-11-tips.php – Coder17

2

您需要標記您replaceNewLine在Fortify的消毒殺菌劑(如果我沒有記錯),它會停止上報問題。

+0

有關將此方法標記爲'sanitiser'的選項的更多詳細信息?我正在使用Fortify Audit Workbench,但找不到選項。 –

+0

我發現有一些名爲「Fortify Java Annotations」的東西,我希望我能找到更多關於這方面的信息。 –

+0

對不起,我有一段時間沒有碰到這個東西。與Fortify支持交談是最好的選擇 - 這是一款昂貴的產品,上次使用時支持服務還行。 –

8

我知道這已經回答了,但我想一個例子將是不錯:)

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

你在哪裏添加了這段代碼? – Coder17