2013-04-26 39 views
1

我使用FindBug以及插件Find Security Bugs來幫助我找到我的代碼中的安全漏洞。我不確定爲什麼有些代碼被標記爲易受SQL注入攻擊。查找安全漏洞 - 真正的SQL注入還是誤報?

這裏有兩個例子:

final StringBuilder queryString = new StringBuilder("SELECT users.login FROM Users users, Table table WHERE users.idUser = table.users.idUser"); 
Query query = session.createQuery(queryString.toString()); // This line is flagged 


StringBuilder queryString = new StringBuilder("SELECT data FROM Table "); 
queryString.append("WHERE table.idEntreprise = :id"); 
Query query = session.createQuery(queryString.toString()).setInteger("id", id); // This line is flagged 

這是個假陽性或我錯過了什麼?如果我理解正確,使用createQuery()setX()應該足夠了嗎?

+0

我想,理論上來說,因爲它是一個StringBuilder而不是一個String常量,有人可能會改變SQL字符串,但這似乎不太可能。 – Zutty 2013-04-26 09:37:10

+0

是否有必要使它成爲StringBuilder?從這裏的簡短例子來看,我看不出讓字符串變化的任何一點。 – nhahtdh 2013-04-26 09:40:27

+0

@ Zutty是的,這似乎很難做到。 – Flanfl 2013-04-26 12:41:05

回答

1

這是一個誤報。命名的查詢參數由Hibernate轉義,所以不能執行SQL注入。

即使沒有命名參數的第一個查詢也是安全的,因爲它不使用外部輸入參數users.idUser