반응형
SMALL

1. SQL 인젝션 공격 대응 방안

SQL 인젝션 공격과 같은 모든 파라미터 입력값 조작으로 이뤄지는 공격은 입력값 검증을 통해 대응이 가능하다. 대표적인 방어 방법은 화이트리스트 검증이다.

 

 $query = "Select first_name, last_name FROM users WHERE user_id='$id';";

 

위와 같은 쿼리 방식은 $id 방식이 입력값을 조작할 있을 가능성이 높기 때문에 매우 취약한 SQL 쿼리다.

 

[그림 1-1] SQL 방어 쿼리 - 1

SQL 인젝션 대응 방안이 되는 모범 코드다. 윗쪽에는 CSRF 공격 방어까지 구현되어 있어 CSRF 공격도 하기 힘든 구조다. SQL 인젝션 공격을 방어하기 위해 사용하는 방법은 파라미터 쿼리로 변경하는 것이다. Check the database 주석을 보면 prepare, bindParam, execute 호출해 쿼리문을 실행한다. Prepare 함수에선 미리 실행할 쿼리문의 형태를 작성하고 사용자 입력값이 들어가는 $id 부분은 bindParam 함수에서 실행할 있도록 하는 형태를 띠고 있다. , 데이터베이스는 어떤 것이 코드고 어떤 것이 쿼리인지 구분을 있게 되기 때문에 공격자가 입력값을 조작하려고 해도 쿼리문에서 일부가 수가 없고 데이터로 처리되기 때문에 SQL 인젝션 공격을 효과적으로 방어 있다.

 

[그림 1-2] SQL 방어 쿼리 - 2

SQL 인젝션 High 단계의 소스 코드다. [그림 1-1] 소스 코드와 비교해 봤을 따로 처리하는 함수가 없고 온전히 쿼리 안에서만 처리하려고 하기 때문에 공격자가 입력값을 조작하는게 가능하다. LIMIT 1이라는 레코드 제한을 걸어도 #이나 -- 같은 주석으로 우회가 가능하기 때문에 안전한 소스 코드라곤 없다.

 

 

반응형
LIST

'웹해킹 > DVWA' 카테고리의 다른 글

SQL 인젝션 공격 (3)  (0) 2020.01.28
SQL 인젝션 공격(2)  (0) 2020.01.28
SQL 인젝션 공격 (1)  (0) 2020.01.28
브루트 포스 공격 대응 방안  (0) 2020.01.26
브루트 포스 공격  (0) 2020.01.26
블로그 이미지

만년필석사

,