• 카테고리

    질문 & 답변
  • 세부 분야

    보안

  • 해결 여부

    해결됨

검색 기능 sql인젝션 질문이 있습니다.

23.03.14 22:19 작성 23.03.14 23:59 수정 조회수 398

1

안녕하세요. 강의해주셔서 감사합니다.

가끔씩 연습을 하다보면 % 만 입력했을 시 전체데이터가 뱉어지는 경우가 있는데,

배운대로,

SELECT * FROM board WHERE title like '%검색어%' 라면

SELECT * FROM board WHERE title like '%%%'가 될 것 같습니다.

이게 어떤 원리로 전체 데이터가 출력이 되는 건지 궁금합니다. 입력한 %가 메타문자(와일드카드)로 인식되어 전체출력이 되는 걸까요?

그리고 싱글쿼터만 넣어도 전체 데이터가 출력되는 경우도 있던데 이것도 어떤 원리인지 너무 궁금합니다...! 알려주시면 감사하겠습니다.

 

답변 1

답변을 작성해보세요.

0

안녕하세요.

답변이 늦어서 죄송합니다.

%라는 와일카드 문자가 모든 문자에 매칭이 되기 때문에 컬럼 like '%' 이렇게 조건식이 있으면 무조건 참이 되게 됩니다.

그러면 검색창에 아무런 단어 입력 없이 그냥 검색만 클릭하여도, title like '%%' 이렇게 조건식이 만들어지니 당연히 전체가 출력되는 것이 맞죠. 그런데 환경에 따라서 검색어가 입력되지 않을 경우 검색어를 입력해라고 경고창이 출력되는 경우도 있기 때문에 검색어에 % 문자를 입력하여 입력 검증 로직을 통과하는 것 입니다.

그리고 싱글 쿼터만 입력해도 전체가 출력되는 경우는 이론대로라면 에러가 출력되는 것이 정상입니다.

DBMS 관점에서 title like '%'%' 이러한 문법은 문법상의 에러기 때문에 당연 에러가 출력되는 것 입니다. 그러나 간혹 전체 출력이 되는 경우가 있는데 이 경우는 두가지로 볼 수 있습니다.

1) 에러가 발생될 경우 전체 출력을 해버림. => 에러 무시

2) 싱글쿼터 문자 제거

이렇게 2가지로 볼 수 있으며, 그 외 싱글쿼터를 이스케이프 처리 시킬 경우 싱글쿼터도 검색어에 포함되어 싱글쿼터 문자가 포함된 검색 내용을 찾아서 출력이 됩니다.