0

現在、php mysql ログインの問題にかなり混乱しています。これが私のコードです。

私は初心者で、現在phpでmysql関数を使用する方法しか知らないので、今のところmysqliとPDOを使用するように勧めないでください。後で修正します。コードを見て、認証コードの何が問題なのか教えてください。

login.php

<?php
session_start();
if($_SERVER["REQUEST_METHOD"] == "POST") {
    $username=addslashes($_POST['username']);
    $password=addslashes($_POST['password']);

    //connect to database
    $con=mysql_connect("localhost","","") or die();
    $db=mysql_select_db("dashboard") or die();

    //execute query
    $query ="SELECT username, password from `login` where username=$username";
    $result=mysql_query($query);

    if($username=='username' && $password=='password') {
        $_SESSION['username']=$username;
        header("Location:dashboard.php");
    } else {
        echo "You got credentials wrong";
    }
}
?>

<form method="post" action="<?php htmlspecialchars("PHP_SELF"); ?>">

<label>Username :</label><input type="text" name="username"></br>
<label>Password:</label><input type="password" name="password"></br>
<br/>
<input type="submit" value="submit"></br>
</form>

ダッシュボード.php

<?php
session_start();
echo "Welcome ". $_SESSION['username'];
?>
<a href="logout.php">Logout</a>

logout.php

<?php
session_destroy();
header("Location:login.php");
?>

ページのエラー:

注意: 未定義のインデックス: 23 行目の /home/lampstack/apache2/htdocs/dashboard/login.php のパスワード

23行目コード

if($username=='username' && $password=='password')
4

1 に答える 1

0

クエリの最初の段階で

$query ="SELECT username, password from `login` where username=$username";

これは整数フィールドではないと想定しているため、ユーザー名変数を引用符で囲む必要があります

$query ="SELECT username, password from `login` where username='$username'";

次に、ifステートメントにエラーがあり、クエリから結果をフェッチしなかったため、フェッチされた行またはmysql_num_row0より大きいかどうかを確認する必要があります

$result=mysql_query($query);

if($row = mysql_fecth_array($result))
{
    $_SESSION['username']=$username;
    header("Location:dashboard.php")
}

あなたのコードはmysqlインジェクションに対して非常に脆弱であることを指摘します

于 2013-05-27T18:06:42.267 に答える