0

私は電子メールとパスワードでデータベースを設定しています。以下のコードを使用して、ユーザー名(電子メール)とパスワードをチェックし、それらが正しいことを確認し、正しくない場合は/cmsに送信するかどうかを確認しようとしています。一致すると、ポップアップボックスが表示されます。ポップアップが表示されるだけです。それを引き起こしている問題を見つけることができますか?

session_start();

require_once("../mydbpassword.php");
if($_POST['username']) {

$username = $_POST['username'];
$password = $_POST['password'];

$sql = "SELECT * FROM agents WHERE email = '$username' AND pword = '$password'";
$result = mysqli_query($mysqli,$sql);

$email = $row['email'];
$pword = $row['pword'];

if(($username != $email) || ($password != $pword)) {
echo'<script type="text/javascript">
    window.alert("Your login information is wrong, try again!");
    window.location="/cms/login"
    </script>';
}
else {
$row = mysqli_fetch_assoc($result);
$_SESSION['admin'] = $row['$email'];
header("Location: /cmsS");
exit();

}
  }
4

2 に答える 2

0

スイッチ

$result = mysqli_query($mysqli,$sql);

$result = mysqli_fetch_assoc(mysqli_query($mysqli,$sql));

さらに、修正する必要があるものがたくさんあります。パスワードのハッシュ化、安全なクエリ、より優れたリダイレクト/エラー システム (js は無効化されるか、簡単にハッキング/変更される可能性があります) のように。

于 2012-06-30T23:57:19.590 に答える
0

変数は設定できますが、空です。

if($_POST['username'])

if (!empty($_POST['username']))

MySQL インジェクションを防ぎ、パスワードのみをフェッチします。

$sql = "SELECT * FROM agents WHERE email = '$username' AND pword = '$password'";

$sql = 'SELECT password FROM agents WHERE email = "'.mysql_real_escape_string($username).'"';

適切な MySQL 文字列の関連付け

$result = mysqli_query($mysqli,$sql);

$result = mysqli_fetch_assoc(mysqli_query($mysqli,$sql));

そして、実際に意味のある小切手

if ($password != $pword || empty($pword)) {
    echo'<script type="text/javascript">
    window.alert("Your login information is wrong, try again!");
    window.location="/cms/login"
    </script>';
}
于 2012-07-01T00:05:52.963 に答える