1

現在、パスワードの変更やファイルのアップロードなどを行うことができるアカウントウィンドウを非表示にするサイトがあります。コードは次のように単純です。

<?php if($is_logged_in) { ?>
      <div id="account_window">
          //stuff
      </div>
<?php } ?>

しかし、これによると、これは大きなセキュリティ上の欠陥です。では、代替手段は何ですか?ユーザーがログインした場合にのみアカウントウィンドウを表示可能にし、影響を受けないより安全な方法でそれを行うにはどうすればよいif someone just injects the right HTML into the pageですか?

4

4 に答える 4

3

リンクはjQueryを扱っています-HTMLは何があってもページ上にあり、jQueryは単にそれを表示/非表示にします。ログインしていなくても、JSを実行してdivを表示することができます。

あなたはPHPでそれを行っています-ページはサーバー上でレンダリングされ、表示されているHTMLのみがブラウザーに返送されます。ユーザーがログインしていない場合、account_windowdivがブラウザーに到達することはありません。保護されたHTMLがページにまったく表示されていないため、何もできません。

于 2012-10-27T17:43:44.560 に答える
3

これはjQueryの部分だと思いますが、データを非表示にするだけですが、ページにレンダリングされます。ソースを表示すると、非表示のデータを確認できます。CSSdisplay: none;プロパティのように機能します。ここでは、コンテンツは実際にはページ上にありますが、画面上には非表示になっています。

PHPでは、次$_SESSIONのように非表示にするためのデータを使用することもできます

$_SESSION['logged_in'] = true

<?php if($_SESSION['logged_in'] == true) { ?>
      <div id="account_window">
          //stuff
      </div>
<?php } ?>
于 2012-10-27T17:44:13.560 に答える
2

$is_logged_in変数はユーザーがログインしている場合にのみ設定されると思います。

「アカウントのもの」が入力ボックスやテキストエリア、またはユーザーがサーバー側スクリプトに送信する情報を入力するものである場合、唯一のセキュリティ上の欠陥は、データ送信中にユーザーがログに記録されているかどうかを再度確認しない場合です。これをチェックしない場合、ユーザーはHTMLを挿入し、データベースに保存される送信を行うことができます。それが唯一のセキュリティ上の欠陥です。

于 2012-10-27T17:46:30.020 に答える
2

$is_logged_inコードは安全である必要があります(クエリパラメータからのものでない限り!)。あなたが参照した他の投稿では、OPはユーザーがログインしているかどうかに関係なくアカウント関連のhtmlを含め、ユーザーがログインしている場合はJavaScriptで表示していました-これはかなり異なり、ページがアカウント情報なしでサーバー上にレンダリングされるので、安全になります。心配する必要があるのは、ユーザー$is_logged_inが設定方法に干渉しないようにすることだけです。

于 2012-10-27T17:47:41.727 に答える