第 1 章の概要
1> 原則
多層防御
最小限の権限
シンプルであることは美しい
露出の最小化
2> 方法
リスクと可用性のバランス追跡データ
フィルタ入力
出力エスケープ
//****フォーム送信詐欺を防ぐ
session_start();
$_SESSION['token'] = md5(uniqid(mt_rand(), true));
//*****フィルタリングされたデータ配列を保存するために 1 つを初期化します。
$clean = array();
if(ctype_alpha($_POST['name'])){
$clean['name'] = $_POST['name'];
}else{
//エラー
}
//****クロスサイトスクリプティングを避ける
/*True 文字エンコーディングを使用してください*/
header('Content-Type: text/heml; charset=UTF-8');
/*エスケープされたデータを保存するために配列を初期化*/
$html = array();
$html['username'] = htmlentities($clean['username'], ENT_QUOTES,'UTF-8');
//****SQL インジェクションを避ける
/*PDO のようなデータベースを使用して、データベースの適切なエスケープを実行します*/
$ db = new PDO('mysql:host=localhost;dbname=users',$_SERVER['DB_USER'],$_SERVER['DB_PASSWORD']);
$statement = $db->prepare("INSERT INTO user ( ユーザー名, パスワード) VALUES (:username, :password)");
$statement->bindParam(':username',$clean['username']);
$statement->bindParam(':password', $clean[ 'パスワード']);
$statement->execute();
$db = NULL;
$okay = 0; $username = $_POST['user']; $pw = $_POST['pw']; $sql = " username='".mysql_real_escape_string($username ) のユーザーから ctr として count(*) を選択します。"' およびpassword='".mysql_real_escape_string($pw)."'制限1"; $result = mysql_query($sql); while ($data = mysql_fetch_object($result)){ if ($data- >ctr == 1){ //アプリケーションに入っても大丈夫です! $okay = 1; } } if ($okay){ $_SESSION['loginokay'] = true; header("index.php"); }else{ header("login.php"); } ?> |
//****パスワードをサイトの外部に配置しますファイル
mysql_connect('localhost' , $_SERVER['DB_USER'], $_SERVER['DB_PASSWORD']);