0

ユーザーにいくつかの試験を提示しています。ユーザーは、この試験に合格する前に実際のサイトに進むことはできません。ただし、一部のユーザーは、ある日 (たとえば、現在の日付から 1 か月後) まで試験をバイパスすることを選択できます。したがって、これらのユーザーには、試験を受けるための 1 か月のウィンドウがあります。それまでは、試験ページの [続行] をクリックしてサイトにアクセスできます。

私のロジック: 通常のユーザーが試験フォーム ページで [送信] をクリックすると、すべてのロジックを実行して DB に情報を送信します。これらの「特別な」ユーザーが [続行] をクリックすると、「didPassExam()」メソッドに「true」をハーコーディングするだけです。

私の質問は: ユーザーがクリックしたボタンを確認するには、次のことを行っています (Struts 2 コード)

プライベート文字列送信;

public void setSubmit(String submit) {
    this.submit = submit;
}

そしてJSPで:

 <s:submit name="submit" value="Submit" />

 <s:submit name="submit" value="Proceed" />

したがって、基本的にユーザーがボタンをクリックすると、アクション クラスはどのボタンがクリックされたかを認識します。しかし、一部のハッカーは意図的に [送信] ボタンの値を [続行] に変更し、通常のユーザーでも試験を回避できますか?

誰かがこれを別のより安全な方法で行うでしょうか?

4

4 に答える 4

8

はい、すべてのユーザーが特別な「続行」を通過してアクセスできます。

ユーザーのタイプの違いはすでにわかっているので、それに基づいてサーバーでボタンを検証する必要があります。クライアント側のチェックは常にバイパスできます。

于 2009-05-26T18:46:18.560 に答える
7

一般に、クライアントからの入力を信頼すべきではありません。特定のユーザーが試験をスキップする権利を持っていることをサーバー側で検証する必要があります。おそらく、ログイン プロセスからユーザーが誰であるかを知っており、そのユーザーが試験をスキップできるかどうかを判断するための正しいロジックを知っているとします。したがって、クライアントの言うことを信用する理由はありません。

于 2009-05-26T18:47:29.447 に答える
3

はい、これは簡単にハッキングされます。このようなものを保護する必要があるときはいつでも、サーバー側でチェックを行ってください。つまり、サーバー側でユーザー タイプ (これは用語で「役割」のようなものです) を確認します。

クライアント側のコードは、悪意のあるユーザーによって置き換えられる可能性があり、置き換えられると常に想定してください。

于 2009-05-26T18:48:25.407 に答える