代替檢測類的用法,你能代替檢測與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%的位置,然後只有在你處理了應用程序的高查詢負載部分時才能永久檢測。
如果您還沒有一箇中央位置來包裝連接到網絡,那麼你可能必須包裝連接池或工廠環比上漲了一點。
希望這會有所幫助。
請注意,相同的注入攻擊也可以使用預處理語句進行:''connection.prepareStatement(「select t1。* from t1 where t1.code ='」+ code +「'」);'。最好的事情是教育開發人員。 – 2012-01-16 16:38:39
我們將通過OWASP審計,他們將會尋找更具體的項目。我同意你對此的陳述,但我們也想要一些類型的自動化檢查。 – jaycyn94 2012-01-16 16:50:34