보안 / 개발 챌린저가 목표

PHP에 대한 전반적인 이해 본문

IT Security/Web hacking Study

PHP에 대한 전반적인 이해

햄미은서 2020. 9. 12. 22:23

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를 삭제한다.

 

 

 

   * 소스 출처

opentutorials.org/course/3130

 

WEB2 - PHP - 생활코딩

수업소개 이 수업은 https://opentutorials.org 를 만들어가면서 PHP에 대한 지식과 경험을 동시에 채워드리기 위한 목적으로 만들어진 수업입니다.  수업대상 이 수업은 1억개의 웹페이지를 생산하면��

opentutorials.org

 

'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
Comments