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

조회수 2359회

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 답변

  • 좋아요

    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에 붙습니다

    • 핵심 질문이 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 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.