일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- php file upload
- sql injection
- Authentication
- Reconnaissance
- file upload
- THM
- tryhackme
- php 파일 업로드하기
- php login page
- php To Do List
- php 로그인 페이지 만들기
- Recon
- overthewire
- ssrf
- Server Side Request Forgery
- 파일 업로드 취약점
- BANDiT
- over the wire
- php
- SQLi
- privilege escalation
- active reconnaissance
- OS Command Injection
- Cryptography
- access control
- active recon
- Cookie
- Leviathan
- FTZ
- War Game
- Today
- Total
R's Hacking Daily Log
php Session 본문
Step :: Session
Session에 대한 개념적인 내용은 여기서 다루지 않을 것이다.
php 상에서 Session & Cookie를 어떻게 생성하고 값을 할당할 수 있는지에 대해서만 간단히 살펴보자.
<?php
session_start();
$_SESSION['city'] = '부산';
$_SESSION['gu'] = '해운대구';
echo $_SESSION['city'];
session을 생성하기 위해서는 코드 상단에 session_start() 함수를 호출해야 한다.
session_start() 함수는 session id가 존재하는 지 여부를 확인하여
존재하지 않는 경우, 새로운 id를 만들고
존재하는 경우, id에 할당된 값을 불려서 사용할 수 있도록 해준다.
$_SESSION['SESSION_NAME'] = VALUE 형태에서
'SESSION_NAME' 위치에 작성되는 값을 SESSION ID(session 변수 or key)라고 하고
VALUE 위치에 작성되는 값이 session id에 상응하는 세션 값이 된다.
따라서 위의 코드에서는 city라는 이름의 session이 "부산",
gu라는 이름의 session은 "해운대구"라는 값을 가진다고 할 수 있다.
세션 값을 변경하고 싶다면 SESSION_NAME 위치에 변경하고자 하는 세션 아이디를 쓰고
수정할 값을 VALUE 위치에 적으면 된다.
"부산"을 할당한 SESSION city를 "서울"로 바꾸는 예시로 코드를 보자면 아래와 같다.
<?php
session_start();
$_SEESION['city'] = "부산";
...
$_SEESION['city'] = "서울";
코드에서 본 바와 같이 세션을 생성 & 할당 & 참조하는 것은
슈퍼 글로벌 변수 $_SESSION을 통해 이루어진다.
연관 배열과 비슷하게 key-value 형태로 위에서 언급했듯이
key는 세션의 이름 값으로 사용되며 value는 해당 세션에 할당한 값이다.
그렇다 보니 연관 배열을 사용한 방법과 동일하게 값을 할당하고 참조하는 형태임을 눈치챌 수 있다.
<?php
session_start();
# 세션 생성 및 할당
$_SESSION['city'] = "부산";
$_SESSION['gu'] = "해운대구";
# 세션 참조
echo "도시 : ".$_SESSION['city']." 구 : ".$_SESSION['gu'];
세션을 생성하고 할당하는 방법을 알아보았으니 반대로 해지하는 방법도 살펴보자.
특정 세션만을 해지하고 싶을 때는 unset() 함수를,
현재 등록된 모든 세션을 해지하고 싶을 땐 session_unset() 함수를 사용할 수 있다.
세션을 생성하기 위해 코드 상단에 입력했던 session_start() 함수처럼
세션 자체를 종료시키기 위해서는 session_destroy() 함수를 사용한다.
<?php
unset($_SESSION["city"]);
session_unset(); # 모든 세션 등록 해지
session_destroy(); # 모든 세션 삭제, 종료
unset & destroy 함수의 용도가 헷갈릴 수 있지만
unset 함수는 세션을 계속 사용하되, 현재 등록된 세션을 없애는 것이고
destroy 함수는 세션 사용 자체를 안하겠다 선언을 하는 것이다.
[create_session.php]
<?php
session_start();
$session_value = "Ryu";
$_SESSION["mySession"] = $session_value;
?>
<html>
<head>
<title>Create session</title>
</head>
<body>
<h1>
Session Example
</h1>
~세션 만들기~
세션 값은 <a href="./result_session.php">여기서 확인!</a>;
</body>
</html>
세션 mySession에 "Ryu"라는 값을 할당하는 php 코드를 작성했다.
여기서 생성한 mySession 값을 확인하기 위해서는 result_session.php로 이동한다.
[result_session.php]
<?php
session_start();
?>
<html>
<head>
<title>Result session</title>
</head>
<body>
<h1>Session Example</h1>
세션 값은 : <?php echo $_SESSION['mySession']; ?>
</body>
</html>
다른 php file에서 세션을 만들었지만 글로벌 변수이기 때문에
코드 상단에 session_start 함수만 기재를 한다면 세션을 사용하는 데에는 지장이 없다는 걸 확인할 수 있다.
a tag로 링크를 건 "여기서 확인!" 문구로 mySession 값을 참조하는 result_session.php로 이동하면
정상적으로 세션 값이 출력되고 있는 걸 볼 수 있다!
(!!) session은 cookie로 만든 인증과 관련된 정보 조각이라 할 수 있는 데
session은 php.ini 파일에 지속 시간이 설정되어 있기 때문에 해당 값을 따로 지정할 필요가 없다.
'PHP' 카테고리의 다른 글
php - HTML Form으로 데이터 전송하기 (1) (0) | 2023.07.23 |
---|---|
php Cookie (0) | 2023.07.22 |
php 예외 처리 (0) | 2023.07.19 |
php 객체 지향 프로그램 (6) (0) | 2023.07.18 |
php 객체 지향 프로그램 (5) (0) | 2023.07.18 |