2

これが間違った方法であることはわかっています。ソルトやその他の小さな安全なヒントを実装していませんが、ここで何が問題なのかを理解する必要があります。スクリプトに他の安全な関数を実装できます。助けてくれてありがとう:)これ、スクリプトはログインエラーを返します。理由は理解できます。パスワード $_POST['password'] を出力します。データベースでも同じですが、$col2 (データベースから取得したパスワード) を出力しようとすると、何も返されません。コードは次のとおりです。

<?php

$mysqli = new mysqli("localhost", "root", "*******", "test");
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}
/* prepare statement */
if ($stmt = $mysqli->prepare("SELECT username, password FROM users WHERE username=? AND password=?")) {
    $stmt->bind_param("ss" , $username, $password);
    $stmt->execute();
    /* bind variables to prepared statement */
    $stmt->bind_result($col1, $col2);
    $stmt->store_result();
    /* fetch values */
    while ($stmt->fetch()) {
        printf("%s %s\n", $col1, $col2);
    }

    if($col1 && $col2 == $username && $password){
    $_SESSION['Admin']; //test - not to be implemented
    session_start(); //Test - not to be implemented
    header("location index2.php");
    }else{echo "Login Error";} 
    /* close statement */
    $stmt->close();
}
/* close connection */
$mysqli->close();
?>
4

4 に答える 4

0

if($col1 && $col2 == $username && $password)それは何ですか?:)

PHP では、 andがゼロ以外の値を持ち、かつandも0 以外の値$col1を持っていれば問題ないことを意味します。$col2$username$password

次のようなものを作成する必要があります

if($col1 == $username && $col2 == $password)

md5 ハッシュを db に保持する場合

if($col1 == $username && $col2 == md5($password))

または、md5機能も備えたmysqlで実行します。

printf("%s %s\n", $col1, $col2);セッションを開始すると、 が発生することに気付きましたheaders already sent

$_SESSION['Admin'];これにより、この変数が未定義であるため、通知も発生します

もう 1 つの問題は、header() 関数にあります。この関数の前に何も印刷することはできません。これにより、「ヘッダーが既に送信されました」も発生します。

于 2013-10-31T13:26:26.797 に答える