Skip to content
This repository has been archived by the owner on Apr 25, 2020. It is now read-only.

Latest commit

 

History

History
131 lines (74 loc) · 4.5 KB

7차시 수업자료.md

File metadata and controls

131 lines (74 loc) · 4.5 KB

7차시 수업자료

수업 목표

  • 6차시에 배웠던 간단한 PHP 코드를 스스로 짤 수 있다.
  • HTTP 프로토콜 상에서 사용자로부터 값을 전달받는 코드를 짤 수 있다.
  • 쿠키와 세션이 무엇인지 알고 차이점을 말할 수 있다.
  • PHP로 쿠키와 세션을 받고 그것이 어떤 방식으로 동작하는지 안다.

교육 일정 소개

6차시 수업 복습

  • echo를 이용해서 출력해보기
  • $를 통해 변수를 생성하고 수정하기
  • $_GET을 통해서 입력받는 계산기 만들기

쿠키와 세션

쿠키

  • 클라이언트 로컬에 저장되는 이 들어있는 작은 데이터 파일이다.
  • 이름, 값, 만료일자, 경로 정보가 들어있다.
  • 일정시간동안 데이터를 저장할 수 있어 로그인 상태 유지에 사용된다.

쿠키의 사용 사례

  • 자동 로그인
  • 팝업의 다시보지 않기 기능
  • 쇼핑몰 장바구니

세션

  • 일정 시간동안 같은 브라우저로부터 들어오는 요구를 하나의 상태로 보고 그 상태를 유지하는 기술
  • 웹 브라우저를 이용해서 웹서버에 접속한 이후로 브라우저를 종료할 때까지 유지되는 상태
  • 클라이언트가 Request를 보내면 해당 서버에서 클라이언트에게 유일한 ID를 부여하는데 이것이 세션ID

세션의 사용 사례

  • 로그인 정보 유지

쿠키와 세션의 차이점

저장 위치

쿠키 세션
클라이언트에 파일로 저장 서버에 저장

보안

쿠키 세션
클라이언트 로컬에 저장되기 때문에 변질되거나 요청 시 스니핑의 위험이 있음. (보안에 취약함) 쿠키를 이용해서 SESSIONID만 저장하고 그것을 가지고 서버에 정보를 저장하기 때문에 보안에 좋음.

라이프사이클

쿠키 세션
만료시간이 존재하지만 파일로 저장되기 때문에 브라우저를 종료해도 남아있을 수 있음. 브라우저가 종료되면 만료시간에 상관없이 삭제됨.

속도

쿠키 세션
요청할 때 쿠키를 같이 보내기 때문에 빠름. 보낸 쿠키에서 세션ID를 받고 그것을 통해 정보를 갖고 옴. (느림)

PHP에서 쿠키와 세션받기

$_COOKIE$_SESSION을 이용함.

간단한 로그인 구현

  • $_GETif문을 이용해서 간단한 로그인을 구현한 후, $_COOKIE$_SESSION을 이용해서 로그인을 유지하는 방법 서로 토의해보고, 각 방법의 장단점 생각해보기
  • 각 방법들을 PHP로 구현해보기

여기에서부터는 시간이 되면 진행

데이터베이스 통신

닷홈을 통해서 진행할 예정

mysqli_*

  • 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을 하기 위해서 위의 소스를 해석하는 연습을 한다.