忍者ブログ

からすまる日誌 mySQL

授業ノートのまとめ

応用(3) チケットの発行

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

応用(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>

PR

コメント

ただいまコメントを受けつけておりません。

プロフィール

HN:
karasumaru
性別:
非公開

P R