복붙노트

PHP에서 csrf 방지

PHP

PHP에서 csrf 방지

위키 피 디아에서이 게시물을보고 어떻게 적용 할 수 있는지 궁금해하고있었습니다.

ok ... Kohana PHP 프레임 워크를 사용하고 있으며 리퍼러 헤더를 결정할 수있는 기능이 있지만 리퍼러 헤더를 정확히 확인하려면 어떻게해야합니까? 프레임 워크 함수는 리퍼러의 URL 만 반환합니다.

GET 및 POST 매개 변수의 유효성을 검사하는 방법은 무엇입니까? 뭐라구? 저장된 정보? 예상 유형?

해결법

  1. ==============================

    1.CSRF를 막으려면 POST'ed로 현재 세션과 연관된 일회성 토큰의 유효성을 검사해야합니다. 다음과 같은 것. . .

    CSRF를 막으려면 POST'ed로 현재 세션과 연관된 일회성 토큰의 유효성을 검사해야합니다. 다음과 같은 것. . .

    사용자가 레코드를 삭제하도록 요청한 페이지에서

    confirm.php

    <?php
     session_start();
     $token= md5(uniqid());
     $_SESSION['delete_customer_token']= $token;
     session_write_close();
    ?>
    <html>
    <body>
    <form method="post" action="confirm_save.php">
     <input type="hidden" name="token" value="<?php echo $token; ?>" />
    Do you really want to delete?
    <input type="submit" value=" Yes " />
    <input type="button" value=" No " onclick="history.go(-1);" />
    </form>
    </body>
    </html>
    

    그런 다음 실제로 레코드를 삭제할 때 :

    confirm_save.php

    <?php
     session_start();
     $token = $_SESSION['delete_customer_token'];
     unset($_SESSION['delete_customer_token']);
     session_write_close();
     if ($token && $_POST['token']==$token) {
       // delete the record
     } else {
       // log potential CSRF attack.
     }
    ?>
    

    토큰은 추측하기 어렵고 각 삭제 요청마다 고유해야하며 $ _POST를 통해서만 수락되고 몇 분 후에 만료됩니다 (이 예에서는 만료되지 않음).

  2. ==============================

    2.추천 점검을 통해 귀하의 모든 일은 귀하의 사이트 / 시스템에서 리퍼러가 있는지 확인하려는 것입니다. 리퍼러가 존재하지 않거나 외국 사이트에서 온 경우 추천 조회가 실패하고 요청 사항이 무엇이든 명예를 훼손하고 싶지 않을 수 있습니다.

    추천 점검을 통해 귀하의 모든 일은 귀하의 사이트 / 시스템에서 리퍼러가 있는지 확인하려는 것입니다. 리퍼러가 존재하지 않거나 외국 사이트에서 온 경우 추천 조회가 실패하고 요청 사항이 무엇이든 명예를 훼손하고 싶지 않을 수 있습니다.

    과거에는 다양한 기술과 브라우저 (flash..et al)의 문제점으로 인해 참조 헤더의 위조가 허용되었습니다. 그것의 무언가를 고려해야합니다. 참조 데이터가 없거나 요청 헤더에 전달 된 리소스에 연결하는 데 javascript를 사용하는 여러 가지 방법이 있습니다.

    이 동작은 브라우저마다 약간 씩 다릅니다. 자바 스크립트를 사용하여 일반적으로 양식을 제출하는 경우 window.location과 같은 것을 사용하는 경우 추천 데이터가 있어야합니다.

    CSRF 예방에 널리 사용되는 방법은 쿠키를 사용하지 않고 항상 참조간에 상태를 전달하는 것입니다. 응용 프로그램 전체의 모든 링크에서 세션 토큰 전달.

  3. ==============================

    3.[참고 :] Kohana 프레임 워크는 더 이상 사용되지 않습니다. Kohana PHP 7의 새로운 포크는 https://koseven.ga/이며, CSRF 기능은 Security 클래스를 지원합니다.

    [참고 :] Kohana 프레임 워크는 더 이상 사용되지 않습니다. Kohana PHP 7의 새로운 포크는 https://koseven.ga/이며, CSRF 기능은 Security 클래스를 지원합니다.

    공식 koseven 보안 기능을 사용할 수 있습니다. 다음은 koseven 보안 클래스에 대한 링크입니다.

  4. from https://stackoverflow.com/questions/1780687/preventing-csrf-in-php by cc-by-sa and MIT license