문제

Java/JDBC 코드의 SQL 문을 검사하여 실행될 SQL이 수용 가능한 품질인지 확인하려고합니다. FindBugs가없는 PMD는 JDBC 또는 SQL 규칙이없는 것으로 보입니다. p6spy를 사용하여 SQL을 기록하고 그런 식으로 볼 수 있지만 이것은 매뉴얼입니다.

PMD/FindBugs/etc를 사용하는 전략이 "="또는 "in"이있는 곳에서 PreadStatement로 전달 된 문자열이 비교 측면에서 Vars를 매개 변수로 만 가지고 있다는 규칙을 만들 수 있는지 궁금합니다.

누구든지 이것을 한 사람이 있습니까? 아니면 다른 방법으로 이것을 했습니까?

도움이 되었습니까?

해결책

이것은 까다로운 문제입니다. 비교 연산자가 좋아합니다 = 그리고 IN() 어떤 경우이지만 다음도 있습니다. != <> < <= > >= LIKE.

응용 프로그램 변수를 보간하는 사례를 표현의 리터럴로 어떻게 발견합니까?

String sql = "SELECT *, " + someJavaVar + " AS constant_column FROM mytable";

SQL 포함 문자열 구분 제고기를 검색 할 수 있지만 SQL 주입은 문자열 리터럴을 보간하는 것만으로도 제공되지 않습니다.

응용 프로그램 변수를 보간하는 사례를 데이터 값 이외의 다른 것으로 어떻게 발견 하시겠습니까?

String sql = "SELECT * FROM mytable ORDER BY " + columnname;

SQL 주입 결함을 감지하는 자동 방법을 모르겠습니다. 코드 검토는이를 발견하는보다 효과적인 방법입니다. 보간 된 응용 프로그램 변수가 포함 된 모든 SQL 문에서 응용 프로그램 변수가 "안전한"상태이며 앱이 명시 적으로 검증되었거나 위험한 페이로드를 포함하지 않도록 앱이 변환했음을 확인해야합니다.

다른 팁

연결된 디버거로 응용 프로그램을 완전히 테스트 할 수 있습니까?

JDBC 드라이버의 Connection.CreatesTatement () 구현에서 중단 점을 설정하고 앱을 실행하십시오 ... , 모든 createstatement ()의 모든 인스턴스를 기록합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top