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. 웅이
    고맙습니다 !
    대화보기
    • 돌입
      웅이//
      프로그램은 순서대로 흘러가죠?
      while문 밖에 위치하게 된다면 $title에 대입은 한번 밖에 동작하지 않기 때문에
      $title에 대입된 값에 변경이 없게됩니당
      대화보기
      • Gihoon Pomme Ryu
        완료. 고맙습니다.
      • 웅이
        print.php 에서
        왜 $title = htmlspecialchars($list[$i]); 가 while문 안에 들어가야 하나요?
        $list = scandir('./data');
        $i = 0;
        처럼 왜 while문 밖은 안되고, 안에 있어야하는지 아는사람 누굽니꽈~~~~~~~~
      • 로버트한
        보안은 참 어려운 거군요 ㅠ,ㅠ
      • 로버트한
        감사합니다.^^
      • kissandlove
        print_list() 내에 있는 $list는 scandir함수에서 리스트를 개발자가 가져온 것이지 사용자가 입력한 것이 아닌것 같은데 xss 표적이 될수 있나요?
      • 유진희
        보안부분이 확실히 어렵네요 그래도 설명 정말 감사합니다 ^^
      • attack.html 파일만들어서 아래와 같이 만든뒤
        <form action="http://상대방주소아이피/delete_process.php" method="post">
        <input type="text" name="id" placeholder="뭘지울래" />
        <input type="submit" value="삭제" />
        </form>
        삭제하니 지워지네요 정말 재밌어요 이거 테스트한다고 잘안되서 40분 날렸지만... ㅎㅎ
      • 제갈량
        자바스크립트가 좋은 용도로 쓴다면 괜찮은 언어이지만,
        이 언어를 악용하면 않좋게도 쓰일 수가 있겠네요.
        예를 들어, 요즘 문제가 되고 있는 가짜 사이트로 오게 유도하는것도 가능하겠네요.
        그리고 보안이란게 첨예한 문제이기 때문에
        이런것까지 알아두면 유용하게 써먹을 수도 있겠다는 생각을 하게 됩니다.
        잘 봤습니다. 감사합니다. ^^
      • Mingi Son
        감사합니다
      버전 관리
      egoing
      현재 버전
      선택 버전
      graphittie 자세히 보기