2012-01-16 46 views
5

我們的團隊正在尋找有一個與OWASP準則更好地遵守和的任務之一是防止SQL注入攻擊。爲了促進這一點,我一直在尋找一種方法來自動檢查我們的代碼庫中的java.sql.Statement的用法,因此可以將其標記並更改爲使用PreparedStatement尋找一種方式來防止java.sql.Statement中的使用項目

我們的構建過程是基於Maven的,我們也有聲納安裝在其上運行的項目分析。 Sonar已經制定了一些規則,如果某些閾值得到滿足,就會失敗,因此可以在那裏實施。我已經看到了我可以在哪裏設置checkstyle正則表達式規則來尋找導入,但我想看看是否還有其他選項。

沿開發/構建路徑的任何位置都可以使用。如果intellij中有某些東西可以標記這個,在Maven構建過程中有某些東西,或者在Sonar中用不同的方式標記這些東西,那麼任何這些都可以。

謝謝!

+0

請注意,相同的注入攻擊也可以使用預處理語句進行:''connection.prepareStatement(「select t1。* from t1 where t1.code ='」+ code +「'」);'。最好的事情是教育開發人員。 – 2012-01-16 16:38:39

+0

我們將通過OWASP審計,他們將會尋找更具體的項目。我同意你對此的陳述,但我們也想要一些類型的自動化檢查。 – jaycyn94 2012-01-16 16:50:34

回答

7

我會建議creating an architectural constraint內Sonar。

該示例演示禁止使用* java.sql。**類的規則。

+0

這正是我所期待的。不知何故,我在Sonar中忽略了這個規則。謝謝!像冠軍一樣工作。 – jaycyn94 2012-01-17 16:26:02

1

我還沒有使用它,但PMD看起來可能是一個很好的工具。

+0

SONAR彙總來自PMD,CheckStyle,FindBugs和其他指標的報告。 PMD已經被使用的很可能是SONAR。 – 2012-01-16 16:52:06

+0

我還沒有看到任何直接檢查這個的PMD規則,所以它與[CheckStyle](http://checkstyle.sourceforge.net/)屬於同一個組,並創建一個自定義規則來檢查。謝謝! – jaycyn94 2012-01-16 16:54:02

+0

而對於@JBNizet來說,我們已經在代碼上運行了PMD規則集。 – jaycyn94 2012-01-16 16:54:51

0

代替檢測類的用法,你能代替檢測與java.sql.Connection代理他們這一代人?當你從工廠獲得連接時,你會將它包裝在代理中。當人們使用createStatement()或其他關閉限制呼叫時,您的代理將被檢測爲可以調用方法,記錄查詢字符串和/或報告堆棧跟蹤。

public class ProxyConnection implements Connection { 
    private Connection realConnection; 

    public ProxyConnection(Connection realConnection) { 
     this.realConnection = realConnection; 
    } 

    public Statement createStatement() throws SQLException { 
     // could the offenders 
     createCounter.incrementAndGet(); 
     // log the callers -- expensive so maybe every 100th or every 10 secs 
     logger.info("call to createStatment", new Exception("createStatement")); 
     // maybe just throw 
     if (throwOnBadCall) { 
      throw new SQLException("calls to createStatement aren't allowed")); 
     } 
     return realConnection.createStatement(); 
    } 

如果你不想讓生產太重,那麼你總是可以指望他們有一個volatile boolean logBadCall型標誌,只啓用了一段時間來樣尋找問題的檢查。也許最初你會做一些抽樣,攻擊80%的位置,然後只有在你處理了應用程序的高查詢負載部分時才能永久檢測。

如果您還沒有一箇中央位置來包裝連接到網絡,那麼你可能必須包裝連接池或工廠環比上漲了一點。

希望這會有所幫助。

相關問題