세션, 쿠키, 암호 보안
Session
session 으로 정보를 저장해놓기.
<?php session_start(); $_SESSION['TEXT']="세션에 텍스트 저장"; ?>
다른 PHP 페이지에서 $_SESSION[‘TEXT’]의 정보를 꺼낼 수 있다.
로그인 페이지 만들기에서 살짝 수정해, session에 아이디를 저장할 것이다.
- login.php 에서 로그인
- session.php에서 session 에 저장되어 있는 값 출력
login.php를 살짝 수정
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
- $_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.';
}
?>