0

ユーザーの認証に独自のカスタム ユーザー ハンドラーを使用しました。

    protected void Login1_Authenticate1(object sender, AuthenticateEventArgs e)
            {
            SqlReader rdr=null;
            rdr=GetReader(Login1.UserName.ToString().ToLower().Trim(),Login1.Password);
            while (rdr.Read())
            {
                e.Authenticated = true;
                Session["Username"] = Login1.UserName.ToString();
                Session["Name"] = rdr[0].ToString() + " " + (rdr[1].ToString() == null ? "" : rdr[1]);
                id = rdr[2].ToString();
                }
            }

Web サイトの他のすべての部分について、Session["Username"] が null でないかどうかを確認します。私の質問は、上記の認証方法を使用してセッションにユーザー名を保存するのは悪い考えですか? セッションはハッキングできると聞きましたが、暗号化およびハッシュ化されていませんか? ハッシュ化されていない場合、どうすればハッシュ化できますか?

4

3 に答える 3

0

ここにあるのは非常に基本的で、おそらく安全ではありません。また、Webサイトが大きくなると、セッションによってメモリ使用量が多くなり、複数のサーバーに拡張するのが困難になる可能性があります。

ただし、フォーム認証を使用するのではなく、2番目のオプションがあります。

フォーム認証はセットアップとカスタマイズが非常に面倒なので、独自の認証ハンドラーを作成したと思います。

さて、私はFSCAuthと呼ばれる独自の認証モジュールを作成しました。binpressで入手できます。BSDライセンスです。シンプルで安全、そして邪魔にならないように設計されています。UserStoreそれはあなたのデータベースへのインターフェースとして非常に最小限を中心に展開します。考えられるほぼすべてのデータベース形式を使用できます。セットアップ後、承認のために行う必要があるAuthentication.RequiresLogin()のは、ページの一部に認証が必要であることを強制することだけです。リダイレクトビジネスなどを処理し、ログインページと未承認ページを提供するだけです。また、箱から出して安全であり、データベース内のセッションや一時テーブルを利用しません。「ステートレス」です。

また、(私の意見では)すぐに使える素晴らしいものであることに加えて、BSDライセンスであるため、独自の認証システムの優れた出発点になる可能性があります。

于 2012-07-03T20:32:35.423 に答える
0

フォーム認証を使用する理由はいくつかあります。

  1. フォーム認証は、Microsoft によって長年にわたって開発されてきました。その安全性がテストされています。私の方法はテストされていないので、あなたも私もそれが安全かどうかはわかりませんが、フォーム認証はすべての人に信頼されています.
  2. セッションが期限切れになる前に、人々は多くの苦労をします。
  3. 多くの同時ユーザーが Web サイトにアクセスすると、セッションを使用するとメモリの問題が発生します。
  4. フォーム認証を使用すると、よりクリーンで洗練されたものになります。
  5. 多くの開発者が使用しているアプローチを使用しないでください。明日、誰かがあなたのチームに参加してプロジェクトを手伝った場合、その人はあなたのロジックを誤解し、セキュリティを危険にさらす可能性があります。
于 2012-06-27T06:14:37.020 に答える
0

カスタム ユーザー ハンドラーを使用することに問題はありません。あなたのGetReader関数が sql-injection やその他の Web ベースの攻撃から安全であることを願っています。

よくわからない場合は、Microsoft Web Protection Libraryの使用を検討してください。

ループはwhile不要に思えますが、取得するレコードは 1 つだけではありませんか? ループする必要はありません。

ユーザーがログインしていることを確認するためにa が null でないかどうかを確認する必要はありませんSession["Username"]。ユーザーがログインせずにそのページに直接アクセスすると、ログイン ページに移動します。

于 2012-06-23T06:33:25.053 に答える