2013-04-26 5 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'가 누군가가 SQL 문자열을 변경할 가능성이 있다고 생각하지만, 그럴 가능성은 희박합니다. – Zutty

+0

StringBuilder로 만들 필요가 있습니까? 여기 짧은 예제에서 문자열을 변경 가능하게 만드는 데 어떤 시점도 보이지 않습니다. – nhahtdh

+0

@Zutty 네, 그렇게하는 것이 상당히 어려워 보일 것입니다. – Flanfl

답변

1

이것은 위양성입니다. 명명 된 쿼리 매개 변수는 Hibernate에 의해 이스케이프되므로 SQL 주입을 수행 할 수 없습니다.

명명 된 매개 변수가없는 첫 번째 쿼리도 users.idUser 매개 변수에 외부 입력을 사용하지 않으므로 안전합니다.