sql 인젝션 방지코드 설명

sql 인젝션 방지코드 설명

QA

sql 인젝션 방지코드 설명

본문

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

 

감사합니다 

이 질문에 댓글 쓰기 :

답변 2

해커가 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\' -- \''  이렇게 될테니까요

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

http://zzaps.tistory.com/45

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

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\' 가 성립이 되어 결국에는 유출이 되고 말지 않나요??


\는 백슬래쉬입니다

답변을 작성하시기 전에 로그인 해주세요.
전체 85
QA 내용 검색
filter ##php ×

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT