일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- stock price
- java
- SQL Injection
- todo
- 취약점
- study
- 모의해킹
- SQLMap
- meterpreter
- CSRF
- Router
- 정보시스템
- programmers
- 웹해킹
- ToDoList
- hackerrank
- algotithm
- wpscan
- 라우터
- todo List
- StringBuilder
- 모드 설정
- 미터프리터
- 써니나타스
- Algorithm
- leetcode
- metasploit
- 취약점진단
- Suninatas
- HTML Injection
- Today
- Total
보안 / 개발 챌린저가 목표
PHP에 대한 전반적인 이해 본문
PHP(Personal Hypertext Preprocessor)란
- 프로그래밍 언어의 일종이다
- 서버 측에서 실행되는 프로그래밍 언어로 HTML을 프로그래밍적으로 생성해주고, 데이터베이스와 상호작용 하면서 데이터를 저장하고, 표현한다.
- PHP는 웹을 위해서 만들어졌고, 지금도 웹을 위해서 발전하고 있는 언어라고 할 수 있다.
기본적인 CRUD를 할 수 있는 웹 페이지 만들기
C Create │ R Read │ U Update │ D Delete
▶ Create
「create.php」
<a href="create.php">create</a>
"create" 버튼을 클릭하여 글을 작성할 수 있다.
<form action="create_process.php" method="post">
<p>
<input type="text" name="title" placeholder="Title">
</p>
<p>
<textarea name="description" placeholder="Description"></textarea>
</p>
<p>
<input type="submit">
</p>
</form>
form 태그로 작성한 데이터를 "create_process.php"에 보낼 수 있도록 한다.
이 때 꼭 "POST" 방식으로 보내주어야 한다. 파라미터가 주소창에 노출되면 안되기 때문이다.
「create_process.php」
<?php
file_put_contents('data/'.$_POST['title'], $_POST['description']);
header('Location: /index.php?=id'.$_POST['title']);
?>
file_put_contents(); 함수를 이용하여 data 폴더 안에 POST 값으로 넘어온 title을 파일로 저장하고, POST 값으로 넘어온 description을 내용으로 저장한다.
header(); 함수로 데이터를 저장하고 난 후 페이지를 해당 글로 이동시킨다.
▶ Update
「update.php」
<?php if(isset($_GET['id'])) { ?>
<a href="update.php?id=<?=$_GET['id']?>">update</a>
<?php } ?>
id는 글 번호를 의미한다. 만약 id가 존재한다면 "update" 버튼이 있게 조건문을 만든다.
isset() 함수로 id의 존재 여부를 판단할 수 있다.
<form action="update_process.php" method="post">
<input type="hidden" name="old_title" value="<?=$_GET['id']?>">
<p>
<input type="text" name="title" placeholder="Title" value="<?php print_title(); ?>">
</p>
<p>
<textarea name="description" placeholder="Description"><?php print_description(); ?></textarea>
</p>
<p>
<input type="submit">
</p>
</form>
update를 하기 위해서는 원래의 제목의 번호 값을 넘겨야 한다. 그래야 원래 있던 번호를 찾아 해당 번호에 수정된 제목과 내용을 저장할 수 있기 때문이다. 이런 경우에는 input에 type을 hidden 속성으로 지정하여 안보이게 데이터를 넘겨주는 것이다. value 값에는 원래의 제목이 넘어온다.create.php에서 작성한 form 안에 create할 때 입력했던 데이터들이 그대로 남아있도록 input의 value 값에 print_title(); 을 호출한다. textarea에도 원래의 데이터가 남아있게 하기 위해 print_description();을 호출한다.
「update_process.php」
<?php
rename('data/'.$_POST['old_title'], 'data/'.$_POST['title']);
file_put_contents('data/'.$_POST['title'], $_POST['description']);
header('Location: /index.php?=id'.$_POST['title']);
?>
rename(); 함수는 파일의 이름을 변경하는 함수이다. 인자의 첫 번째 값에는 이전의 제목, 두 번째 값에는 새로운 제목을 넣어주면 된다.
file_put_contents(); 함수에는 제목과 내용을 넣어준다.
마찬가지로 header(); 함수를 사용하여 수정한 해당 글로 페이지를 가게 한다.
▶ Delete
「index.php」
<?php if(isset($_GET['id'])) { ?>
<a href="update.php?id=<?=$_GET['id']?>">update</a>
<form action="delete_process.php" method="post">
<input type="hidden" name="id" value="<?=$_GET['id']?>">
<input type="submit" value="delete">
</form>
<?php } ?>
delete는 따로 php 파일이 필요하지 않다. 누르면 바로 삭제가 되면 끝이기 때문이다. 따라서 index.php에 코드를 작성한다.
글의 넘버가 있어야 수정과 삭제가 가능하기 때문에 조건문을 사용한다.
delete는 a링크로 만들면 누군가가 그 링크를 공유하였을 때, 링크를 아무나 클릭하면 삭제가 바로 되기 때문에 form 형태로 구성한다. input 속성의 hidden 타입으로 삭제할 글의 번호를 넘겨 삭제를 한다.
「delete_process.php」
<?php
unlink('data/'.$_POST['id']);
header('Location: /index.php');
?>
unlink(); 함수는 서버에 위치한 파일 또는 디렉토리를 삭제할 때 사용하는 함수이다. 이 함수를 이용하여 파일을 삭제한다. data 폴더 안에 있는 해당 id를 삭제한다.
* 소스 출처
'IT Security > Web hacking Study' 카테고리의 다른 글
HTML Injection (0) | 2020.11.10 |
---|---|
Metasploit (0) | 2020.11.10 |
Scan (0) | 2020.10.27 |
LFI & RFI (0) | 2020.10.15 |
SQL Injection (0) | 2020.10.15 |