0

www.msheeksproductions.comのログインフォームでユーザーが送信ボタンを押したときに実行される次のログインスクリプトがあります。セキュリティ上の理由から、DBログイン情報を削除しました。

    <?php
error_reporting(E_ALL);
        $user = '***************';
        $pass = '***************';
        $host = '***************';
        $data = '***************';
$userN=$_POST['userN'];
$passW=$_POST['passW'];

mysql_connect($host, $user, $pass)or die("Could not connect");
mysql_select_db($data)or die("Database Not Found");

$query="SELECT userID FROM sec_login WHERE Username='$userN' AND Password='passW'";
$result=mysql_query($query) or die(mysql_error());

$user=mysql_num_rows($result);
if($user==1) {
    session_register("userN");
    header("location: ../index.php");
}
else {
echo("You have entered invalid login information.");
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
</body>
</html>

私の問題は、security.phpページにアクセスしても、何も起こらないということです。PHPスクリプトがまったく実行されていないようです。どこかに構文エラーがあるのか​​、それともホスティングアカウントの構成の問題なのかわかりません。サーバーはPHP5.2を使用しています。これらの種類のものについてBluehostに既知の問題があるかどうか誰かが知っていますか?コーディングエラーがある場合は、明らかに私も知りたいです。私はこれに慣れていないので、すべてを正しく行っていない可能性があります。

また、index.phpファイルで変数を再度呼び出そうとしていますが、データが返されないようです。

<?php $usr=$_SESSION['username']; 
echo "User Name Is: $usr"; ?>

前もって感謝します!

4

2 に答える 2

2

次の点を考慮してください。

  • SQL インジェクションに注意してください (mysql_real_escape_string によって停止されます);
  • セッション固定/ハイジャックに注意してください。
  • 総当たり攻撃に注意してください。
  • より良いエラー処理とクエリ パラメータについては、http://php.net/pdoを確認してください。

    <?php
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        $user = '***************';
        $pass = '***************';
        $host = '***************';
        $data = '***************';
    
        mysql_connect($host, $user, $pass) or die("Could not connect");
        mysql_select_db($data) or die("Database Not Found");
    
        $result=mysql_query("SELECT COUNT(1) FROM sec_login WHERE Username='".mysql_real_escape_string($_POST['username'])."' AND Password='".mysql_real_escape_string($_POST['password'])."'") or die(mysql_error());
    
        if(mysql_result($result) == 1) {
            $_SESSION['username'] = $_POST['username'];
            header("location: ../index.php");
            exit;
        } else {
            $message = 'You have failed to provide valid credentials.';
        }
    } else {
        $message = '<form method="post">
                        <input type="text" name="username" value="username" />
                        <br />
                        <input type="password" name="password" value="password" />
                        <br />
                        <input type="submit" />
                    </form>';
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title>Untitled Document</title>
        </head>
    
        <body>
            <?php echo $message; ?>
        </body>
    </html>
    
于 2012-05-21T17:30:45.730 に答える
1

誰かがこれに出くわし、例が必要な場合に備えて。以下は、スクリプトで機能するログインに現在使用しているコードです。

<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors', 1);

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $user = '***********';
    $pass = '***********';
    $host = '***********';
    $data = '***********';

    mysql_connect($host, $user, $pass) or die("Could not connect");
    mysql_select_db($data) or die("Database Not Found");

    $result=mysql_query("SELECT userID FROM sec_login WHERE Username='".mysql_real_escape_string($_POST['userN'])."' AND Password='".mysql_real_escape_string($_POST['passW'])."'") or die(mysql_error());

    if(mysql_num_rows($result) == 1) {
        $_SESSION['login']=1;
        $_SESSION['username']=$_POST['userN'];
        $session= session_name() . '=' . session_id();
        header("location: ../index.php?".$session);
        exit();
    } else {
        $message = 'You have failed to provide valid credentials.';
    }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Untitled Document</title>
    </head>

    <body>
        <?php echo $message; ?>
    </body>
</html>

もちろん、接続変数は省略されています。他のページがセッション変数を取得できるようにするには、すべてのページが (文字どおりコードの最初の行で、doctype 宣言の前でも) で始まることを確認してください。

人々を助けてくれてありがとう!

于 2012-05-22T20:27:55.857 に答える