2

ユーザーに登録してもらいたい個人のウェブサイトを作成しています。私は、取るべきさまざまなセキュリティ対策を検討してきましたが、主に何に注意を払う必要があるのか​​興味があります。主に自分で認証プロセスを作成するために、ASP.NETフォーム認証を使用しないことにしました。これが私がこれまでにしたことです:

  • パスワードやソルトのハッシュなどのユーザーのログイン情報を保存しているMySQLデータベースがあります
  • ログインしたら、セッションをユーザー名と同じに設定します。これにより、フォーム認証を使用せずにログインしたユーザーを追跡するための最良の方法ですか?たとえば、セッションを設定すると、次のようになります。

    Session["User"] = username;

ログインしたユーザーを追跡するためのより良い方法はありますか?それとも、これは許容できるが、それでも安全な、物事を処理する方法ですか?

4

2 に答える 2

1

私の意見では、暗号化されたCookieにユーザー情報を含めることをお勧めします。そうすれば、サーバーはセッション中の各ユーザーを追跡する必要がなくなります。そして、それはセッションよりも信頼性があります。できることは、FormsAuthenticationから安全な認証Cookieを作成するためのメカニズムのみを使用し、たとえば独自の認証を使用することです。

public void OnLoginClick(object sender, EventArgs e)
{
   if(MySqlValidUser(username, pass)) // this is where you would check if user is valid
   {
      FormsAuthentication.SetAuthCookie(username, null);
      Response.Redirect("/");
   }
}

そうすれば、フォーム認証を有効にしている場合、asp.netページのUser.Identity.NameまたはUser.IsAuthenticatedに簡単にアクセスできます。

<authentication mode="Forms" />
于 2012-07-13T15:20:40.017 に答える
1

ログインしたユーザーを追跡するためのより良い方法はありますか?

Microsoftは、クエリ文字列を使用するCookieなしのフォールバックを使用して、暗号化されたCookieを使用するようにFormsAuthenticationを設計しました。したがって、彼らは明らかに、を使用するよりも良い方法だと考えていますSession

1つの利点は、セッションが失われた場合にユーザーが自動的にログアウトされないことです(タイムアウトになりますが、デフォルトのInProcセッションを使用しているときにアプリケーションをリサイクルすると失われる可能性もあります)。

本当に「自分でロール」したい場合は、次のことを検討することをお勧めします。

  1. カスタムMembershipProviderを作成します。これは、FormsAuthenticationインフラストラクチャで機能しますが、実装の詳細について何かを学ぶことができます。

  2. または、FormsAuthenticationの設計を調べて、そのほとんどを複製してみてください(たとえば、Cookieなしの認証のサポートを省略できます)。

于 2012-07-13T15:43:55.837 に答える