복붙노트

PHP 세션 ID는 얼마나 독특한가요?

PHP

PHP 세션 ID는 얼마나 독특한가요?

PHP 세션 ID는 얼마나 독특한가요? 나는 내가 읽은 여러 가지 것들로부터 동일한 세션 ID를 결코 얻지 못하는 두 명의 사용자에게 의존해서는 안된다는 인상을 받았다. GUID가 아닌가요?

해결법

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

    1.Session_id는 실제로 복제 될 수 있지만 확률은 매우 낮습니다. 공정한 트래픽이있는 웹 사이트가있는 경우 웹 사이트 생활이 한 번 일어날 수 있으며 한 세션에 대해 한 명의 사용자를 괴롭 히게됩니다.

    Session_id는 실제로 복제 될 수 있지만 확률은 매우 낮습니다. 공정한 트래픽이있는 웹 사이트가있는 경우 웹 사이트 생활이 한 번 일어날 수 있으며 한 세션에 대해 한 명의 사용자를 괴롭 히게됩니다.

    이것은 매우 높은 트래픽 웹 사이트 또는 은행 산업을위한 서비스를 구축하지 않으면 신경 쓸 가치가 없습니다.

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

    2.선적 된 것은별로 독특하지 않습니다. 기본 설정에서는 gettimeofday (굉장히 독특하지는 않음)의 결과를 포함하여 여러 가지 해시 결과이지만 걱정이된다면 / dev / urandom에서 엔트로피를 그리도록 설정해야합니다.

    선적 된 것은별로 독특하지 않습니다. 기본 설정에서는 gettimeofday (굉장히 독특하지는 않음)의 결과를 포함하여 여러 가지 해시 결과이지만 걱정이된다면 / dev / urandom에서 엔트로피를 그리도록 설정해야합니다.

    ini_set("session.entropy_file", "/dev/urandom");
    ini_set("session.entropy_length", "512");
    

    그들이 사용하고있는 실제 알고리즘에 대한 코드에서 "php_session_create_id"를 검색하십시오.

    추가 편집 : pid가 시드 (seed) 한 DFA 난수 생성기가 있으며 시간은 usec입니다. 보안 관점에서 확고한 고유성 조건이 아닙니다. 위의 엔트로피 설정을 사용하십시오.

    최신 정보:

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

    3.ID 생성 방식을 사용자 정의하려면 대체 해시 생성 기능을 설치하십시오 (기본적으로 MD5를 통해 생성 된 128 비트 번호). http://www.php.net/manual/en/session.configuration.php#ini.session.hash-function을 참조하십시오.

    ID 생성 방식을 사용자 정의하려면 대체 해시 생성 기능을 설치하십시오 (기본적으로 MD5를 통해 생성 된 128 비트 번호). http://www.php.net/manual/en/session.configuration.php#ini.session.hash-function을 참조하십시오.

    PHP 세션에 대한 자세한 내용은 http://shiflett.org/articles/the-truth-about-sessions에서 세션 고정 및 하이재킹에 대한 다른 기사로 연결되는 훌륭한 기사를 참조하십시오.

  4. ==============================

    4.PHP가 세션 ID를 생성하는 방법을 알고 싶다면 기본적으로 Github의 소스 코드를 확인하십시오. 이것은 확실히 무작위가 아니며 이러한 성분의 해시 (기본값 : md5)를 기반으로합니다 (코드 스 니펫의 310 행 참조).

    PHP가 세션 ID를 생성하는 방법을 알고 싶다면 기본적으로 Github의 소스 코드를 확인하십시오. 이것은 확실히 무작위가 아니며 이러한 성분의 해시 (기본값 : md5)를 기반으로합니다 (코드 스 니펫의 310 행 참조).

    OS가 무작위 소스를 사용할 수있는 경우 세션 ID가되기 위해 생성 된 ID의 강도는 높습니다 (/ dev / urandom 및 다른 OS 무작위 소스는 (일반적으로 암호로 안전한 PRNG입니다). 그러나 그렇지 않다면 만족 스럽습니다.

    세션 식별 생성의 목표는 다음과 같습니다.

    이것은 세션 생성에 대한 PHP의 접근 방식에 의해 달성됩니다.

    유일성을 절대적으로 보장 할 수는 없지만 일반적으로 우려 할 가치가없는 동일한 해시를 두 번 치는 확률이 두 배입니다.

  5. ==============================

    5.session_id의 크기 seesion_id가 균일하게 분포되어 있고 크기가 128 비트라고 가정합니다. 행성에있는 모든 사람이 하루에 한 번씩 1000 년 동안 계속 새로운 세션을 가지고 로그인한다고 가정합니다.

    session_id의 크기 seesion_id가 균일하게 분포되어 있고 크기가 128 비트라고 가정합니다. 행성에있는 모든 사람이 하루에 한 번씩 1000 년 동안 계속 새로운 세션을 가지고 로그인한다고 가정합니다.

    num_sesion_ids  = 1000*365.25 *7*10**9 < 2**36
    collission_prob < 1 - (1-1/2**82)**(2**36)  ≈ 1 - e**-(1/2**46) 
                    ≈ 1/2**46 
    

    따라서 하나 이상의 충돌 확률은 7 억 개 중 1 개 미만입니다. 따라서 128 비트 크기의 session_id가 충분히 커야합니다. 다른 주석에서 언급했듯이, session_manager는 새로운 session_id가 이미 존재하지 않는지 확인할 수도 있습니다.

    임의성 따라서 큰 문제는 session_id :가 좋은 의사 난수로 생성되었는지 여부입니다. 분명히 할 수는 없지만 잘 알려진 자주 사용하는 표준 솔루션을 사용하는 것이 좋습니다 (이미 수행 한 것처럼).

    검사로 인해 충돌이 방지 되더라도 session_id의 무작위성 및 크기가 중요하므로 해커는 어쨌든 자격있는 추측을 수행하고 큰 확률로 활성 세션 ID를 찾습니다.

  6. ==============================

    6.나는 이것에 대한 확인을 찾지 못했지만 세션 ID가 이미 존재하는지 그 php가 그 id로 생성하기 전에 존재하는지 확인합니다.

    나는 이것에 대한 확인을 찾지 못했지만 세션 ID가 이미 존재하는지 그 php가 그 id로 생성하기 전에 존재하는지 확인합니다.

    사람들이 세션 하이재킹 문제에 대해 걱정하는 것은 누군가가 활성 사용자의 세션 ID를 알아내는 것입니다. 이것은 많은면에서 예방할 수 있습니다. php.net에서이 페이지를 볼 수있는 자세한 정보와 세션 고정에 대한이 백서

  7. ==============================

    7.세션 ID는 GUID가 아니지만 두 명의 사용자가 서버 측에 저장된 것과 동일한 세션 ID를 가져 오면 안됩니다.

    세션 ID는 GUID가 아니지만 두 명의 사용자가 서버 측에 저장된 것과 동일한 세션 ID를 가져 오면 안됩니다.

  8. ==============================

    8.

    <?php
    session_start();
    $_SESSION['username']="username";
    ?>
    
    <!DOCTYPE html>
    <html>
    <head>
        <title>Update</title>
    </head>
    <body>
    
    <table border="2">
        <tr>
            <th>Username</th>
            <th>Email</th>
            <th>Edit</th>
        </tr>
    <?php
         $conn=mysqli_connect("localhost","root","","telephasic");
         $q2="select * from register where username = '".$_SESSION['username']."'";
         $run=mysqli_query($conn, $q2);
         while($row=mysqli_fetch_array($run))
         {
             $name=$row[1];
             $email=$row[2];
         ?>
    
        <tr>
            <td><?php echo $name; ?></td>
            <td><?php echo $email; ?></td>
            <td><a href="edit.php"> Edit </a></td>
        </tr>
     <?php } ?>
     </table> 
     </body>
    

    사용자 이름이 다르거 나 고유하면 세션에이 코드를 사용할 수 있습니다.

  9. from https://stackoverflow.com/questions/138670/how-unique-is-the-php-session-id by cc-by-sa and MIT license