세션, 쿠키, 암호 보안

Session

  • session 으로 정보를 저장해놓기.

    <?php
    session_start();
    $_SESSION['TEXT']="세션에 텍스트 저장";
    ?>
    
  • 다른 PHP 페이지에서 $_SESSION[‘TEXT’]의 정보를 꺼낼 수 있다.

  • 로그인 페이지 만들기에서 살짝 수정해, session에 아이디를 저장할 것이다.

    • login.php 에서 로그인

    image

    • session.php에서 session 에 저장되어 있는 값 출력

    image

  • login.php를 살짝 수정

    image

  • session.php

    <?php
        session_start();
    if($_SESSION['email']){
        echo $_SESSION['email']." is logged in!";
    }else{
        echo "Session does not exist.";
    }
    ?>
    
  • header 전에 echo 했더니 오류났다.

    echo "<p>You have been signed up</p>";
    //echo 윗줄 있으면 오류. 아마 header가 가장 먼저 있어야하나보다?
    $_SESSION['email']=$_POST['email'];
    header("Location: ../session.php");
    
  • $_COOKIE[]에 저장할 수 있다.
  • setCookie(“키”,”값”,”지속시간”)으로 쿠키를 설정할 수 있다.
<?php
setCookie("customerId","1234",time()+60*60*24);
echo $_COOKIE["customerId"];
?>
  • cookie를 unset하기 위해서는 empty 스트링으로 설정한 후, 과거 날짜로 설정하면 된다.
<?php
setCookie("customerId","",time()-60*60);
echo $_COOKIE["customerId"];
?>

Storing Password Securely

level2 - md5

<?php
    echo md5("password");
    ?>
  • output이 엄청 이상한 스트링.
    • https://crackstation.net/hashing-security.htm 근데 여기에 흔한 단어는 디코딩돼 있어서 해커들이 맞추기 쉬움.

level3 - md5

  • 그래서, 이렇게 앞에 랜덤한 스트링 더해서 md5로 저장해주면 해석하기 어려워진다.
$salt = "sdfjlkaj123901342lkd";
echo md5($salt."password");

level4 - md5

  • 랜덤한 스트링이 레코드 마다 다르다.
    • $row[‘id’]=73; 이렇게
    • 그러나, 이 값이 변화하는 값이면 안된다. static 값이어야함. 변경되는 값이면 md5 아웃풋 달라지니까!
echo md5(md5($row['id'])."password");

더 안전 - password_hash

  • php5에서 소개된 새로운 password_hash()함수. md5보다 안전하다!
<?php
// Generate a hash of the password "mypassword"
$hash = password_hash("mypassword", PASSWORD_DEFAULT);

// Echoing it out, so we can see it:
echo $hash;

// Some line breaks for a cleaner output:
echo "<br><br>";

// Using password_verify() to check if "mypassword" matches the hash.
// Try changing "mypassword" below to something else and then refresh the page.
if (password_verify('mypassword', $hash)) {
    echo 'Password is valid!';
} else {
    echo 'Invalid password.';
}
?>

© 2018. All rights reserved.

Powered by Hydejack v8.5.2