다른url에서 폼 전송

다른url에서 폼 전송

QA

다른url에서 폼 전송

본문

선생님들 안녕하세요!

다른url에서 임의폼생성하여 업데이트 페이지로 전송하여 공격하는 사안에대해서,

해당 기능을 막기위해서 알아본결과 CSRF 토큰을 적용하여야 한다는것을 알고,

예제를 확인해봐도 이해가 잘안되어 조언 요청드립니다.

example.php


session_start();
$_SESSION['my_token'] = bin2hex(random_bytes(32));
<form id='form'>
   <input type="hidden" name="my_token" value="<?php echo $_SESSION['my_token']?>">
</form>
<script>
 
$.ajax({
      url: 'update.php',
   data: new Formdata($('#form')[0]),
    success: function(data){
        $('body').html(data);
}
});
</script>

이런식으로 토큰을 생성하고

넘겨진 값을 update 페이지에서

update.php


if($_SESSION['my_token'] != $_POST['my_token']){
alert('외부접근입니다.');
}

 

이렇게 체크하는줄 알았는데, 아닌것 같아서요 ㅠㅠ....

선생님들의 조언부탁드립니다.

 

 

이 질문에 댓글 쓰기 :

답변 4

ajax로 값을 넘기면 어차피 노출이 될 것이므로 완전하다고 할 수 없을 것입니다.

 

글작성 페이지에서 토큰을 생성하여 ip도 함께 디비에 저장하여 두었다가
업데이트 화면에서 불러오면 값이 있는지 없는지 확인 하여 외부에서 접속인지 알 수 있습니다.

 

$_SERVER['HTTP_HOST'] 등 

다양한 변수를 같이 저장하면 절대로 외부에서 들어올 수 없을 것입니다.

혹시 오타가 있는 건가요?

if($_SERSSION['my_tokne'] != $_POST['my_token']){

if($_SERSSION['my_token'] != $_POST['my_token']){

답변감사드립니다 선생님
ㅠㅠ 제가 빠르게 수기작성하느라...
오타없이 전송하여도 로컬의 업데이트페이지에서도 정상적이지 못하여서요..
CSRF토큰 사용하는방법이 제가 지금 생각하는 생각과 맞는건가요..?

csrf 방지 처리는 적용하신 방법이 맞는것 같습니다. POST로 받으시고, data를 formdata 객체로 주시는데 그거에 대한 설정이 없어서 못읽는게 아닌가 싶습니다. 

$.ajax({
      url: 'update.php',
      type:'post',
      contentType:false, 
      processData: false,
   data: new Formdata($('#form')[0]),
    success: function(data){
        $('body').html(data);
}
});

저렇게 처리를 하더라도 대상자가 해당 구간에서 token값을 확인하여 전송할 경우 어차피 무력화 될꺼에요..

차라리 recaptcha를 연동하거나 ip 값을 구분해서 차단하는 수 밖에 없을 듯 하네요..

혹은 회원가입된 계정만 글을 받거나..물론 인증이 필수로 들어가야...

답변을 작성하시기 전에 로그인 해주세요.
전체 2,087
QA 내용 검색
filter #css ×

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT