攻撃方法を知っておかないとセキュリティは保てないということで、自分でシステムを作り自分で攻撃してみます。
悪用は厳禁です。攻撃方法は各自学習してみてください。12月7日記事
目次
DDL
CREATE TABLE Vul_account( id INT NOT NULL AUTO_INCREMENT, email VARCHAR(255) NOT NULL, passwd VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id), INDEX multi(email,passwd) )
DML
INSERT INTO Vul_account(email,passwd,name) VALUES('[email protected]','password','taro');
INSERT INTO Vul_account(email,passwd,name) VALUES('[email protected]','password','hanako');
INSERT INTO Vul_account(email,passwd,name) VALUES('[email protected]','password','jiro');
INSERT INTO Vul_account(email,passwd,name) VALUES('[email protected]','password','saburo');
今では
非推奨
となっており、PDOを使う方法が推奨されています。
ログインフォームを作り、IDとPASSWORDが一致していれば、ログインする仕組みを作る。
index.php
<?php
require ('config.php');
$link = mysql_connect($db_host, $db_user, $db_password);
mysql_select_db($db_name) or die(mysql_error());
$result = mysql_query('set character set utf8') or die(mysql_error());
$message = NULL;
if (isset($_POST['submit'])) {
$sql = "SELECT * FROM Vul_account WHERE email = '" . $_POST['id'] . "' AND passwd = '" . $_POST['pass'] . "'"; //パスワード認証のクエリ
print $sql; //どんなクエリが投げられているかを見るために残しておきます。
$result = mysql_query($sql); //クエリ投げる
$user = mysql_fetch_array($result); //認証できた場合受け取る
//print_r($user);
if ($user == NULL) {
$message = 'IDまたはパスワードが違います。';
} else {
session_set_cookie_params(60 * 1); //1分間のlifetime
session_start();
$_SESSION["name"] = $user["name"];
header("Location: home.php"); //ホーム画面へリダイレクト
}
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="../reset.css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>SQLインジェクションしてみる</title>
</head>
<body>
<form action="index.php" method="post">
<ul>
<li>email<input type="text" name="id"></li>
<li>PASSWORD<input type="password" name="pass"></li>
<li><input type="submit" name="submit" value="ログイン"></li>
</ul>
</form>
<?php echo $message; ?>
</body>
</html>
home.php
<?php session_start(); ?> <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <link rel="stylesheet" type="text/css" href="../reset.css"> <link rel="stylesheet" type="text/css" href="style.css"> <title>ホーム画面</title> </head> <body> <p><?php echo $_SESSION["name"] ?>さんこんにちは。</p> </body> </html>
メールアドレスやpasswordというパスワードを知らなくてもログインすることができます。各自調べてみてください。