私は非常に単純なPHPログインスクリプトで非常に厄介な問題を抱えています。問題は、ログインが間違ったユーザー名やパスワードでも機能することです。私はLinux用のXAMPP 7.0.8で動作させています。ところで、データベース「ログイン」のテーブル「ユーザー」には1行しかありません。PHPログインが間違ったユーザ名とパスワードで動作する
私はこの種のスクリプトがどのように動作するかを理解しようとしていましたので、最も基本的なログイン方法を試しました。しかし、それは私には謎であり続けていますが、今はそれを実現させることはできませんでした。ここで
は、PHPの一部です:
<?php
session_start();
if(isset($_POST['login'])) {
$db = mysqli_connect("localhost", "root", "", "login");
$username = strip_tags($_POST['username']);
$password = strip_tags($_POST['password']);
$username = stripcslashes($username);
$password = stripcslashes($password);
$username = mysqli_real_escape_string($username);
$password = mysqli_real_escape_string($password);
$sql = "SELECT * FROM users WHERE username = '$username' LIMIT 1";
$query = mysqli_query($db, $sql);
$row = mysqli_fetch_array($query);
$id = $row['id'];
$db_password = $row['password'];
if($password == $db_password){
$_SESSION['username'] = $username;
$_SESSION['id'] = $id;
header("Location: index.php");
} else {
echo "Error: the information is not correct.";
}
}
?>
そして、ここでHTMLフォーム:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Client's area</title>
</head>
<body>
<form method="post" action="">
<input type="text" name="username">
<input type="password" name="password">
<input class="login" type="submit" name="login" value="Login">
</form>
</body>
</html>
編集:この記事のアイデアは、セキュアなログインスクリプトをしようとしていませんでした、それはいくつかのPHP機能を理解することを目的としていました。実際のログインプロジェクトにこのコードの一部を使用することは安全ではないことを認識しています。
に役立つ単純なクエリ
希望を使う店プレーンテキストPASSWをいけないしてくださいあなたのデータベースのord。パスワードハッシングを使用します。 PHPは['password_hash()'](http://php.net/manual/en/function.password-hash.php) と['password_verify()'](http://php.net/manual/ en/function.password-verify.php)それらを使用してください。 ここにいくつかの[パスワードに関する良いアイデア]があります(https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet) 5.5より前のバージョンのPHPを使用している場合は、[互換パックがあります](https ://github.com/ircmaxell/password_compat) – RiggsFolly
あなたのスクリプトは[SQL Injection Attack]の危険にさらされています(http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in- php) [Little Bobby Tables](http://bobby-tables.com/)に何が起こったかを見てください。 [入力を逃れているなら、その安全ではありません!](http://stackoverflow.com/質問/ 5741187/sql-injection-that-gets-around-mysql-real-escape-string) [prepared parameterized statements](http://php.net/manual/en/mysqli.quickstart.prepared-statements)を使用してください。 php) – RiggsFolly
これは本当に悪いログインシステムです。パスワードをplとして保存していますPDOと 'password_hash'を使用する別のチュートリアルを見つけてくださいhttp://php.net/manual/en/function.password-hash.php – cmorrissey