2009-05-26 5 views
0

私はいくつかの試験をユーザーに提示しています。ユーザーは、この試験に合格する前に実際のサイトに進んではいけません。ただし、ある日(現在の日付から月)まで、試験をバイパスする選択肢を持つユーザーもいます。だから、これらのユーザーは試験を受ける1ヶ月のウィンドウを持っています。それまでは試験ページの[続行]をクリックするだけでサイトに入ることができます。私は自分のWebアプリケーションでやっていることをハックするか簡単に壊すことができますか?

マイロジック: 通常のユーザーが試験フォームページでsubmitをクリックすると、私はすべての論理を行い、情報をDBに送信しています。これらの「特別な」ユーザーが進行をクリックすると、まだ1ヶ月間のウィンドウに残っていれば、「didPassExam()」メソッドに「true」をharcodingするだけです。

私の質問は: ユーザーは、私は、次の(Strutsの2のコードを)やってクリックしたボタンをチェックする

プライベート文字列を提出します。

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

とJSPで

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

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

ので、基本的にユーザーがボタンをクリックしたときに、私のアクションクラスがクリックされたボタンを知っているだろう。しかし、何人かのハッカーが「Submit」ボタンの値を意図的に「Proceed」に変更して、通常のユーザーでも試験をバイパスできますか?

誰かがこれを違ったより安全な方法で行いますか?

答えて

8

はい、いずれのユーザーも特別な「実行」をパスしてアクセスできます。

ユーザーの種類の違いを既に伝えることができるので、のサーバーでのボタンを検証する必要があります。クライアント側のチェックは、常にバイパスすることができます。

+1

あなたがそれを提出する前に、フォームのHTMLを編集し、FirebugのでFirefoxを実行している場合は、右のと同じくらい簡単です要素をクリックしてHTMLを編集するをクリックします。 3回のクリック。そうではありません...あまり安全ではありません。 –

7

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

3

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

クライアント側のコードは常に悪意のあるユーザーに置き換えられる可能性があります。

1

ボタンを押したままキャプチャしてから、ユーザーに対して検証する必要があります。あなたのユーザーを想定し は、クラス変数、ユーザーとしてインスタンス化、およびパブリックメソッドisSpecialUser()のためのブール値を返します:

public void setSubmit(String submit) { 
    if (user.isSpecialUser() && submit == "Proceed") { 
     // Only Special Users can set this to Proceed 
     this.submit = submit; 
    } else { 
     // Sets itself to the remaining valid option (to prevent evilness) 
     this.submit = "Submit"; 
    } 
} 
関連する問題