授業ノートのまとめ
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ブルートアタックに対抗する:
ページを開くたびにランダムな数を生成しチケットを確認する。
input type="hidden"でもたせる。
ブラウザを通してこのページに来た人は、ランダムの値のチケットをゲット
→OK
外部からのアタックはチケットを取れない
またエラーを出した
とりあえずここまで
--->index.php
<?php
session_start();
$msg="";
//初めて開く場合と認証しようと思って開く場合と2種
if(!empty($_POST["u_id"]) && !empty($_POST["pass"])){
if(!empty($_POST["ticket"]) && $_POST["ticket"]==$_SESSION["ticket"]){
//認証開始
$user="root";
$dbpass="";
$host="localhost";
$dbname="auth";
$dsn="mysql:host={$host};dbname={$dbname};charset=utf8";
$pdo=new PDO($dsn, $user, $dbpass);
$sql = "SELECT * FROM users WHERE u_id=:u_id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(":u_id",$_POST["u_id"],PDO::PARAM_STR);
//$stmt->bindValue(":pass",$_POST["pass"],PDO::PARAM_STR);
$stmt->execute();
$row=$stmt->fetch(PDO::FETCH_ASSOC);
if(password_verify($_POST["pass"],$row["pass"])){
//ログイン成功
//$name=$row["nickname"];
$_SESSION["login"]=true;
$_SESSION["name"]=$row["nickname"];
header("Location: mypage.php");
exit();
}else{
//ログイン失敗
$msg="ログインできませんよ";
$_SESSION["login"]=false;
}
}
}
$ran=rand(100,999);
$salt="tekitounamoji";
$ticket=md5($salt . $ran);
$_SESSION["ticket"] = $ticket;
//print_r($_SESSION["ticket"]);
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ログイン認証</title>
<link rel="stylesheet" href="auth.css">
</head>
<body>
<div id="container">
<form method="post" action="">
<table>
<tr>
<th><label for="u_id">ユーザー名</th>
<td><input type="text" name="u_id" id="u_id"></td>
</tr>
<tr>
<th><label for="pass">パスワード</label></th>
<td><input type="password" name="pass" id="pass"></td>
</tr>
</table>
<p><button type="submit">認証</button></p>
<input type="hidden" name="ticket" value="<?php echo $ticket; ?>">
</form>
<p><?php echo $msg; ?></p>
</div>
</body>
</html>
--->mypage.php
<?php
session_start();
if(empty($_SESSION["login"])){
header("Location:index.php");
exit();
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>マイページ</title>
<link rel="stylesheet" href="auth.css">
</head>
<body>
<div id="container">
<h1 class="hoge"><p>ようこそ<?php echo $_SESSION["name"]; ?>さん!</p></h1>
<p>会員じゃないとみられないクエの絵</p>
<p>あぶらぼうず</p>
<p>たこ</p>
</div>
</body>
</html>
ここのechoが抜けていたので何を押しても知らんふり(エラー)になっていた。
echoを忘れるとhiddenで付けられるvalueに値が入らない。
ここで「発行」しているので。
<p><button type="submit">認証</button></p>
<input type="hidden" name="ticket" value="<?php echo $ticket; ?>">
</form>
ただいまコメントを受けつけておりません。