0

これは私が以前に投稿した質問のフォローアップですが、当時は不明でした。私は今、より明確にできることを願っています。

すべての安全なページにログインした後、ASP.NET と C# を使用してユーザーを検証しています。web.config ファイルに触れずにこれを実行できるはずなので、web.config ファイルの編集を伴うような解決策は避けてください。いくつかのデバッグの後、ユーザーがログインすると、別のコンピューターから、または単に同じコンピューター上で別のブラウザーを使用して、他の人が (ログインせずに) 安全なページにアクセスできることがわかりました。これは明らかに悪いので、有効なユーザーの初期セッション ID を使用して、後続のすべての page_load を、直接のページ パスを持っているが有効なログインではない他のユーザーから保護する方法を考えています。

現時点では、すべての安全な page_load 関数で行う唯一のチェックは、 wether をチェックすることですMySession.GetSessionId()==null。によって返されたこの値を使用しGetSessionId()て、ログイン時の初期セッション ID 値を確認するにはどうすればよいですか?

4

3 に答える 3

4

セッションは、ユーザーごとおよびユーザー エージェントごとに既に一意です。複数のユーザーがすべて同じセッションにアクセスしている場合、おそらくユーザー ID が設定されている場所で、セッションの作成と設定ロジックに間違いなくバグがあります。私の精神的なデバッグは、次のいずれかを教えてくれます。

  • すべてのユーザーと認証情報が、何らかの永続ストアから誤って同じ値に設定されている、または
  • セッションへの参照をどこかのフィールドに保存していますstatic。その値はすべてのユーザーによって共有されます

ただし、コードを表示しないと、デバッグが困難になります。

于 2013-01-14T23:59:39.603 に答える
2

sessionID だけに依存するのは得策ではありません。sessionID を確認するだけでは、ユーザーの情報はわかりません。

ログインしているユーザーのユーザー ID をセッションに保存します。次に、有効なユーザー ID があるかどうか、保護されたページを確認します。

最も洗練されたソリューションではありませんが、この方法では web.config を変更する必要はありません。

ただし、Web サイトの認証/承認ロジックは、asp.net に付属のメンバーシップ機能を十分に活用していないと思います。

おそらく、長期にわたる安全なソリューションを提供することを指摘することで、いくつかのポイントを獲得できます.

于 2013-01-14T23:50:13.340 に答える
0

クイック&ダーティソリューション。疑似コードを確認する

ログインページ (Login.aspx)

BtnLogin_click()
{
        // Query database to check username/password match
        // If Success store corresponding UserID in session
        Session["userID"]=YourDbValue;   // Say 1 is for administrator, 2 is for user
}

セキュリティで保護されたページ (Secure.aspx)

 PageLoad(){
       if (Session["userID"]!="1")
          // Log this attempt somewhere  
          Response.Redirect("~/NotAuthorized.aspx"); 
   }

このアプローチに反対し、適切なメンバーシップ システムを実装することを強くお勧めします。これは、すべてのページでこれをハード コードする必要があるためです。

ダミアン。

于 2013-01-15T07:21:02.553 に答える