수업소개
웹애플리케이션에게 일어날 수 있는 나쁜 일들을 알아보고, 이런 문제를 해결하는 사례를 알아봅니다.
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; } } ?>