授業ノートのまとめ
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
またエラーが出た。
呼び出すメンバーがないというらしい。
・接続ができないとでるらしい
・またはsql文がおかしい
$pdoを作るるまでのあたりが間違っていると出るらしい。
SQLは正しいがデータがないときは、こういうエラーではないらしい。
→
FROMがFORMになっていた
名前:nobita
パス:nobinobi
でログインしてみましょう
できた。(脆弱なシステムが)
ではこれからクラッキングをしてみましょう
・$sql文をつくるときにそのまま使っているのが超まずい
・md5なのもまずいが
ここまで
--->index2.php
<!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="auth.php">
<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>
</form>
</div>
</body>
</html>
--->auth.php
<?php
session_start();
//いつもの
$user="root";
$dbpass="";
$host="localhost";
$dbname="auth";
$dsn="mysql:host={$host};dbname={$dbname};charset=utf8";
$pdo=new PDO($dsn, $user, $dbpass);
$pass = md5($_POST["pass"]);
$sql="SELECT nickname FROM users WHERE u_id='" . $_POST["u_id"] . "'
AND pass='" . $pass . "'";
//echo $sql;
//print_r($_POST);
$res= $pdo->query($sql);
$row= $res->fetch(PDO::FETCH_ASSOC);
//echo $row["nickname"];
//認証するかどうか
if($row["nickname"]){ //nicknameが存在すれば
//認証
$_SESSION["login"]=true;
$_SESSION["name"]=$row["nickname"];
header("Location: mypage.php");
}else{
//認証不可
header("Location: index2.php");
}
?>
さて、
SELECT nickname FROM users WHERE u_id="nobita" OR '1'='1' AND pass="usono_pass";
1=1はすべて真だから「条件に該当」とみなされる
これをDBのSQLタブで打ち込むとちゃんとデータが出てきてしまう
Fatal error: Uncaught Error: Call to a member function fetch() on bool
in C:\xampp\htdocs\php\makino\auth\auth.php:19 Stack trace: #0 {main}
thrown in C:\xampp\htdocs\php\makino\auth\auth.php on line 19
入力しているものがまずかったようですね
ユーザー名 nobita' OR '1'='1
パスワード てきとう
→
ログインできてしまう
ただいまコメントを受けつけておりません。