검색 기능 구현시 get 방식으로 querystring 만들기(?)
조회수 3787회
node.js + express 사용 중입니다. 아 ejs 템플릿도요!
게시판 기능 중 검색 기능을 구현하려고 합니다.
get 방식으로 구현하려고 하는데요.
<option value="title,body">제목+내용</option>
<option value="title">제목</option>
<option value="content">내용</option>
<input type="text" name="searchText">
<button class="btn">검색하기</button>
위 처럼 검색 폼을 구현하고,
?searchType=title,body&searchText=터널
위와 같이 쿼리스트링으로 get 전달하면, 서버에서 req.query.searchType 과 req.query.searchText 로 db 처리를 하여 검색 기능을 구현하려고 합니다.
( 위 방법으로 하는게 검색 기능을 개발할 때 맞는 방법인지는 모르겠습니다. )
위 방법이 틀렸다면, 옳은 방향을 조언 받고 싶고, 맞다면, 검색하기 버튼을 눌렀을 때 선택한 dropdown 값과 검색어로 ?searchType=title,body&searchText=터널 같은 쿼리스트링을 보내는 방법이 궁금합니다.
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
간단히 확인해봤는데 xe 에선 제목+내용 검색을 title_content 이런식으로 주네요.
제생각엔 if, switch 로 걸러내야 할것 같습니다. 단순하게 , 로 구분해놓으면 테이블 스키마 구조를 파악하거나 인젝션 공격의 기초가 될수도 있습니다.
설정이 잘되어있다면 문제가 없겠지만 a,b,c 이런식으로 searchType을 보낼때 설정이 잘못되어 에러메시지라도 난다면 곤란해지죠
좀 귀찮더라도 title, content, title_content (혹은 다른무언가 title,content 등등) 정해놓은것 아니면 일반검색으로 분기하는게 좋을것 같습니다
검색할때 저런식으로 쿼리스트링을 보내시려면 그냥 간단하게 form 메소드를 get으로 주면 됩니다
<form action="" method="get"> <select name="searchType"> <option value="title_body">제목+내용</option> <option value="title">제목</option> <option value="content">내용</option> </select> <input type="text" name="searchText"> <input type="submit" class="btn">검색하기</button> </form>
그럼 검색하면 알아서 쿼리스트링이 url에 붙습니다
-
(•́ ✖ •̀)
알 수 없는 사용자
- 핵심 질문이 get 쿼리스트링 보내는 방법이었는데 자동으로 되는지 몰랐네요. 감사합니다. 그런데, title_body 와 title,body 로 하는거에 대해 차이가 무엇인지 이해하지 못했는데 조금 더 설명드려도 될까요? 인젝션 공격에 대해 언급주셨는데 아에 감을 잡질 못하겠습니다. 상남자 2016.8.29 11:35
- title과 body같은건 테이블에 컬럼인데 이걸 자유롭게 풀어놓고 ,기준으로 가져온다던가 하면 sql인젝션 공격을 위한 정보수집이 가능하게 됩니다. 예를들어 제가 일부러 title,body 대신 title,yeah 를 넣게된다면 쿼리는 title = 검색 AND yeah = 검색 이렇게 되어버립니다. 혹시라도 쿼리에러가 출력되게 해놓았다면 쿼리 에러가 뜨고 그걸로 테이블 스키마 구조를 알아낼수 있다는거죠. 그래서 title, body, title_body 고정시켜놓고 3개아니면 일반 이렇게 해버리면 악의적인 쿼리가 실행되는일은 없습니다. 알 수 없는 사용자 2016.8.29 17:34
- 아직 기본이 부족해서 제가 이해가 힘든가보네요. sql 인젝션 공격에 대해 지식을 쌓아보겠습니다. 정말 좋은 말씀 중요한 정보 감사드립니다. 상남자 2016.8.30 23:05
-
댓글 입력