サイバーセキュリティについてもう少し詳しく知るために、以下のスクリプトを作成しました。これは意図的に安全ではありません。ログインスクリプトをバイパスするにはどうしたらいいですか?
session_start();
if($_SESSION['userSession']) {
header("location: home.php");
}
if($_POST) {
$username = $_POST['username'];
$password = $_POST['password'];
$con = mysqli_connect("localhost", "myUsername", "myPassword", "myDatabase");
if(!$con) {
die("Error: " . mysqli_connect_error());
}
$query = "SELECT * FROM users WHERE username = '$username' && password='$password'";
$result = mysqli_query($con, $query);
$numResults = mysqli_num_rows($result);
if($numResults == 1) {
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
$_SESSION['userSession'] = $row['id'];
header("location: home.php");
} else {
echo "Error Logging In";
}
mysqli_close($con);
}
ご覧のとおり、私はユーザー入力をエスケープしておらず、パスワードはハッシュされていません。 したがって、私はこれが簡単にハック可能なログインであると推測しています。しかし、私は以下の入力をユーザー名とパスワードの両方のフィールドで使用しようとしましたが、常に "Error Logging In"という出力を得ています。
password' OR '1' = '1'";
ログインスクリプトをバイパス/ハックする方法を教えてください。
SQLインジェクションのリンクを確認してください:http://www.w3schools.com/sql/sql_injection.asp –
最後の '' 'を取り除いて、パスワードがそうであるようにしてください:' foo 'または' 1 '=' 1 ' – miken32