테스트 사이트 - 개발 중인 베타 버전입니다

sql 인젝션 방지코드 설명 채택완료

음바폐 7년 전 조회 3,847

sql 인젝션을 방지하려면 addslashes( ) 함수가 이용되는데, 백슬래쉬를 추가하여 sql 인젝션을 어떻게 방지하는건지요.. 어딜 가도 설명이 안 되어있어서 여기에 여쭤봅니다.

 

감사합니다 

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트
7년 전

해커가 SELECT full_name AND password WHERE user_name='bla' OR '1'='1' 이렇게 수정을 하는 것이 아니라

user_name 과 password를 입력받아서 쿼리를 만들때 문제가 생길 수 잇다는 겁니다

쿼리가 아래와 같다고 하면

SELECT full_name AND password WHERE user_name='$user_name' and password='$pass'

예를들어 해커가 form의 user_name 입력칸에 bla' or '1=1' -- ' 라고 입력한 것을 그대로 사용하면

SELECT full_name AND password WHERE user_name='bla' or '1=1' -- '' and password='1234'

이런 형태의 쿼리가 되어 아주 자알 쿼리를 실행하게 됩니다

addslashes($user_name)을 하게되면 위와 같은 정상적인 쿼리문이 만들어지지 않게 된다는 겁니다

WHERE user_name='bla\' OR \'1=1\' -- \''  이렇게 될테니까요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

음바폐
7년 전
소중한 답변 감사드려요~!

댓글을 작성하려면 로그인이 필요합니다.

7년 전

제가 적는 것 보다는 아래 링크를 참조해 보시죠.

http://zzaps.tistory.com/45

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

음바폐
7년 전
아, 답변은 감사합니다만, 이 부분들은 제가 이미 숙지하고 있습니다.

sql 인젝션 대응을 하기 위에 addslashes ( ) 함수를 흔히 이용하는 이유를 알고 싶은거거든요.
백슬래쉬를 ', ",\, 등 앞에 추가시키는 기능을 하면, 그것이 정확히 어떻게 sql 인젝션을 막는건가요?

이해가 안 가서요.

예를 들어,
SELECT full_name AND password WHERE user_name='bla' OR '1'='1'
어느 해커가 sql 을 이렇게 수정하였다 치면,

제가 addslashes([$_POST('user_name')]);
addslashes([$_POST('password')]);
방지를 위해 이렇게 쓴다고 하여도,
결국엔
SELECT full_name AND password WHERE user_name=\'bla\' OR \'1\'=\'1\'

가 되어, \'1\'=\'1\' 가 성립이 되어 결국에는 유출이 되고 말지 않나요??


\는 백슬래쉬입니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인