5

誰か助けてくれませんか?私のユーザー名は Blimeo で、パスワードは「password」ですが、資格情報を入力すると、「アクセスが拒否されました」と表示されます。mySQL データベースを正しく構成したことは 100% 確信しています。

<html>
<body>
<?php
echo sha1('Blimeo');
if (isset($_REQUEST['attempt'])) {

    $link = mysql_connect('localhost', 'root', 'password') or die('Could not connect to database');
    $user = mysql_real_escape_string($_POST['user']);
    $password = sha1(mysql_real_escape_string($_POST['password']));
    mysql_select_db('test_users');
    $query = mysql_query(
        "SELECT user 
        FROM users 
        WHERE user = '$user' 
        AND password = '$password'
        ") or die(mysql_error());
    mysql_fetch_array($query);
    $total = mysql_num_rows($query);
    if ($total > 0) {
        session_start();
        $_SESSION['user'] = 'blah';
        header('location: dashboard.php');
    }
    else {
        echo '<br>Access denied!';

    }
}


?>
<form method="post" action="login.php?attempt">
    Enter your username:<input type="text" name="user"/><br/>
    Enter your password:<input type="password" name="password"/><br/>
    <input type="submit"/>
</form>
</body>
</html>
4

4 に答える 4

15

更新、2016

ほぼすべてのPHPフレームワークですぐに使用できる既存のログインシステムのみを使用してください。ユーザー認証は大きなトピックであり、本格的で安定した最新のログインソリューションを作成するには数か月(数年)かかるため、これを自分で作成する理由はまったくありません。

元のテキスト、2012年から:

ログインシステムはセキュリティの問題であり、誰もが同じ間違いを何度も繰り返すので、私ははっきりと言うことができます:

プロのスクリプトを使用してコードを処理し、何が起こっているのか、ハッシュとソルトとは何か、セッションで発生する可能性のある問題を理解します。

[古いリンクを削除]

これがあなたが必要とするかもしれない3つのプロジェクトです:

https://github.com/panique/php-login-one-file

https://github.com/panique/php-login-minimal

https://github.com/panique/huge

于 2012-07-03T17:44:50.080 に答える
0

まず、ページの最初の行でセッションを開始する必要があります。

mysql 関数の代わりに PDO ステートメントを使用するようにコードを更新する必要があります。これらは遅く、mysqli になりやすいです。

次に、返された num 行が 1 に等しく、0 より大きくないかどうかを確認する必要があります。これは、スクリプトを操作して複数の行を返すことができるため、セキュリティ上の問題になります。範囲。

問題は、パスワードがデータベースと一致しないことです。パスワードの sha1 をエコーし​​、表と一致するかどうかを確認します。

于 2012-07-03T15:41:50.650 に答える
0

スクリプトが壊れているのは、mysql_num_rows() をテストしているときのようです。

直前:

if ($total > 0)
{

次の行を追加してテストし、$total が実際に > 0 であることを確認してください。

echo $total;

それ以外は、mysql クエリをテストして、DB から少なくとも 1 行が返されることを確認してください。

于 2012-07-03T15:43:18.943 に答える
-1
make database in mysql then run this code::

<table border="0" align="center" cellpadding="0" cellspacing="0" width="300">
<tr>
    <td>
        <form method="post" action="flogin.php">
            <table width="100%" cellpadding="7" cellspacing="0" border="0">
                <tr>
                    <td colspan="3"><center><strong>Insert Values In DataBase </strong></center><br /></td><br />
                </tr>
                <tr>
                <td width="30%">Name</td>
                <td width="10%">:</td>
                <td width="60%"><input type="text" name="name" /></td>
                </tr>
                <tr>
                <td width="30%">Last Name</td>
                <td width="10%">:</td>
                <td width="60%"><input type="text" name="lastname" /></td>
                </tr>
                <tr>
                <td width="30%">Email</td>
                <td width="10%">:</td>
                <td width="60%"><input type="text" name="email" /></td>
                </tr>
                <tr>
                <td colspan="3"><center><input type="submit" name="submit" /></center><br /></td>
                </tr>
            </table>
        </form>
    </td>
</tr>
</table>









<?php
mysql_connect("localhost", "root", "") or die("can not connect to database");
mysql_select_db("flogin")or die("can not connect");

if (isset($_POST['submit'])){
    $name=$_POST['name'];
    $lastname=$_POST['lastname'];
    $email=$_POST['email'];

    $query=mysql_query("INSERT INTO info(name, lastname, email)VALUES('$name', '$lastname', '$email')");
    if($query){
        echo "successful";
        echo "<br>";
        echo "<a href='insert.php'>Back to main page</a>";
    }
    else {
        echo "error";
    }

    }
?>
<?php
mysql_close();
?>
于 2013-04-25T09:24:41.550 に答える