사용자 입력의 검증 부족: 사용자 입력값을 SQL 쿼리에 직접 포함하여 실행할 때, 입력값을 제대로 검증하지 않습니다.
Prepared Statements: 매개변수화된 쿼리나 Prepared Statements를 사용하지 않고 동적 SQL 쿼리를 생성했기 때문입니다.
' and '1' ='1(참)입력 ' and '1' ='2(거짓)입력으로 참 거짓 값의 결과가 다르게 나타나는지 확인합니다.
' and '1' ='1입력 -> ex) admin' and '1' ='1' and '1' ='1입력 시도을 시도합니다.' and '1' ='1입력을 시도합니다.' and '1' ='1입력을 시도합니다.DB와 연결 되어있을 만한 곳에 TEST 합니다.
만약 참거짓 TEST의 결과가 다르게 나타나면 Blind SQLInjection 자동화 툴을 이용하여 DB정보를 취득합니다.
| 설명 | |
|---|---|
| 대상 | 웹어플리케이션 소스코드, 웹 방화벽 |
| 판단기준 | 양호 임의로 작성된 SQL 쿼리 입력에 대한 검증이 이루어지는 경우 |
| 취약 임의로 작성된 SQL 쿼리 입력에 대한 검증이 이루어지지 않는 경우 | |
| 조치방법 | 1. SQL 쿼리의 구조를 미리 정의하고, 실행 시 동적인 값을 안전하게 바인딩할 수 있는 Prepare Statements 사용 |
| 바인딩은 SQL 쿼리의 자리 표시자에 동적인 값을 안전하게 대입하여 쿼리를 실행하는 과정입니다. | |
| 2. 특정 단어만 사용하게하는 White List Filtering 사용 |