- 6차시에 배웠던 간단한 PHP 코드를 스스로 짤 수 있다.
- HTTP 프로토콜 상에서 사용자로부터 값을 전달받는 코드를 짤 수 있다.
- 쿠키와 세션이 무엇인지 알고 차이점을 말할 수 있다.
- PHP로 쿠키와 세션을 받고 그것이 어떤 방식으로 동작하는지 안다.
echo
를 이용해서 출력해보기$
를 통해 변수를 생성하고 수정하기$_GET
을 통해서 입력받는 계산기 만들기
- 클라이언트 로컬에 저장되는
키
와값
이 들어있는 작은 데이터 파일이다. - 이름, 값, 만료일자, 경로 정보가 들어있다.
- 일정시간동안 데이터를 저장할 수 있어 로그인 상태 유지에 사용된다.
- 자동 로그인
- 팝업의
다시보지 않기
기능 - 쇼핑몰 장바구니
- 일정 시간동안 같은 브라우저로부터 들어오는 요구를 하나의 상태로 보고 그 상태를 유지하는 기술
- 웹 브라우저를 이용해서 웹서버에 접속한 이후로 브라우저를 종료할 때까지 유지되는 상태
- 클라이언트가 Request를 보내면 해당 서버에서 클라이언트에게 유일한 ID를 부여하는데 이것이
세션ID
- 로그인 정보 유지
쿠키 | 세션 |
---|---|
클라이언트에 파일로 저장 | 서버에 저장 |
쿠키 | 세션 |
---|---|
클라이언트 로컬에 저장되기 때문에 변질되거나 요청 시 스니핑의 위험이 있음. (보안에 취약함) | 쿠키를 이용해서 SESSIONID 만 저장하고 그것을 가지고 서버에 정보를 저장하기 때문에 보안에 좋음. |
쿠키 | 세션 |
---|---|
만료시간이 존재하지만 파일로 저장되기 때문에 브라우저를 종료해도 남아있을 수 있음. | 브라우저가 종료되면 만료시간에 상관없이 삭제됨. |
쿠키 | 세션 |
---|---|
요청할 때 쿠키를 같이 보내기 때문에 빠름. | 보낸 쿠키에서 세션ID 를 받고 그것을 통해 정보를 갖고 옴. (느림) |
$_COOKIE
와 $_SESSION
을 이용함.
$_GET
과if
문을 이용해서 간단한 로그인을 구현한 후,$_COOKIE
와$_SESSION
을 이용해서 로그인을 유지하는 방법 서로 토의해보고, 각 방법의 장단점 생각해보기- 각 방법들을
PHP
로 구현해보기
여기에서부터는 시간이 되면 진행
닷홈
을 통해서 진행할 예정
- mysqli_connect() : MySQL DB와의 커넥션을 생성한다.
- mysqli_query() : Query를 DB에 보내고 Query의 상태를 전달한다.
- mysqli_fetch_array() : 보낸 쿼리를 가져온다.
- DB를 통한 로그인을 설명함.
$_GET
으로 받은 id와 pw로 SQL query를 만들어서 로그인.
<?php
include "./config.php";
login_chk();
dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); // do not try to attack another table, database!
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysql_fetch_array(mysql_query($query));
if($result['id']) solve("gremlin");
highlight_file(__FILE__);
?>
Lord of SQL Injection
의 1번 문제의 소스코드이다. SQL Injection을 하기 위해서 위의 소스를 해석하는 연습을 한다.