2016-10-24 12 views
0

SQLログインasp.net

protected void btnLogin_Click(object sender, EventArgs e) 
{ 
    string cs="Data Source=Dev-PC;Initial Catalog=CodeSolution;User ID=sa; password=12345678" 
    SqlConnection con = new SqlConnection(cs); 
    con.Open(); 
    String sqlCommand = "SELECT * FROM tblLogin WHERE "+ 
        "username = @user AND password = @pwd" 
    SqlCommand cmd = new SqlCommand(sqlCommand, con); 
    cmd.Parameters.AddWithValue("@user", TextBox1.Text); 
    cmd.Parameters.AddWithValue("@pwd", TextBox2.Text); 
    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    DataTable dt = new DataTable(); 
    da.Fill(dt); 
    if (dt.Rows.Count > 0) 
    { 
     Response.Redirect("Details.aspx"); 
    } 
    else 
    { 
     Response.Write("<script>alert('Please enter valid Username and Password')</script>"); 
    } 
} 

以下のように私は、基本的なログインフォームを作成した。しかし、これは、ログイン人々がDetails.aspxのURLを推測するかもしれないのでずに考えて私を得た

これで、ログインが成功した場合、tblLoginに列を追加して、そのユーザーのsessionIDを保存することができますか? 次に、セッションIDがそのユーザーのtblLoginのものと等しいかどうかを確認するだけです。と(poormansolutionは、IISサーバー

  • で知られているように

    • がどのようにtblLoginにセッションIDを保存するためにこれは、またはそれが許容できるようになります:

      私はこれについて、ここで2つのことを思ったんだけどそれぞれのASPページが有効なセッションIDと照合する機能で始まるという欠点)。削除

    つのエラー、その今=

  • +1

    新しいプロジェクトを作成していると仮定すると、フォームプロジェクトではなくMVCプロジェクトを作成する時間を費やす必要があります。そして、これをルーティングで解決することができます。セッションIDはどこにでも保存する必要はありませんが、それはすでに私が信じているリクエストデータの一部です。 – Bauss

    +0

    [ASP.NET ID](https://www.asp.net/identity/overview/getting-started/introduction-to-aspnet-identity)を使用しましたか?そこに実装されている認証と認可のための標準的なコンセプトはたくさんあります。あなたが自分のアイデンティティシステムをロールすることを選択したとしても、今やっていることや間違っていることをヒントする必要があります。 – Martheen

    +0

    解決策は、マスターページロードでセッションをチェックすることです。 **しかし、これは時代遅れのログイン**形式です。あなたはASP.NETアイデンティティを使用する必要があります – GauravKP

    答えて

    0

    SqlCommandオブジェクトでのLIKEは、あなたの質問への答えを正確ではないが、これは良いガイド/アドバイスになります。

    セッションIDを持っているというあなたの考えは、あなたのサイト/システムの要件によってはまったく悪くありません。しかし、この場合、IISからのセッションではなく、それを解読する必要があるため、インライン攻撃(データベース/ルートフォルダへのアクセスを可能にする)に脆弱になります。

    ここでは、ログイン時のセッションのセッションIDを取得する方法ではなく、IIS(ロギングのためにこれを使用することができます)からの例です:

    string sessionId = System.Web.HttpContext.Current.Session.SessionID;

    やデータベースの設計どおり、よりよい持っていますユーザーのセッションを記録するための別のテーブル。

    +0

    あなたの答えに感謝します。私はそれを楽しくしています。 最後にSessionIDがユーザーセッションを分離する理由は何ですか?私はその方法をチェックとして使用しない理由を考えました – user3800527

    +0

    セッションIDは、ユーザーがログインしたすべてのセッションと異なりますが、別のセッションがアクティブな場合あなたがあなたのコードにそれを指定しない限り、(同じログインの)セッションは期限切れになります。 –

    +0

    セッションの作成には多くの方法がありますが、セッションがグローバル変数であるため、DBのユーザーIDを使用することもできます –

    2

    だから、多くのことが間違っているようですが、適切な回答を書くと自動的にこの質問が広すぎます。私は試してみましょう:

    • 接続文字列をハードコードしないでください。設定ファイルに保存し、名前で参照してください。
    • saアカウントを開発用に使用することはありません。
    • テーブルの接頭辞をtblとしないでください。冗長です。
    • ユーザー名とパスワードにlikeを使用しないでください。完全一致が必要です。
    • パスワードを平文で保存しないでください。
    • 「人々はDetails.aspxのURLを推測するかもしれない」 - あなたが許可を確認するすべてのアクションに(「このアクションを実行することができ、このユーザーです」)。

    これらの問題をすべて解決する方法を説明するには、あまりにも多くの労力が必要です。承認と認証と呼ばれるホイールを再構築しないでください。このためには、安全でテスト済みのサポートされたライブラリを使用してください。

    ASP.NET Membershipまたはその後継ASP.NET Identityを参照してください。

    +0

    設定ファイルを使用しますが、このコード例では、私が何をやっているのかを簡単に説明するには、個人的にはtblName表記が好きですが、あなたの権利は好きです。私は後でそれを他の図書館にダイビングします。私はこれがうまくいくかどうか私はそれが動作すると思うかと思っていた。 – user3800527

    関連する問題