WEB2 - PHP

PHP의 보안

수업소개

웹애플리케이션에게 일어날 수 있는 나쁜 일들을 알아보고, 이런 문제를 해결하는 사례를 알아봅니다. 

 

Cross site scripting (XSS)

 

XSS.php

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>XSS</title>
  </head>
  <body>
    <h1>Cross site scripting</h1>
    <?php
    echo htmlspecialchars('<script>alert("babo");</script>');
    ?>
  </body>
</html>

 

변경사항

lib/print.php

<?php
function print_title(){
  if(isset($_GET['id'])){
    echo htmlspecialchars($_GET['id']);
  } else {
    echo "Welcome";
  }
}
function print_description(){
  if(isset($_GET['id'])){
    echo htmlspecialchars(file_get_contents("data/".$_GET['id']));
  } else {
    echo "Hello, PHP";
  }
}
function print_list(){
  $list = scandir('./data');
  $i = 0;
  while($i < count($list)){
    $title = htmlspecialchars($list[$i]);
    if($list[$i] != '.') {
      if($list[$i] != '..') {
        echo "<li><a href=\"index.php?id=$title\">$title</a></li>\n";
      }
    }
    $i = $i + 1;
  }
}
?>

 

 

파일 경로 보호

 

변경사항


<?php
function print_title(){
  if(isset($_GET['id'])){
    echo htmlspecialchars($_GET['id']);
  } else {
    echo "Welcome";
  }
}
function print_description(){
  if(isset($_GET['id'])){
    $basename = basename($_GET['id']);
    echo htmlspecialchars(file_get_contents("data/".$basename));
  } else {
    echo "Hello, PHP";
  }
}
function print_list(){
  $list = scandir('./data');
  $i = 0;
  while($i < count($list)){
    $title = htmlspecialchars($list[$i]);
    if($list[$i] != '.') {
      if($list[$i] != '..') {
        echo "<li><a href=\"index.php?id=$title\">$title</a></li>\n";
      }
    }
    $i = $i + 1;
  }
}
?>

 

댓글

댓글 본문
작성자
비밀번호
  1. kissandlove
    print_list() 내에 있는 $list는 scandir함수에서 리스트를 개발자가 가져온 것이지 사용자가 입력한 것이 아닌것 같은데 xss 표적이 될수 있나요?
  2. 유진희
    보안부분이 확실히 어렵네요 그래도 설명 정말 감사합니다 ^^
  3. attack.html 파일만들어서 아래와 같이 만든뒤
    <form action="http://상대방주소아이피/delete_process.php" method="post">
    <input type="text" name="id" placeholder="뭘지울래" />
    <input type="submit" value="삭제" />
    </form>
    삭제하니 지워지네요 정말 재밌어요 이거 테스트한다고 잘안되서 40분 날렸지만... ㅎㅎ
  4. 제갈량
    자바스크립트가 좋은 용도로 쓴다면 괜찮은 언어이지만,
    이 언어를 악용하면 않좋게도 쓰일 수가 있겠네요.
    예를 들어, 요즘 문제가 되고 있는 가짜 사이트로 오게 유도하는것도 가능하겠네요.
    그리고 보안이란게 첨예한 문제이기 때문에
    이런것까지 알아두면 유용하게 써먹을 수도 있겠다는 생각을 하게 됩니다.
    잘 봤습니다. 감사합니다. ^^
  5. Mingi Son
    감사합니다
버전 관리
egoing
현재 버전
선택 버전
graphittie 자세히 보기