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

