0

これは、私が設定した 5 つの論文を含むテスト エンジン アプリケーションです。5 つの php ページとして

お申し込みの流れ

ログイン.html

check.php // 資格情報が正しいかどうかを確認する

正しければ

main.php //ユーザーがこのページの「テストを受ける」をクリックすると、5 つの論文のうちの 1 つが表示されます...

しかし、ログインしたら、URLを必要なテストペーパーのURLに変更するだけです..ペーパー名r 1.php 2.php ....

どうすればこれを止めることができますか...??

if(!isset($_SESSION['page'])//Tp
        continue;           //Tp
else
 {
   header('Location:login.php');
   exit;
 }                               //Tp
$_SESSION['page']=$_SERVER['SCRIPT_NAME'];//tp

これは正しいですか...私が言ったように5ページあります....

各ページにこのコードがあります....

セッション変数が設定されているかどうかを確認します....設定されている場合...それはすでにページにアクセスしたことを意味します...しかし、このコードは機能しません...変数 _SESSION['page' を使用しましたか? ] それを宣言する前に???

4

3 に答える 3

3

最善の方法は、真の認証と承認をアプリケーションに組み込むことです。次に、論文を提供する URL は、ページを提供する前に、ユーザーがページを閲覧できることを確認する必要があります。

check.php で何をするにしても、紙のページ自体で行います。

于 2010-10-24T20:07:05.307 に答える
1

あなたが抱えている問題は、デフォルトのハンドラー スクリプトの周りにコードを配置することで、ほとんど解決できます。(以下の私のガイドラインを参照してください。)

このようなスクリプトに情報を渡す基本的な方法は 2 つあります (上のコメントで述べたように)。基本的な方法は、 のような GET 変数を使用することですhttp://www.example.com/main.php?p=1

より訪問者にとって使いやすい URL が必要な場合はRewriteRule.htaccessファイル内で a を使用して、ナイス URL をハンドラーが理解できる URL に変換できます。( mod_rewriteを有効にする必要があります。)

これは、この特定の質問にはやり過ぎかもしれませんが、安全な Web アプリに関するいくつかのガイドラインを次に示します。それらはすべて関連していると思います:

  1. 機密情報をパブリック Web ルートの外に置きます。
  2. デフォルトでは、情報を表示しません。ユーザーが明確に承認されている場合にのみ、情報の表示を有効にします。
  3. 理想的には、これには URL が含まれます (有効な URL を入力しても承認されていない場合は、有効な URL に到達したことを知らせないでください)。1 つの方法は、認証されていない場合にログイン ページにリダイレクト (以前のようにロケーション ヘッダーを設定) することです。
  4. デフォルトのハンドラ スクリプトを作成します。この中央スクリプトには、必要なすべてのファイルが含まれ、必要なすべての関数が呼び出されます。すべてのリクエスト情報をこのハンドラに渡し、すべての HTML を出力させます。
  5. #3 の要件:コードを関数とクラスにカプセル化します。そうすれば、デフォルト ハンドラーは、必要な場合にのみ、準備ができたときにそれらを呼び出すことができます。単にそれらが含まれていたからではありません。これにより、アプリのフローをより詳細に制御できます。
  6. echoコード全体のランダムな場所で HTML を ing する代わりに、すべての HTML 出力をメインの handlerに返します。乱数echoが散在していると、セキュリティ ホールが発生しやすくなります。
  7. ユーザー入力を信用しないでください$_GETまたはから取得した値を使用する場合は、$_POST使用する前に有効な値であることを確認してください。

編集:

(これはより具体的で、現在のコードに向けられています)

コードが期待どおりに実行されない理由は 3 つあります。

  1. 最初の行で閉じ括弧を省略しましたif(!isset($_SESSION['page'])

  2. コードの記述方法は$_SESSION['page']、ユーザーがページにアクセスしたときに既に設定されている場合、ログイン ページにリダイレクトされます。これを修正するには、節に the を入れ、header('Location:login.php'); exit;節を完全ifに削除します。else

    if(!isset($_SESSION['page'])) {
       header('Location:login.php');
       exit;
    }
    $_SESSION['page']=$_SERVER['SCRIPT_NAME'];
    
  3. $_SESSION['page']最初のページを表示できるように、最初にログインする時間を設定する必要があります。

$_SESSION['page']スクリプト名の代わりに整数を使用することをお勧めします。そうすれば、ユーザーが$_SESSION['page']ログインしたときに 1 に設定でき、ユーザーがページを正常に表示するたびに 1 ずつ増加$_SESSION['page']します。このユーザーが閲覧できる次の論文$_SESSION['page']を意味すると考えてください。

$pageid用紙ごとに設定できます。ページを表示しようとするたびに、$_SESSION['page']が 未満の場合は、ページを$pageid表示させません。

于 2010-10-26T03:23:17.857 に答える
1

たくさんの選択肢。カップル:

  • URL で論文名の名前をエンコードせずに、たとえば test-paper.php というページから選択した論文の内容を返します。

  • ユーザーのセッションでユーザーが見る資格のある論文を追跡します。各テスト用紙のページで、ユーザーがこれを見ることが許可されているかどうかを確認し、許可されていない場合は 403 Forbidden (またはエラー ページ) を返します。

もっとたくさん、きっと。

于 2010-10-24T20:07:42.140 に答える