검색시 특수문자 \가 삽일될경우. > 그누4 팁자료실

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

검색시 특수문자 \가 삽일될경우. 정보

검색시 특수문자 \가 삽일될경우.

본문

활용팁에 올릴지 질문답변에 올릴지 애매한 부분이 있어

일단 활용팁에 올립니다.. 

common.php - 246 ~249

if (isset($stx))  { // search text (검색어)
    $stx = mysql_real_escape_string($stx);
    $qstr .= '&stx=' . urlencode($stx);
}

\ 가 붙는 이유는 mysql_real_escape_string 입니다.
몇몇 글을 찾아봤을때 mysql_real_escape_string 를 제거후 사용하는경우도 더러 있는거 같은데.
위험한 발상같습니다.. 

mysql_real_escape_string 는 sql injection 방어할때 유용합니다.

하지만 문제는 $stx변수를 그대로 사용하면서 문제가 발생됩니다.

paging시나 페이지 이동시 \가 계속 적으로 붙어버리니깐 올바른 검색이 되질 않더군요..

그래서 위 소스를 이렇게 고쳐보는건 어떨까 싶습니다.

if (isset($stx))  { // search text (검색어)
    $stx = str_replace("\\","", trim($stx));
    $stx = mysql_real_escape_string($stx);
    $qstr .= '&stx=' . urlencode($stx);
}

$stx = str_replace("\\","", trim($stx)); 로 인하여 넘어온 \를 제거하고
다시 mysql_real_escape_string 함수로 특수문자에 \를 붙이면.. 
중복되서 처리가 되는걸 방지 할수 있을듯 싶습니다.

하지만 input 태그에서 value값에 $stx 변수를 그대로 쓰면 \가 붙어서 나오는 부분은.
별도에 함수를 만드셔서 다시 제거 해주는게 좋을듯 싶습니다.
아니면 
<script type="text/javascript">document.폼이름.stx.value = "<?=$stx?>";</script>
방법도 한가지 방법이라고 생각됩니다.
위방법은 자바스크립트에서 특수문자를 붙여주는거와 같은 효과로 올바르게 value값이 넣을수 있지
않을까 생각이 듭니다.
 
추천
1

댓글 3개

if (isset($stx))  { // search text (검색어)
    $stx = mysql_real_escape_string($stx);
    $stx = strip_slashes($stx);
    $qstr .= '&stx=' . urlencode($stx);
}
stripslashes() 역슬래시를 제거 해주는 함수가 있었군요..
근대 적어주신게 보안에 취약하지 않을까요?

mysql_real_escape_string($stx);  쿼리날리시 인젝션부분에 대한 보안 내용인데.
stripslashes($stx);로 다시 제거하니.. 아예 않쓰는거와 동일하다고 보여지네요...

순서를 바꿔서

stripslashes();
mysql_real_escape_string();

하는게 어떨까 싶네요.. 위 본문 내용처럼 문제점은 있지만요 ㅠㅠ
전체 2 |RSS
그누4 팁자료실 내용 검색

회원로그인

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