sql 관련 함수 질문

sql 관련 함수 질문

QA

sql 관련 함수 질문

본문

안녕하세요 그누 열공중 궁금한것이 있어 질문드립니다.

sql_escape_string( );   sql_real_escape_string( ); 이 두 함수에 대하여 질문드립니다.

둘다 sql 인젝션 대응으로 백슬래쉬로 문자열 처리 하는것으로 보이는데,

어떠한 차이점으로 쓰임새가 다른지, 또한 어떠한 상황에서 사용 해야 최적인지 알고 싶습니다.

감사합니다.!

이 질문에 댓글 쓰기 :

답변 2

sql_escape_string 는 addslashes 를 사용하며

https://github.com/gnuboard/gnuboard5/blob/master/config.php#L203

https://github.com/gnuboard/gnuboard5/blob/master/common.php#L90

 

sql_real_escape_string 은 mysqli_real_escape_string 또는 mysql_real_escape_string 를 사용합니다.

https://github.com/gnuboard/gnuboard5/blob/master/lib/common.lib.php#L2399

 

addslashes 는 단순히 문자열을 올바로 표현할수 있도록 역슬래시를 추가하는 동작을 수행하지만

mysql(i)_real_escape_string 은 실제 MySQL DB 가 escaping 에 필요하다고 판단되는 문자열을 필터링 할 것입니다.

 

따라서 SQL Injection 방어가 목적인 경우 sql_real_escape_string 을 사용하는 것이 좋습니다.

추가적으로 문자열 이스케이핑은 SQL Injection 공격을 방지하는 완전한 해결책은 아닙니다.
SQL Injection 방지는 Prepared-statement 와 binding 을 조합해 다루는것이 올바른 방법 입니다.
https://www.php.net/manual/en/class.pdostatement.php

답변 감사합니다... 원하던 답변인거 같습니다.
괜찮으시다면 상황 관련해서 더 여쭙고 싶게 있습니다.
write_update나  itemformupdate 페이지 같은경우, 이전 페이지에서 넘어온 문자열에 sql_real_escape_string( )을 사용하면 좋을텐데, 단순히 array_map_deep( )을 통하여  'addslashes'처리만 하는건지 궁금합니다.
그리고 wr_content, it_explan 같이 html태그도 같이 존재하는 변수에는 sql_real_escape_string( ) 을 사용하는 것이 잘못된 선택일까요...
너무 기초적인 질문일까 생각되서 좀 부끄럽네요 ^^;;;
다시 한번 위의 답변 감사드립니다.

https://github.com/gnuboard/gnuboard5/blob/master/bbs/write_update.php
https://github.com/gnuboard/gnuboard5/blob/master/shop/itemqaformupdate.php
두 페이지 모두 array_map_deep 은 사용되지 않고 addslashes 만 처리되고 있습니다.

sql_real_escape_string 의 사용은 목적이 무엇인지에 따라 적절한 선택 여부를 판단할수 있습니다.

sql_escape_string 함수는 7.0 이하입니다. 하여 이제 더이상 사용 하시면 않된다는 겁니다.

따라서 7.0 이상부터는 sql_real_escape_string 함수만 지원이 됩니다.

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

회원로그인

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