セキュリティについて勉強しよう †主な脅威 †XSS SQLインジェクション CSRF セッションに関する事 他にもあるけど、とりあえずここまで 脅威に対する対策 †XSS対策 htmlspecialchars() 関数を利用し特殊文字をエスケープします。 例)
以下、掲示板スクリプト内(conf.php)にてエスケープを記載 if(isset($_POST["name"])){$_SESSION["name"] = $_POST["name"];} error_check($_POST["name"],$_POST["title"],$_POST["body"]); $view_name = htmlspecialchars($_SESSION["name"],ENT_QUOTES); SQLインジェクション対策 ①エスケープ 例) 以下、掲示板スクリプト内(function.php)のログイン関数(login)にてエスケープを記載 ※$_POST["loginname"]と$_POST["password"]がユーザー入力値 function login($login) { if(isset($_POST["loginname"])){$loginname = $_POST["loginname"];} $loginname = mysql_real_escape_string($loginname); $loginpass = md5($loginpassword); $query3 = "SELECT * FROM user_data WHERE name = '$loginname' and user_pass = '$loginpass'"; $result3 = mysql_query($query3, $db); ・数値であれば ⇒intval() 関数を使いSQL文に挿入する値を数値化する。 例)以下、掲示板スクリプト内(function.php)のページング処理にて記載 $page = intval(@$_GET["page"]);
if($page < 1){$page = 1;}
②プリペアドステートメント(事前にSQL文を用意)
$dbh = "データベースへアクセスhogehoge"; CSRF対策 and セッション対策 ここわかりやすいです。 例)実際にやってみた。掲示板スクリプト内(conf.php)のユーザー入力確認画面から
(add.php)入力完了画面にかけてhiddenにて秘密の値(ワンタイムトークン)を送信⇒受信確認することで対策 ■conf.php
if(!isset($_SESSION['token'])|| $_SESSION['token'] != $_POST['token']){ echo "不正なアクセスです"; exit();} 課題 †各脅威について調べて、各脅威に対するPHPで実現できる対策をまとめる |