1

私は現在機能しているウェブサイトを持っています。情報を表示するページと、情報ソースを編集できるページがあります。index.php にログインすると、フォームを介してデータが view.php に投稿されます。このサイトは Cookie を使用していません。[編集] をクリックすると、ユーザー名、パスハッシュ、送信要求が edit.php にポストされます。現在、このボタンは問題なく動作しますが、編集ボタンの現在のコードは次のとおりです。

<FORM NAME ="form1" METHOD ="post" ACTION = "edit.php">
<p class="BodyText">
<INPUT TYPE = "Hidden" Name = "Username" Value = "<?php print($username); ?>">
<INPUT TYPE = "Hidden" Name = "PassHash" Value = "<?php print($password); ?>">
<INPUT TYPE = "Submit" Name = "Change" VALUE = "Edit">
</p>
</FORM>

以前は気付きませんでしたが、コードを調べてみると、パスワードが出力されていることに気付きました。これなしで編集ページへのパスワードを取得する方法は本当にわかりませんが、Chrome で要素を調べると、パスワード ハッシュ (SHA-1) が表示されます。まず、これはセキュリティ ホールですか?次に、ハッシュをエンドユーザーに送り返さずに、パスハッシュを edit.php ページに渡す方法。第三に、私はこれを完全に間違っていますか?郵便でログインしても問題ないように思えますが、それはセキュリティに問題があるのでしょうか? 私は PHP が初めてで、セキュリティに関してはまったくの初心者です。

4

3 に答える 3

4

これは良い方法ではありません (フォーム内の非表示の入力)。

PHP セッションについて学びます。

PHP マニュアルからいくつかの例を確認してください。

ページ間のセッション全体でユーザーのアクセスを保持する必要があり、パスワードを印刷しないでください。

ユーザーのパスワードを検証して認証し、ユーザーが誰であるか、およびそのセッションにログインしているかどうかに関する情報をセッションに保持できます (すべてのページでパスワードを検証しようとするのではなく)。

フローの一例:

認証時(ユーザーログイン):

session_start();

// Authenticate user here with the password.
if (someAuthenticationFunction($_POST['user'], $_POST('password') === true) {
    $_SESSION['user'] = $user;
    $_SESSION['loggedIn'] = true; // Notice we're not saving the password into the session, only whether user is loggedIn.
}

ユーザーの認証を確認したい他のすべてのページ (おそらく edit.php ページ):

session_start();

if ($_SESSION['loggedIn'] === true) {
    $user = $_SESSION['user'];
    // Do the actual editing stuff here.
}

ユーザーがログアウトする準備ができたら、session_destroy()(ほとんどの場合、ログアウト ページで)を使用します。

于 2012-08-30T19:58:44.727 に答える
3

$_SESSION 変数にパスワードを保存できます。そのためには、ログイン フォームが処理されるページに次のように記述する必要があります。

session_start();//at top of the page
$_SESSION['user'] = $_POST['username'];
$_SESSION['password'] = $_POST['password'];

これを設定すると、すべてのファイルでユーザー名を取得できます。

session_start();

書かれた。

于 2012-08-30T20:03:47.147 に答える
0

Cookie を使用したくない場合は、URL で渡されたある種のセッション ID ( php.net/output_add_rewrite_varを参照) を使用してデータベースに保存できますが、まったく新しいワームの缶を開くことになります。セッションハイジャックと関係があります。COokie ベースの PHP セッションが最適です。

于 2012-08-30T20:03:51.933 に答える