검색 기능 sql인젝션 질문이 있습니다.
안녕하세요. 강의해주셔서 감사합니다.
가끔씩 연습을 하다보면 % 만 입력했을 시 전체데이터가 뱉어지는 경우가 있는데,
배운대로,
SELECT * FROM board WHERE title like '%검색어%' 라면
SELECT * FROM board WHERE title like '%%%'가 될 것 같습니다.
이게 어떤 원리로 전체 데이터가 출력이 되는 건지 궁금합니다. 입력한 %가 메타문자(와일드카드)로 인식되어 전체출력이 되는 걸까요?
그리고 싱글쿼터만 넣어도 전체 데이터가 출력되는 경우도 있던데 이것도 어떤 원리인지 너무 궁금합니다...! 알려주시면 감사하겠습니다.
답변 1
1
안녕하세요.
답변이 늦어서 죄송합니다.
%라는 와일카드 문자가 모든 문자에 매칭이 되기 때문에 컬럼 like '%' 이렇게 조건식이 있으면 무조건 참이 되게 됩니다.
그러면 검색창에 아무런 단어 입력 없이 그냥 검색만 클릭하여도, title like '%%' 이렇게 조건식이 만들어지니 당연히 전체가 출력되는 것이 맞죠. 그런데 환경에 따라서 검색어가 입력되지 않을 경우 검색어를 입력해라고 경고창이 출력되는 경우도 있기 때문에 검색어에 % 문자를 입력하여 입력 검증 로직을 통과하는 것 입니다.
그리고 싱글 쿼터만 입력해도 전체가 출력되는 경우는 이론대로라면 에러가 출력되는 것이 정상입니다.
DBMS 관점에서 title like '%'%' 이러한 문법은 문법상의 에러기 때문에 당연 에러가 출력되는 것 입니다. 그러나 간혹 전체 출력이 되는 경우가 있는데 이 경우는 두가지로 볼 수 있습니다.
1) 에러가 발생될 경우 전체 출력을 해버림. => 에러 무시
2) 싱글쿼터 문자 제거
이렇게 2가지로 볼 수 있으며, 그 외 싱글쿼터를 이스케이프 처리 시킬 경우 싱글쿼터도 검색어에 포함되어 싱글쿼터 문자가 포함된 검색 내용을 찾아서 출력이 됩니다.
MsSql php 연결 문의
0
35
1
APMSETUP 대신에 bitnami를 사용해도 되나요?
0
37
1
질문드립니다
0
110
3
PHP 기갑 게시판 설치에서 오라클 게시판 오류
0
104
2
업데이트 부탁드립니다.
0
196
1
강의 환경설정 MSSQL 문제
0
174
1
In-line Query 와 Terminating Query
0
174
2
Prepared Statement 대응방안 궁금사항 질문있습니다!
0
141
2
게시판에서 oracle만 오류가 나는 이유를 모르겠어요
0
173
2
질문
0
180
2
쿼리 결과 오류
1
349
2
오라클 php 연동이 도저히 안됩니다.
0
542
1
Json으로 데이터를 주고 받을 때 인젝션
1
618
1
case when 구문의 활용(2) 부분 질문 있습니다.
1
615
2
주석처리 관련 질문드립니다.
1
305
2
php & mssql 연동이 안됩니다.
2
534
2
xampp 최신버전 oracle 연동방법, 겪은 오류 정리
2
674
2
가상머신환경
1
308
2
현재 SQL 인젝션 강의를 듣고 있어요
0
230
1
? 플레이스 홀더 문자
0
355
1
mysql case when 구문이용
1
396
1
실습환경 오류 발생시 봐주세요!
0
333
1
php 버전 호환 문제
1
292
1
SQL이나 XSS 실습 서버
1
374
2





