https://github.com/jini-coding/ott_review_project

 

GitHub - jini-coding/ott_review_project: SISS 2022 겨울방학 웹프로젝트 - OTT별 콘텐츠 리뷰 홈페이지 제작

SISS 2022 겨울방학 웹프로젝트 - OTT별 콘텐츠 리뷰 홈페이지 제작. Contribute to jini-coding/ott_review_project development by creating an account on GitHub.

github.com

 

8주차 내용은 아래 링크를 참고

https://jini00.tistory.com/161

 

[8주차] 웹프로젝트 진행

이번주 계획  : 후기 게시판 제작, 검색 기능 추가 (+ 지난주에 못 완성한 후기 글 수정, 삭제 기능 추가) 1) 후기 게시판 제작 - 후기를 모아놓은 게시판 제작 2) 검색 기능  - 검색 기능 추가 3) 후

jini00.tistory.com

BOARD

별점

별점을 이전에는 숫자로 표현했지만 더욱 시각적으로 잘 나타내기 위해 별 모양으로 변경하기로 하였다.

<div id="board">
      <h3><?php echo $board['title']; ?></h3>
      <div style="border-bottom:1px solid black; padding-bottom:10px;">
      <?php echo $board['ott']; ?> &nbsp;&nbsp;
      별점 : <span class='RatingStar'>
            <span class='RatingScore'>
             <span class='outer-star'><span class='inner-star'></span></span>
         </span>
       </span>
      <script>
      ratings = {RatingScore: <?php echo $board['score'];?>}
      totalRating = 5;
      table = document.querySelector('.RatingStar');
      function rateIt() {
        for (rating in ratings) {
          ratingPercentage = ratings[rating] / totalRating * 100;
          ratingRounded = ratingPercentage + '%';
          star = table.querySelector(`.${rating} .inner-star`);
          numberRating = table.querySelector(`.${rating} .numberRating`);
          star.style.width = ratingRounded;
          numberRating.innerText = ratings[rating];
        }
      }
      rateIt()
    </script>
    &nbsp;&nbsp;&nbsp;
    <?php echo $board['created']; ?> </div>

  별점을 별 모양으로 표현하는 것은 다른 사이트를 참고했다.

해당 사이트를 참고하여 기본적인 틀(html, css 코드)는 그대로 가져와 사용했고 사용하는 목적에 따라 스크립트 코드는 살짝 바꿔서 DB에 저장된 score 변수를 가져와 해당 변수에 저장된 값만큼 별모양이 표시되도록 했다.

 

버튼

<div id="option">
    <button onclick="history.back();">목록</a></button>
    <button><a href="modify_review.php?id=<?php echo $board['id']; ?>">수정</a></button>
    <button><a href="delete_process.php?id=<?php echo $board['id']; ?>">삭제</a></button>
</div>

  이전에는 span으로 버튼을 만들었었는데 ott 종류에 따라 목록 페이지가 나눠지게 되면서 그 전 목록으로 돌아가기 위해 이전에 방문했던 페이지로 연결해주는 history.back()을 사용하게 되었다.

이를 사용하려면 button의 onclick 속성을 적용하는 게 편해서 위와 같이 코드를 일부 수정했다.

 

글 수정

  위 사진은 수정 버튼을 눌렀을 때 나타나는 페이지이다.

별점과 내용을 수정할 수 있도록 만들었다.

 

  수정 버튼을 누르면 수정되었다는 팝업과 함께 review_page.php 페이지로 돌아가는데, 방금 수정한 글을 찾아가서 확인해보면 아래와 같이 내용이 잘 수정되었음을 확인할 수 있다.

별점을 4로 수정해보았다.

?php
$conn = mysqli_connect("localhost", "root", "비밀번호", "contents_review");

function mq($sql)
{
  global $conn;
  return $conn->query($sql);
}

  $num = $_GET['id'];
  $title = $_POST['title'];
  $ott = $_POST['ott'];
  $category = $_POST['category'];
  $score = $_POST['score'];
  $comments = $_POST['comments'];
  $created = $_POST['created'];

$sql = mq("UPDATE review_list set score='".$score."', comments='".$comments."' where id='".$num."'");

?>

<script type="text/javascript">alert("수정되었습니다."); </script>
<meta http-equiv="refresh" content="0 url=review_page.php?id=<?php echo $num; ?>">

  지난주 코드에서 변수 순서만 조금 바꿔주었다. 중간에 Undefined Arrary key 오류가 계속 떠서 한참 헤맸는데, 위에서 변수의 순서를 DB의 컬럼 순서와 맞춰서 다시 정리해주니 오류가 사라지고 정상적으로 동작하게 되었다.

 

전체 리뷰보기

<?php
$conn = mysqli_connect("127.0.0.1", "root", "비밀번호", "contents_review");


function mq($sql)
{
  global $conn;
  return $conn->query($sql);
}

if (isset($_GET['page']))
  $page = $_GET['page'];
else
  $page = 1;

 ?>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <style>
      a {
        text-decoration:none;
        color:black;
      }
      #main{
        font-size:40px;
        text-align: center;
        padding: 30px;
        color :#A50000;
        border-bottom:1px solid black;
      }
      #selected{
        font-weight:bold;
      }
      body{
        background-color:#FFD8D8;
      }
      #home{
        border:1px solid black;
        border-radius : 5px;
        padding:3px;
      }
      #home a{
        text-decoration:none;
        color:black;
      }
      nav{
        width:200px;
        border-right:1px solid black;
        position:fixed;
      }
      .title_menu{
        font-size:18px;
        padding:5px;
      }
      .menu {
        list-style:none;
        padding-left:0px;
      }
      .menu li a {
        line-height:30px;
        display:block;
        padding:0 20px;
        font-size:15px;
        color:#555555;
        border-bottom:1px solid black;
        text-decoration:none;
      }
      .menu li a:hover {
        background-color:grey; color:white;
      }
      #board{
        padding-left:260px;
        padding-top:15px;
      }
      .list-table {
      	margin-top: 40px;
      }
      .list-table thead th{
	      height:40px;
	      border-top:2px solid black;
	      border-bottom:1px solid black;
	      font-weight: bold;
	      font-size: 17px;
      }
      .list-table tbody td{
	      text-align:center;
	      padding:10px 0;
	      border-bottom:1px solid black; height:20px;
	      font-size: 14px
      }
    </style>
    <title>BOARD</title>
  </head>
  <body>
    <span id="home"><a href="index.php">메인으로</a></span>
    <h1 id="main">BOARD</h1>
    <nav>
    <h1 class="title_menu"> 전체 리뷰 보기 </h1>
    <ul class="menu">
        <li><a href="review_page.php" id="selected">- 리뷰 모아보기</a></li>
    </ul>
    <h1 class="title_menu">Netflix</h1>
    <ul class="menu">
        <li><a href="review_page_netflix.php">- 리뷰 모아보기</a></li>
    </ul>
    <h1 class="title_menu">Watcha</h1>
    <ul class="menu">
        <li><a href="review_page_watcha.php">- 리뷰 모아보기</a></li>
    </ul>
    <h1 class="title_menu">Tving</h1>
    <ul class="menu">
        <li><a href="review_page_tving.php">- 리뷰 모아보기</a></li>
    </ul>
    <h1 class="title_menu">Disney+</h1>
    <ul class="menu">
        <li><a href="review_page_disney+.php">- 리뷰 모아보기</a></li>
    </ul>
    </nav>
    <div id="board"><h3>전체 리뷰 모아보기</h3>
      <table class="list-table" style="padding-right:40px">
      <thead>
          <tr>
            <th width="70">번호</th>
            <th width="100">OTT</th>
            <th width="300">제목</th>
            <th width="80">별점</th>
            <th width="1000">후기</th>
            <th width="100">작성일</th>
           </tr>
       </thead>
    <?php

      $sql1 = mq("select * from review_list");
      $total_record = mysqli_num_rows($sql1);

      $list = 5;
      $block_cnt = 5;
      $block_num = ceil($page / $block_cnt);
      $block_start = (($block_num - 1) * $block_cnt) + 1;
      $block_end = $block_start + $block_cnt - 1;

      $total_page = ceil($total_record / $list);
      if($block_end > $total_page){
          $block_end = $total_page;
      }
      $total_block = ceil($total_page / $block_cnt);
      $page_start = ($page - 1) * $list;

      $sql = mq("select * from review_list order by id desc limit $page_start, $list");

      while($board = $sql->fetch_array())
      {
          $comments=$board["comments"];
          if(strlen($comments)>30)
			$comments=str_replace($board["comments"],mb_substr($board["comments"],0,40,"utf-8")."...",$board["comments"]);
       }
    ?>
      <tbody>
        <tr>
          <td width="70"><?php echo $board['id']; ?></td>
          <td width="100"><?php echo $board['ott']; ?></td>
          <td width="300"><?php echo $board['title'];?></a></td>
          <td width="80"><?php echo $board['score']?></td>
          <td width="1000"><a href="read_process.php?id=<?php echo $board["id"];?>"><?php echo $comments ?></td>
          <td width="100"><?php echo $board['created']; ?></td>
        </tr>
      </tbody>
      <?php } ?>
      </table>

      <div id="page_num" style="text-align: center; padding-top:20px;">
        <?php
            if ($page <= 1){
            } else {
                echo "<a href='review_page.php?page=1'>맨 처음</a>";
            }

            if ($page <= 1){
            } else {
                $pre = $page - 1;
                echo "<a href='review_page.php?page=$pre'> ◀ </a>";

            }

            for($i = $block_start; $i <= $block_end; $i++){
                if($page == $i){
                    echo "<b> $i </b>";
                } else {
                    echo "<a href='review_page.php?page=$i'> $i </a>";
                }
            }

            if($page >= $total_page){
            } else {
                $next = $page + 1;
                echo "<a href='review_page.php?page=$next'> ▶ </a>";
            }

            if($page >= $total_page){
            } else {
                echo "<a href='review_page.php?page=$total_page'>맨 끝</a>";
            }
        ?>
    </div>

  </body>
</html>

  

 

- 페이지 넘기기

글 목록 아래에 페이지 숫자를 넣어서 글을 넘길 수 있도록 했다.

<?php
      $sql1 = mq("select * from review_list");
      $total_record = mysqli_num_rows($sql1);

      $list = 5;
      $block_cnt = 5;
      $block_num = ceil($page / $block_cnt);
      $block_start = (($block_num - 1) * $block_cnt) + 1;
      $block_end = $block_start + $block_cnt - 1;

      $total_page = ceil($total_record / $list);
      if($block_end > $total_page){
          $block_end = $total_page;
      }
      $total_block = ceil($total_page / $block_cnt);
      $page_start = ($page - 1) * $list;

        $sql = mq("select * from review_list order by id desc limit $page_start, $list");

        while($board = $sql->fetch_array())
        {

          $comments=$board["comments"];
          if(strlen($comments)>30)
          {

            $comments=str_replace($board["comments"],mb_substr($board["comments"],0,40,"utf-8")."...",$board["comments"]);
          }
?>


(...중략...)


<div id="page_num" style="text-align: center; padding-top:20px;">
    <?php
        if ($page <= 1){
        } else {
            echo "<a href='review_page.php?page=1'>맨 처음</a>";
        }

        if ($page <= 1){
        } else {
            $pre = $page - 1;
            echo "<a href='review_page.php?page=$pre'> ◀ </a>";

        }

        for($i = $block_start; $i <= $block_end; $i++){
            if($page == $i){
                echo "<b> $i </b>";
            } else {
                echo "<a href='review_page.php?page=$i'> $i </a>";
            }
        }

        if($page >= $total_page){
        } else {
            $next = $page + 1;
            echo "<a href='review_page.php?page=$next'> ▶ </a>";
        }

        if($page >= $total_page){
        } else {
            echo "<a href='review_page.php?page=$total_page'>맨 끝</a>";
        }
    ?>

  일단 한 페이지에 글 개수를 5개로 설정했으므로 리스트를 5로 설정하고 아래에 번호 뜨는 숫자는 5개로 제한했다.

DB에 저장된 데이터의 개수를 이용하여 필요한 변수들을 연산을 통해 각각 설정해주었다.

 

  글 목록 테이블 아래에는 숫자를 놓고 해당 번호를 누르면 페이지를 이동할 수 있도록 했다.

page 변수가 1보다 작을 경우 맨처음 버튼과 < 버튼을 만들어 각각 맨 처음 페이지, 이전 페이지로 이동할 수 있도록 했다.

반복문으로 그 이후부터는 변수 i를 기준으로 페이지를 이동할 수 있도록 했고 totalpage보다 큰 경우에는 > 버튼과 맨끝 버튼을 만들어서 각각 다음 페이지, 맨 마지막 페이지로 이동할 수 있도록 했다.

 

OTT별 페이지 

<?php
$conn = mysqli_connect("127.0.0.1", "root", "비밀", "contents_review");


function mq($sql)
{
  global $conn;
  return $conn->query($sql);
}

 ?>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <style>
      a {
        text-decoration:none;
        color:black;
      }
      #main{
        font-size:40px;
        text-align: center;
        padding: 30px;
        color :#A50000;
        border-bottom:1px solid black;
      }
      body{
        background-color:#FFD8D8;
      }
      #home{
        border:1px solid black;
        border-radius : 5px;
        padding:3px;
      }
      #home a{
        text-decoration:none;
        color:black;
      }
      nav{
        width:200px;
        border-right:1px solid black;
        position:fixed;
      }
      .title_menu{
        font-size:18px;
        padding:5px;
      }
      .menu {
        list-style:none;
        padding-left:0px;
      }
      .menu li a {
        line-height:30px;
        display:block;
        padding:0 20px;
        font-size:15px;
        color:#555555;
        border-bottom:1px solid black;
        text-decoration:none;
      }
      .menu li a:hover {
        background-color:grey; color:white;
      }
      #board{
        padding-left:260px;
        padding-top:15px;
      }
      .list-table {
      	margin-top: 40px;
      }
      .list-table thead th{
	      height:40px;
	      border-top:2px solid black;
	      border-bottom:1px solid black;
	      font-weight: bold;
	      font-size: 17px;
      }
      .list-table tbody td{
	      text-align:center;
	      padding:10px 0;
	      border-bottom:1px solid black; height:20px;
	      font-size: 14px
      }
    </style>
    <title>NETFLIX</title>
  </head>
  <body>
    <span id="home"><a href="index.php">메인으로</a></span>
    <h1 id="main">BOARD</h1>
    <nav>
    <h1 class="title_menu"> 전체 리뷰 보기 </h1>
    <ul class="menu">
        <li><a href="review_page.php">- 리뷰 모아보기</a></li>
    </ul>
    <h1 class="title_menu">Netflix</h1>
    <ul class="menu">
        <li><a href="review_page_netflix.php">- 리뷰 모아보기</a></li>
    </ul>
    <h1 class="title_menu">Watcha</h1>
    <ul class="menu">
        <li><a href="review_page_watcha.php">- 리뷰 모아보기</a></li>
    </ul>
    <h1 class="title_menu">Tving</h1>
    <ul class="menu">
        <li><a href="review_page_tving.php">- 리뷰 모아보기</a></li>
    </ul>
    <h1 class="title_menu">Disney+</h1>
    <ul class="menu">
        <li><a href="review_page_disney+.php">- 리뷰 모아보기</a></li>
    </ul>
    </nav>
    <div id="board"><h3>Netflix 리뷰 모아보기</h3>
      <table class="list-table" style="padding-right:40px">
      <thead>
          <tr>
              <th width="70">번호</th>
                <th width="100">OTT</th>
                <th width="300">제목</th>
                <th width="80">별점</th>
                <th width="1000">후기</th>
                <th width="100">작성일</th>
            </tr>
        </thead>
        <?php

          $sql = mq("select * from review_list where ott='netflix' order by id desc limit 0,5");
            while($board = $sql->fetch_array())
            {

              $title=$board["title"];
              if(strlen($title)>30)
              {

                $title=str_replace($board["title"],mb_substr($board["title"],0,30,"utf-8")."...",$board["title"]);
              }
        ?>
      <tbody>
        <tr>
          <td width="70"><?php echo $board['id']; ?></td>
          <td width="100"><?php echo $board['ott']; ?></td>
          <td width="300"><?php echo $title;?></a></td>
          <td width="80"><?php echo $board['score']?></td>
          <td width="1000"><a href="read_process.php?id=<?php echo $board["id"];?>"><?php echo $board['comments']?></td>
          <td width="100"><?php echo $board['created']; ?></td>
        </tr>
      </tbody>
      <?php } ?>
      </table>

  </body>
</html>

  위 코드는 넷플릭스의 컨텐츠들 리뷰를 보기 위한 것이다. 전체 리뷰 보기 페이지에서 각각의 ott만 선택되도록 하였다. $sql = mq("select * from review_list where ott='netflix' order by id desc limit 0,5"); 코드를 통해 ott별로 출력되는 화면을 다르게 해주었다. 

 

DB 데이터 채우기

INSERT INTO contentsreview(title, ott, category, score, comments, created) VALUES('크루엘라', 'disney+', '영화', '5', '재미있네요 조커와는 다른 매력적인 악당입니다. 조커는 밑바닥으로 추락하면서 빌런이 되지만 크루엘라는 정상을 찍으며 빌런이 됩니다.', NOW());

INSERT INTO contentsreview(title, ott, category, score, comments, created) VALUES('크루엘라', 'disney+', '영화', '5', '배우들 연기랑 음악도 넘 좋았고 재미있게 잘보았네요^^', NOW());

INSERT INTO contentsreview(title, ott, category, score, comments, created) VALUES('크루엘라', 'disney+', '영화', '5', '지금껏 본 디즈니 실사영화 중 가장 스타일리쉬함', NOW());

이와 같은 코드들로 여러가지 영화의 다양한 리뷰를 추가적으로 채워넣어주었다.

 

 

[난이도-low]

Quest. Change Secret 페이지에서 XSS 공격 후 SQL Injection(Login From/users) 페이지에서 확인할 수 있습니다.

다음 화면을 출력해보세요. (bee/bug)

 

먼저 New secret에 helloworld를 입력해보았다.

그리고 SQL Injection(Login Form/User) 페이지로 들어가주어 로그인을 해보았다.

 

로그인을 해주었더니 다음과 같은 내용이 출력되었다.

경고창을 띄우기 위하여 Change Secret 부분에 스크립트 태그를 작성하였다. 

 

<입력>

<script>alert("success")</script>

로그인 페이지로 이동하여 로그인을 해주니 아래 사진과 같이 경고창이 떴다.

 

 

Quest. secret을 사용자의 쿠키 정보로 바꿔봅시다.

위와 같은 방식으로 New secret 칸에 아래의 코드를 작성해주었다.

 

<입력>

<script>alert(document.cookie)</script>

 

그리고 로그인 페이지로 이동하여 로그인을 해주었더니 다음과 같은 결과를 얻었다.

 

 

[난이도-high]

Quest. 공격할 수 없습니다. Secret은 두 개의 함수를 이용해 방어하고 있습니다. 함수의 이름을 적어주세요.

Hint1. xss_stored_3.php에서 확인할 수 있습니다.
Hint2. DB에 저장되기 전에 변수를 어떻게 처리하는지 살펴보세요.

  코드를 살펴보면 xss_stored_3.php를 사용하고 있다는 점을 알 수 있다. 또한 난이도 high는 security_level이 2라는 점도 알 수 있다.

 

해당 파일을 살펴본 결과, security_level이 2인 경우, xss_check_3함수를 이용한다는 것을 알 수 있다.

 

xss_check_3함수에 관해 찾아보니 htmlspecialchars함수를 사용하고 있었다. 

 

  또한, mysqli_real_escape_string이라는 함수를 이용해 인자로 들어온 데이터 중 sql injection 공격과 관련된 여러 기호들을 문자로 바꿔누는 것을 확인할 수 있다.

 

따라서 이 두 함수로 인해 해당 문제를 풀 수 없다.

[난이도-low]

Quest. 다음 화면과 같이 경고창을 띄워봅시다.

  경고창을 띄우기 위해 script태그를 이용하여 success라는 문구를 띄울 수 있도록 <script>alert("success")</script>라고 작성해주었다.

<입력>

<script>alert("success")</script>

그랬더니 이와같이 경고창이 떴다.

 

 

Quest. 사용자의 쿠키 값을 경고창에 띄워봅시다.

Hint1. 사용자의 쿠키값은 document.cookie에 저장되어 있습니다.

지난주 실습처럼 script태그 내에 document.cookie를 입력해주었다.

 

<입력>

<script>alert(document.cookie)</script>

 

위와 같이 입력해 주었더니 아까 떴던 success 경고창이 먼저 뜬 후에 쿠키값이 경고창에 뜬 것을 확인할 수 있었다. 

 

 

Quest. (게시판에 등록된 내용을 삭제하지 않았다면) XSS 공격을 시도할 때마다 경고창이 여러 개가 뜨는 것을 확인했습니다. 왜 그럴까요? 이유를 작성해주세요.

Hint1. Stored XSS 방식에 대해 잘 생각해봅시다.
Hint2. 소스코드를 확인해봅시다. 테이블에 어떻게 저장되어 있나요?
Reflected 방식 Stored 방식
- URL, URL파라미터, Cookie 파라미터 등 사용자가 입력한 내용에 대해서 응답 페이지에 실행되는 취약점 - 공격자가 게시판등과 같은 부분에 악의적으로 스크립트를 삽입하고 저장하여 다른 사용자가 해당 게시글을 보거나, 리스트 확인시 악의적으로 삽입한 스크립트가 실행되는 취약점

  소스코드를 확인해보았더니 위에서 작성한 명령어들이 누적되어 저장되고 있었다. 그렇기 때문에 이전에 작성했던 경고창이 모두 나타나는 것이다.

 

[난이도-high]

Quest. 공격할 수 없습니다. 이유를 적어주세요.

Hint1. 특수 문자를 막는 함수가 있는 것 같습니다.
Hint2. xss_stored_1.php에서 확인할 수 있습니다.

  난이도 high는 low단계와 달리 태그들이 적용되어 출력되는 것이 아닌 문자열 그대로 출력되어 나오는 것을 확인할 수 있었다.

 

이 페이지에 소스코드를 통해 security_level이 2라는 점과 xss_stored_1.php파일을 이용한다는 점을 알 수 있었다.

그래서 해당 파일의 내용을 확인해보기로 하였다.

 

  먼저 security_level이 2이기 때문에 위 함수를 확인하여 문제점을 찾기로 하였다. 여기서는 sqli_check_3함수를 사용하였다. 하지만 이는 case 0, 1, 2 모두 사용되는 함수이기 때문에 이 함수로 인해 문제점이 나타나지는 않았을 것이라고 생각하였다.

 

그래서 다른 함수를 찾아보던 도중 아래와 같은 함수를 찾게되었다.

위 사진을 통해 security_level 2에서는 xss_check_3 함수를 이용하는 것을 확인할 수 있었다.

 

functions_external.php 파일에서 위 함수를 찾을 수 있었다. 

이 함수에서는 htmlspecialchars가 사용되기 때문에 공격이 불가하다.

Quest. GET방식과 POST방식의 차이에 대해 간단히 정리해봅시다.

GET방식 POST방식
: 서버에서 어떤 데이터를 가져와서 보여줄 때 사용
(글의 내용에 목록을 보여주거나 내용을 보는 경우)

- URL에 데이터를 포함시켜 요청한다. -> 보안에 취약

- 데이터를 헤더에 포함하여 전송한다.
- 캐싱할 수 있다.
: 서버상의 데이터 값이나 상태를 바꾸기 위해 사용
(글의 내용을 저장하고 수정하는 경우)

- URL에 데이터를 노출하지 않고 요청한다.

- 데이터를 바디에 포함하여 전송한다.
- 캐싱할 수 없다.

 

Quest. 다음 화면을 띄워보세요.

경고창을 누른 후 화면 (Welcome success 출력)

 

[난이도-low]
Hint1. GET방식에서 썼던 공격을 잘 생각해보세요.

 

Get 방식과 동일하게 입력해주었다.

 

<입력>

First name : <script>alert("XSS")</script>

Last name : success

 

 

그랬더니 위와 같은 결과가 나왔다.

 

burpsuite에서 firstname과 lastname에 각각 입력한 내용이 적혀있는 것을 확인할 수 있다.

 

 

 

Quest. 다음과 같이 사용자의 쿠키 값을 경고창에 출력해보세요.

 

[난이도-medium]
Hint1. 사용자의 쿠키 정보는 document.cookie에 저장되어 있습니다.
Hint2. alert함수에 사용자의 쿠키 정보를 알 수 있는 경로를 넣으면 될 것 같습니다.

  alert함수를 이용해 경고창에 쿠키 정보를 띄워야 하므로 alert함수 내 문자열에 document.cookie를 포함시켜야한다.

따라서 <script>alert(document.cookie)</script>를 입력하면 이에 해당하는 내용이 나타날 것이다.

 

<입력>

First name : <script>alert(document.cookie)</script>

Last name : success

 

 

이를 입력해주었더니 위와같은 결과가 나왔다.

 

burpsuite에서도 cookie값을 확인해볼 수 있다.

+ Recent posts