0

私は自分のページのURLを次のように持っています:

http://www.ab.com/test.aspx?invitationID=XXXX

招待状が本当に有効かどうかを Page_Load で確認します。

if(!IsPostback)
{
   //login for validation. If not valid invitationID do a server.Transfer to 404 page
}

これはうまくいきます。ただし、ユーザーが登録ページの送信ボタンをクリックすると。彼は RegistrationSuccessful ページにリダイレクトされます。ここまではうまくいきます。しかし今、キャッシュのためにブラウザの戻るボタンを押すと、再びページが表示され、再度登録できます。これはバグです。

私は追加しました:

  HttpContext.Current.Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
  HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
  HttpContext.Current.Response.Cache.SetNoStore();

私のPage_Loadで、それはうまくいくようです。しかし、このアプローチにセキュリティ上の脅威はありませんか? 招待の検証ロジックは!IsPostback正しいですか、それともポストバックかどうかに関係なく行う必要がありますか?

4

2 に答える 2

0

「http://www.ab.com/test.aspx」は登録ページですか? はいの場合、キャッシュを使用して移動を行ってはなりません。登録済みのユーザーの場合、RegistrationPage は自動的に HomePage にリダイレクトする必要があるためです。RegistrationProcedure 内でのみ InvitationId を確認する必要があります。

Regsister(..., Request.QueryString["invitationID"]);

はい、FosterZ が言うように、InvitationId をデータベース内のユーザーのアカウントにリンクする必要があります。

于 2012-05-17T05:58:14.977 に答える
0

さて、invitationIDどこかに保存していますか?invitationIDそれを db に保存すると、db で使用済みとしてマークすることで、これが既に使用されていることを知ることができます。このようにして、二重登録を検証できます。

私はこの種の招待登録を使用しました.URLリンクを電子メールで送信し、そのリンクをクリックすると検証を行います. リンクを送信する前に、一意の文字列を生成し、そのユーザーに関してデータベースに保存します。

于 2012-05-17T05:35:16.670 に答える