소스코드를 통해 SQL Injection이 발생하는 원인찾기
[보안 취약점 진단 및 대응/WebGoat, Bee-Box] - WebGoat(웹고트) LAB:SQL Injection - String SQL Injection
SqlStringInjection.java
#1 eclipse에서 Ctrl + Shift + R을 눌러 SqlStringInejction.Java를 검색합니다.
#2 문제가 되는 부분을 확인합니다.
외부에서 전달된 값을 검증, 제한하지 않고 SQL문 생성 및 실행에 그대로 사용하고 있어서 문제가 됩니다. Statement는 쿼리문을 안전하게 생성할 책임을 개발자가 가지고 있습니다.
#3 문제가 있는 코드를 수정합니다.
#4 실행결과 확인
사이트에서 Smith' or '1'='1을 입력해보면 에러가 발생합니다.
=> last_name 컬럼 값에 사용자 입력 값인 Smith' or '1'='1과 동일한 값이 없기 때문에 에러가 발생합니다.
=> 사용자 입력값은 select * from user_data where last_name = 'Smith\' or \'1\' = \'1' 형식으로 쿼리가 실행됩니다.