검색 기능 구현시 get 방식으로 querystring 만들기(?)


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=터널 같은 쿼리스트링을 보내는 방법이 궁금합니다.

  • 2016년 08월 27일에 작성됨
    웹 사이트 공부 중입니다. 많은 도움 주시면 좋아요.

조회수 151


1 답변


좋아요
0
싫어요
채택취소하기

간단히 확인해봤는데 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에 붙습니다

  • 2016년 08월 27일에 작성됨
    웹을 좋아함

  • 핵심 질문이 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     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close