[학습] sql injection

반응형
반응형

외부에서 SQL문법을 넣어 공격하는 기법으로
개발자가 예상치 못한 결과를 야기시킬 수 있다.

예를들어, 로그인을 시도해야 하는경우 id에 admin을 입력하고 password는 모르는 상황에서
로그인이 되게 하려면 --를 붙이면 Sql공격이 가능해진다.
보통 SQL문을 작성할때 select * from table where user_id = 'admin'인데 여기다가
--은 SQL에서 주석을 뜻하기 때문에 뒤 문장들은 모두 주석처리가 되어진다.
그렇게 되면 아이디만 입력해도 로그인이 가능해진다.

여기에는 -- 말고도 'or 1=1' 이런 쿼리를 넣거나 다양한 방법으로 공격이 가능하다.
그렇다면 이것을 막는 방법은 무엇이 있을까?
1. SQL에 해당하는 모든 특수 문자를 막는 방법
2.preparestatement로 전달 인자값을 ?로 받는 방법
3. orm을 활용하는 방법

등 여러가지가 있다고 한다.
2번째 방법 같은 경우 SQL injection이 발생하는 원인은 쿼리를 ?가 아니라 +로 쿼리를 받게 되어진다.
+로 받게 되면 SQL문을 그대로 사용이 되지만 ?로 사용하게 되면 자동적으로 특수문자를 ecape해서 보호 할 수 있다고 한다.

 

반응형

댓글

Designed by JB FACTORY