0

ウェブサイトを作成していますが、今のところ特定のユーザーのみが閲覧できるようにしたいと考えています。そのため、ユーザー/パスの検証を設定し、許可されているユーザー名とパスワードを含むいくつかの変数を設定しましたが、ランダムなユーザー名またはパスを入力してもサイトを表示できるため、エラーが発生しているようです。これは私のコードです:

login.php

<body>
<form action="check.php" method="get">
<Username:<input type="text" name="user" maxlength='8'>
<Password:<input type="password" name="password" maxlength='12'>
<input type="Submit" name="Submit" value="Submit">
</form>
<?php
print "<br><code> To proceed to the main page, please give the information and then click the button. You will be automatically be redirected.<br> </code>";
?>
</body>

check.php (情報をチェック)

<?php

$user1 = '';
$user2 = '';
$pass1 = '';
$pass2 = '';

$_GET['user'];
$_GET['password'];

if($_GET['user'] && ($_GET['password'] = $user1 && $user2 && $pass1 && $pass2)) {
    header( "refresh:1;url=" );
    
} else {
echo 'You are unable to view this page yet, please try again later.';    
}{
}
?>

どこが間違っているのかわかりませんか?私はかなり長い間試みてきましたが、成功していません。

編集

コードの一部を変更して並べ替えましたが、実際に誰が助けてくれたのかわかりません。

4

5 に答える 5

2

POSTパスワードを渡すために使用します。

パスワードを保存するより安全な方法を次に示します。

フォーム

<form action="check.php" method="post">
Username: <input type="text" name="user" maxlength='8'>
Password: <input type="password" name="password" maxlength='12'>
<input type="Submit" name="Submit" value="Submit">
</form>

ポスト (check.php)

$siteKey = 'YPfiC+NIY2JKXbRK_riP!nd0_7AC~9X s`%ax+|*3UpxlZAll3(E?eW#w-1`)|X ';

$users = array(
    array('user' => 'bob', 
          'password' => '56cee8ccfa519021a945a75c01c73c9538c9bce4e96842392d65e81161f8b1c9',
          'salt' => '> c>>.Sr>J-MPn@d/'),
    array('user' => 'tom', 
          'password' => 'd275d8f08ada53d42394b3f13b57f1ef8dad7405d563801d35bccc60038fd14a',
          'salt' => '=]:iK/VMb-{wYg`6+'));

if( !empty($_POST['user']) && !empty($_POST['password']) ) {
    foreach($users as $sub) {
        if( $sub[user] == $_POST['user'] ) {
           $hashPostPoassword = hash('sha256', $siteKey . $sub[salt] . $_POST['user']);

           if( $hashPostPassword == $sub[password] ) {
               //verified
           }
           else {
               echo "Wrong password";
           }
        }
    }
}
于 2013-04-11T19:48:26.657 に答える
0

if ステートメントでは、右側の値を左側の変数に割り当てるだけの単一の等号を使用しています。比較したい場合は、2 つの等号を使用する必要があります: if($user == $_GET['user'])

于 2013-04-11T19:44:45.750 に答える
0

この2点が気になります。1つ目は、フォームがPOSTではなくGETである理由です。

また、これがデータベース主導ではないのはなぜですか。

データベースを実行すると仮定します。ユーザー名とパスワードをプレーンテキストとして保存する場合は、ユーザーが入力したものを使用してクエリを実行し、結果が返されるかどうかを確認してください。

  Select * from users_table where username = $_POST['user'] and password = $_POST['password'];

 if(result from query) {
      //then the user exists and the info entered is correct
 } else {
    //either username and password is wrong or no such user exists.
 }

それ以外の場合は、= 記号が 1 つしかなく、代わりに == が必要です

于 2013-04-11T19:41:59.633 に答える
-1

構文を実際に確認する必要があります。それはどういう意味ですか?

  • $_GET['password'] = $user1 常に真になります【欠品のお知らせ=
  • &&user2常にfalseになります。

実際、あなたが何を望んでいるのかわかりません。もしかしてこれ?

if(($_GET['password'] == $pass1 && $_GET['user'] == $user1) || ($_GET['password'] == $pass2 && $_GET['user'] == $user2))

于 2013-04-11T19:41:29.267 に答える
-1

一時的な解決策としてユーザーをハードコーディングしたい場合は、次のことができます。

<?php

$users = [
    'user0' => 'password0',
    'user1' => 'password1',
    'user2' => 'password2',
    'user3' => 'password3'
];

$login    = isset($_REQUEST['login'   ]) ? $_REQUEST['login'   ] : null;
$password = isset($_REQUEST['password']) ? $_REQUEST['password'] : null;

if( ! is_null($login) && in_array($login, $users) && $password === $users[$login]) {
    // Show your web site
}

?>

これは、「今のところ」と言ったように、あなただけがすべきであるdb-freeソリューションにすぎないことに注意してください。

于 2013-04-11T19:47:51.500 に答える