728x90
반응형
상황
- 프로젝트 내에서 소스코드 점검을 진행했는데, 점검 결과, SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING 취약점이 검출되었다.
- 점검은 OWASP TOP 10 ( 10대 웹 보안 취약점 ), CWE (보안 약점 ) 둘다 커버하는 Spotbugs + FindSecurityBugs를 사용하였다.
- 취약점이 검출된 소스를 보니, + 를 사용해서 문장을 만들고 있었다.
String sql = "SELECT temp," + System.lineSeparator() +
"temp2," + System.lineSeparator() +
"temp3" + System.lineSeparator() +
"FROM DUAL";
처리방법
- 동적으로 생성되는 것으로 보이는 문자열이 있는 SQL 문에서 execute 또는 addBatch 메서드를 호출하지 마라고 한다.
SQL: Nonconstant string passed to execute or addBatch method on an SQL statement (SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE)
The method invokes the execute or addBatch method on an SQL statement with a String that seems to be dynamically generated. Consider using a prepared statement instead. It is more efficient and less vulnerable to SQL injection attacks.
- 파라미터를 받아서 SQL문장을 만드는 게 아니라 그냥 개행만 집어넣은거라 오탐이긴한데.. 말나오는거 자체가 싫으니까 그냥 개행도 삭제해줬다.
String sql = "SELECT temp, temp2, temp3 FROM DUAL";
확인
- 다시 점검해보니 SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING 취약점은 사라졌다.
- 결론은 SQL문 만들때, 동적으로 생성하지 말자.
728x90
반응형