[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
コマンドプロンプトでいれる
スペースで切り離したホスト名(www.yahoo.co.jp)とかを指定
Microsoft Windows [Version 10.0.18362.592]
(c) 2019 Microsoft Corporation. All rights reserved.
C:\Users\web.DESKTOP-EQR2U6K>ping yahoo.co.jp
yahoo.co.jp [183.79.135.206]に ping を送信しています 32 バイトのデータ:
192.168.11.1 からの応答: 宛先ホストに到達できません。
192.168.11.1 からの応答: 宛先ホストに到達できません。
192.168.11.1 からの応答: 宛先ホストに到達できません。
192.168.11.1 からの応答: 宛先ホストに到達できません。
183.79.135.206 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
C:\Users\web.DESKTOP-EQR2U6K>
ip ver6が提供するサービスだけが開けてver.4がだめという謎の現象が起こっているらしい
SQLインジェクション
わざとmd5で安全性の低いデータを作ってみますよ
<p><?php echo md5("nobinobi") ?></p>
<!--わざとセキュリティの低いのを出力し、コピー
d0209b61369398a6d2469738c16ffdbf
→
DB→挿入→
INSERT INTO `users` (`u_id`, `pass`, `nickname`) VALUES ('nobita',
'd0209b61369398a6d2469738c16ffdbf', 'のび太');
→サクラ、index.php
を
index2.phpで別名保存
いまindex2.phpはパスワードハッシュしてるので、
<!DOCTYPE html>より上を全部削除
このページは窓口だけにし、認証は別の画面にしましょう
<form method="post" action="auth.php">
と変更
認証ボタンの次の行とかもカット
このページのphpを全部取る形
・u_idとpassが飛んでくるのでそれを処理したい
新規でauth.php
かならずu_idとpassが来ている前提で記述するよ。テストなんで。
脆弱なものをわざとつくるよ
こういう構造
ここまで
--->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
//いつもの
$user="root";
$dbpass="";
$host="localhost";
$dbname="auth";
$dsn="mysql:host={$host};dbname={$dbname};charset=utf8";
$pdo=new PDO($dsn, $user, $dbpass);
//つくりたいsqlは以下の通り
//SELECT nickname FROM users WHERE u_id='nobita' AND pass='hoehoehoe'";
$sql="SELECT nickname FORM users WHERE u_id='" . $_POST["u_id"] . "'
AND pass='" . $_POST["pass"] . "'";
echo $sql;
?>
たいへんややこしい""の開け閉じ。黄色の部分がかたまりでドットでつないでいる。
--->出力
SELECT nickname FORM users WHERE u_id='nobita' AND pass='aaa';
しかしさきDBに登録したのは脆弱とはいえmd5でハッシュしてるからこのままだと機能ないね
こう書き換えますよ
$pdo=new PDO($dsn, $user, $dbpass);
$pass = md5($_POST["pass"]); //わざとです。脆弱なハッシュ
//つくりたいsqlは以下の通り
//SELECT nickname FROM users WHERE u_id='nobita' AND pass='hoehoehoe'";
$sql="SELECT nickname FORM users WHERE u_id='" . $_POST["u_id"] . "'
AND pass='" . $pass . "'";
echo $sql;
実行結果
SELECT nickname FORM users WHERE u_id='nobita' AND
pass='47bce5c74f589f4867dbd57e9ca9f808'
ちょっと前まではみんなこーゆー危険な書き方をしていたらしい
ぷりぺあーどならぷりぺあーどをつかうが
直にsqlを実行するときはくえりーめそっどをつかうよ
$res=$pdo->query($sql);