수업소개
웹애플리케이션에게 일어날 수 있는 나쁜 일들을 알아보고, 이런 문제를 해결하는 사례를 알아봅니다.
Cross site scripting (XSS)
XSS.php
1 2 3 4 5 6 7 8 9 10 11 12 13 | <!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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <?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; } } ?> |
파일 경로 보호
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <?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; } } ?> |