문제

저는 PHP에서 로그인 스크립트를 작업하는 초보자입니다. 이것은 내가 지금까지 가지고있는 양식 토큰 진술입니다.

$_SESSION["form_token"] = md5(rand(time (), true)) ;

명세서는 사용자가 로그인을 원한다는 것을 나타내는 직후에 발행됩니다.

나의 제한된 이해는 토큰 목적은 고유 한 시점에서 고유 한 사용자를 식별하고 양식 토큰 정보를 위장하는 것입니다.

그러면 모든 것이 퍼지됩니다. 다음은 3 가지 열린 질문입니다.

  1. 보안 목적으로 양식 토큰을 "확인"하는 가장 좋은시기는 언제입니까?

  2. 어떻게 확인합니까?

  3. 언제든지, 나는 양식 토큰을 "파괴"합니까? (IOW, 사용자가 로그 아웃 할 때까지 양식 토큰이 "활성화"상태를 유지합니까?

도움이 되었습니까?

해결책

당신이 시도하는 일을 할 필요가 없습니다. session_start ()로 PHP에서 세션을 시작하면 이미 고유 한 SessionID가 생성되었습니다. 당신은해야합니다 ~ 아니다 이것을 양식에 넣으십시오. 기본적으로 쿠키를 통해 처리됩니다. SessionID를 확인할 필요가 없습니다. 다시 처리됩니다.

귀하는 사용자를 인증하고 인증 된 ID를 저장할 책임이 있습니다 (예 : 세션에서 $ _session [ 'user_id'] = $ userId. 사용자가 로그 아웃하면 Session_Destroy와 함께 세션을 파괴합니다.

session_start ()가 첫 번째 사이트의 모든 페이지에 대한 것들.

다음은 기본 예입니다.

<?php
session_start(); // starts new or resumes existing session
session_regenerate_id(true); // regenerates SESSIONID to prevent hijacking

function login($username, $password)
{
    $user = new User();
    if ($user->login($username, $password)) {
        $_SESSION['user_id'] = $user->getId();
        return true;
    }
    return false;
}

function logout()
{
    session_destroy();
}

function isLoggedIn()
{
    return isset($_SESSION['user_id']);
}

function generateFormHash($salt)
{
    $hash = md5(mt_rand(1,1000000) . $salt);
    $_SESSION['csrf_hash'] = $hash
    return $hash;
}

function isValidFormHash($hash)
{
    return $_SESSION['csrf_hash'] === $hash;
}

편집 : 원래 질문을 오해했습니다. 양식 해시를 생성하고 검증하기 위해 위의 관련 방법을 추가했습니다.

다음 리소스를 참조하십시오.

다른 팁

이것은 CSRF 공격을 방지하기위한 것입니다

http://en.wikipedia.org/wiki/cross-site_request_forgery

악의적 인 사이트는 이론적으로 응용 프로그램에 게시하는 양식을 표시 할 수 있습니다. 양식에는 데이터 유출 또는 원치 않는 조치를 유발하는 지침이 포함될 수 있습니다. 사용자는 사용자가 이미 로그인하여 앱이 수락하는 양식을 제출하는 데 속일 수 있습니다. 양식 토큰은 다른 사이트가 아닌 사이트에서 양식이 작성되었는지 확인합니다.

http_referer를 확인하는 것은 종종 충분히 좋지만 완전한 솔루션은 아닙니다 (예 : https는 참조 문자열을 보내지 않습니다).

토큰으로 모든 양식을 보장하려면 Emittoken () 및 CheckToken ()과 같은 편의 기능을 만들어 사이트 전체에서 작동하게 할 수 있습니다.

몇 가지 예 :

http://phpsec.org/projects/guide/2.html

http://www.rodsdot.com/php/csrf_form_protection.php

Zend Framework 구현을 확인할 수 있습니다.

특정 구현과는 별도로, 문서는 이러한 종류의 요소의 추론과 사용을 양식에서 설명합니다.

그것의 zend_form_element_hashhttps://docs.zendframework.com/zend-form/element/csrf/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top