0
    <?php 


    $connector = @mysql_connect("localhost","root","usbw"); // open sql connection
mysql_select_db("dnhsdb",$connector);

    $i = @$_POST['uId']; 
    $d = @$_POST['pass']; 

        if (isset($_POST["btnLog"]))
    {
     $resultID = mysql_query("SELECT * FROM ACCOUNT", $connector);
    $row = mysql_fetch_row($resultID);
    if($i == $row['username'] && $d == $row['pass'])
{
echo "Welcome Userid " . $row['username'] . "!";
 header('Location: form18dnhs.php');
}
else
echo "Wrong Id/Password";

    }

エラーメッセージは次のとおりです。

Undefined index: username in C:\Users\Chad\Desktop\MAIN_php_project\USBWebserver v8_en\root\DNHS\login.php on line 21
Wrong Id/Password
4

2 に答える 2

2

コードには多くの問題があります。

  1. @演算子は使用しないでください。エラー、警告、通知などを抑制するために使用されます。エラー、警告、または通知が表示された場合は、決して無視してはなりません。代わりに、なぜそれらを取得しているのかを理解してから修正する必要があります。それらを抑圧することは、飛行機を作り、すべてのセキュリティ検査官を無視するようなものです. それは良いことではありません。

  2. このmysql拡張機能は推奨されていないため、使用しないでください。ドキュメントの警告を参照してください。代わりに、MySQLiまたはPDO拡張機能のいずれかを使用する必要があります。

  3. 配列にアクセスするときはいつでも、インデックス/キーが存在することを確認する必要があります。これはisset()関数を使用して行われます。これは、通常の配列と 、 などの配列に適用され$_POSTます$_GET。インデックスが設定されていることを確認しないと、エラーが発生します。

  4. $_POST別のインデックスが設定されているからといって、または$_GETインデックスが設定されていると想定しないでください。つまり、$_POST["btnLog"]が設定されているからといって、それも設定されているわけではありませ$_POST['uId']$_POST['pass']。これは、経験豊富な開発者にとっても非常に一般的なエラーですが (見落としがちです)、言い訳にはなりません。

  5. SQL データベースでは、テーブル内のすべてを選択することはまれです。などの句を使用WHEREして、検索を絞り込む必要がありますSELECT * FROM account WHERE id = $i AND pass = '$d'。SQL の仕組みを学ぶには、いくつかのSQL チュートリアルを読む必要があります。

  6. SQL をソートしたら、おそらくセキュリティについても少し学ぶ必要があります (つまり、入力のサニタイズと検証、および準備済み ステートメントの使用について)。「SQL セキュリティ」などで検索すると、多くの読み物が見つかるはずです。

  7. リダイレクトの前に何かをエコーするheader('Location: ...')ことは意味がありません。リダイレクト応答には本文が含まれる場合がありますが、無視されます。ブラウザは、本文を表示せずにブラウザを別のページにリダイレクトするだけです。

  8. 最後に、パスワードを比較する方法は、パスワードを平文 (平文) で保存しているように見えます。誰かがあなたのデータベースにアクセスすると、すべてのユーザーの資格情報にアクセスできます。多くの異なる Web サイトで同じパスワードを使用する傾向がある人もいます。これは、それらのアカウントも侵害されていることを意味します。これはかなり深刻です。パスワードの保護について読む必要があります。

幸運を。

于 2013-08-15T05:02:13.313 に答える