PHP

php 보안 - XSS(htmlspecialchars), 파일 경로 보호(basename)

식혜야 2023. 12. 20. 19:13

XSS

lib/print.php

XSS 공격을 막기 위해 사용자의 입력이 들어오는 부분에 htmlspecialchars() 함수를 적용한다.

<?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;
  }
}
?>

 

 

파일 경로 보호

basename() 함수를 사용하여 경로를 제외한 파일명만을 추출함으로써 보안을 강화한다.

<?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;
  }
}
?>

 

 

 

References

https://opentutorials.org/module/3266/19390

 

PHP의 보안 - WEB2 - PHP

수업소개 웹애플리케이션에게 일어날 수 있는 나쁜 일들을 알아보고, 이런 문제를 해결하는 사례를 알아봅니다.  Cross site scripting (XSS) XSS.php XSS Cross site scripting <!--?php echo htmlspecialchars(' alert("babo

opentutorials.org