본문 바로가기

PHP Session 저장 원리 PHP에서 실제로 Session이 Server 측에 어떤 형식으로 저장되는지 알아보겠습니다. 먼저 쿠키와 세션에 대한 정의는 너무나도 잘 알려 있기 때문에 생략합니다. 간단하게 한 줄로 요약해 보라고 한다면 다음과 같이 적고 싶습니다. 쿠키(Cookie) : 서버 측에서 클라이언트 식별 정보를 웹 브라우저에 전달하여 세션 관리 세션(Session) : 쿠키가 사용자 웹 브라우저에 저장되어 발생하는 단점을 극복하기 위해 서버 측에 정보를 저장 먼저 Session을 발생시켜야 하기 때문에 아래와 같은 간단한 Login 절차를 구현해야 합니다. 1234567891011Login... cs Login이 정상적으로 이루어 지면 $user_id 와 $user_name을 $_SESSION의 변수로 등록합니다. 보통 .. 더보기
[SQL] SELECT Query 특성에 따른 SQL Injection 기법 다음과 같은 테이블을 생성하겠습니다. "user" Column은 Char타입이고 "no" Column은 Int타입 입니다. Records는 다음과 같이 2개를 넣겠습니다. 다음과 같은 방법으로 "admin"을 출력시킬 수 있습니다. 위 Query의 논리를 정확하게 이해하기 위해서는 다음의 사항들을 이해해야 합니다. SELECT * FROM sql150 WHERE sleep(1) 라고 Query를 날리면 몇 초가 출력될까요? 위와 같이 1초가 아니라 2초가 출력 됩니다. 즉 Record마다 sleep(1) 함수가 적용된다음 2초가 출력되는 것 입니다. 따라서 WHERE 이하 절의 값을 확인 하기 위해 Row마다 들어가서 검사하는 것 입니다. 다음으로 아래의 3가지 Query를 이해해야 합니다. 첫번째, S.. 더보기
[SQL] MySQL Automatic Type Cast MySQL의 자동 형 변환에 따른 특성에 대해 설명하겠습니다. 다음과 같은 테이블을 생성하겠습니다. "user" Column은 Char타입이고 "no" Column은 Int타입 입니다. Records는 다음과 같이 2개를 넣겠습니다. 이제 본격적으로 MySQL의 자동 형 변환에 대해 살펴보겠습니다. 다음과 같이 Char 타입의 Column에 Int 타입의 0을 "="으로 비교하면 모든 Records가 조회됩니다. 이것은 MySQL의 자동 형 변환 때문에 발생합니다. 서로 다른 타입의 데이터를 비교하면 MySQL은 2개의 데이터를 같은 타입으로 변환해서 비교합니다. 위의 Query의 "user=0"에서 user는 INT 0으로 변환되고 결국 0=0이 되어 모든 데이터가 출력되게 됩니다. 좀 더 자세하게 아.. 더보기