lefennec
226
2017-12-08 13:12:57
7
968

SQL 인젝션 관련해서 질문이 있습니다.


안녕하세요, 초보초보한 개발자입니다.

유지보수를 맡고 있는 사이트 관련해서 SQL 인젝션 침해위협발생보고서를 받았습니다.

내용을 확인해보니 주소창에 노출되어있는 파라미터를 통해서 시도를 했더라구요.

일단 다른 파라미터들, 제목/내용/닉네임/아이디 기타 등등의 파라미터 아이디는 post 방식으로 전송을 해서

주소창에 노출이 되지 않는데, 문제는 메뉴쪽에서 사용되고 있는 파라미터입니다.


예를 들면 a href = "/user/board.do?board_code=freeboard" 이런 방식으로 링크가 걸려 있습니다.

저런 주소도 감출 수 있는 방법이 있을까요?

도움 부탁드립니다. 감사합니다.

0
  • 답변 7

  • 도각도각
    3k
    2017-12-08 13:18:29

    뭐 간단한 방법이 있다면..

    Form 하나 만들구요.

    a 엘리먼트를 클릭시 이벤트를 발생 시켜서.. 클릭시 Form의 action을 변경해서 post로 페이지 변경하는 식으로 하면 되지 않을까 싶긴 합니다만..

  • ktsedd
    6k
    2017-12-08 13:21:18

    get파라미터를 숨기면 파라미터가 날아가지않을듯

    파라미터 유효성을 검사하거나 

    post로 변경을 권장해요...

  • ktsedd
    6k
    2017-12-08 13:23:28

    이런 방법을 사용하셔도 될듯

    https://stackoverflow.com/questions/133925/javascript-post-request-like-a-form-submit

    function post(path, params, method) {
        method = method || "post"; // Set method to post by default if not specified.
    
        // The rest of this code assumes you are not using a library.
        // It can be made less wordy if you use one.
        var form = document.createElement("form");
        form.setAttribute("method", method);
        form.setAttribute("action", path);
    
        for(var key in params) {
            if(params.hasOwnProperty(key)) {
                var hiddenField = document.createElement("input");
                hiddenField.setAttribute("type", "hidden");
                hiddenField.setAttribute("name", key);
                hiddenField.setAttribute("value", params[key]);
    
                form.appendChild(hiddenField);
            }
        }
    
        document.body.appendChild(form);
        form.submit();
    }
    Example:
    
    post('/contact/', {name: 'Johnny Bravo'});


  • 꾸아앙
    1k
    2017-12-08 13:29:11

    조회성 request는 get method를 권장할텐데요...?

    제가 잘못 알고있는건지;;

    SQL 인젝션 공격은 get을 post로 바꾼다고 안전해지는게 아닙니다

  • lefennec
    226
    2017-12-08 13:30:57

    세분 다 감사합니다 (_ _)

    일단 많지 않은 양이라 미흡하지만 나름대로의 방법으로 유효성 검사를 하기로 했어요.

    좋은 방법 계속 적어주시면 감사하겠습니다. 공부해서 차차 바꿔나가야겠습니다.

  • ktsedd
    6k
    2017-12-08 14:10:07 작성 2017-12-08 14:11:57 수정됨

    물론 권장사항도 있고 각각의 장점도 있지만 위에서 하라는대로 해야하거나 임시방편으로라도 

    쓰는거죠 뭐 아직도 iframe으로 url고 정시켜 쓰는곳도 있던.... 그냥 유효성 검사 잘하고

    업무에 맞추시면될듯여


    
    1. SELECT 기능을 원한다면 GET 메소드, UPDATE 기능을 원한다면 POST 메소드
    
    
    2. 검색 결과 등 고정적인 주소 및 링크 주소로 사용될 수 있다면 GET 메소드를 사용 
    
    3. 정보를 담을 URL 길이(최대 2048자)는 한계가 있고 해결하고 싶다면  POST 메소드를 사용
    
    4. POST 메소드를 쓰면 정보를 숨길 수 있다. 하지만 SSL(Secure Sockets Layer)을 이용하지 않는다면  뚫리는 것은 마찬가지이다.
    
    5. GET은 캐시가 남아있어 전송 속도가 빠르고 POST는 캐시가 남지 않아 보안적인 면에서 유리
    
    6. GET은 브라우저 히스토리에 파라미터가 남고 POST는 저장되지 않는다.
    
    7. GET은 ASCII 캐릭터만 허용하나 POST는 한계가 없다. POST는 바이너리 데이터가 허용된다. 따라서 파일 입출력을 위해 POST 메소드가 이용된다.
    
    
    출처: http://blogchannel.tistory.com/163 [블로그채널]



    이것도 참고하세여

    인젝션 방어 코딩

    http://blog.plura.io/?p=6056

  • lefennec
    226
    2017-12-08 17:01:58

    한번 더 감사합니다!

  • 로그인을 하시면 답변 을 등록할 수 있습니다.