1

私は初心者なので、現在苦労している ASP.net コードで達成したいことが 2 つあります。

1) 現在、 Login.aspxのコードはSQL インジェクションの影響を受けやすいですが、SQL インジェクションのリスクを最小限に抑えるにはどうすればよいですか?

using System;
using System.Collections;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Web.Configuration;

public partial class login : System.Web.UI.Page
{

    protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
    {
        string username = Login_Box.UserName;
        string pwd = Login_Box.Password;

        string strConn;
        strConn = WebConfigurationManager.ConnectionStrings["team13ConnectionString"].ConnectionString;
        SqlConnection Conn = new SqlConnection(strConn);
        Conn.Open();

        string sqlUserName;
        sqlUserName = "SELECT id,pass FROM ts_dept ";
        sqlUserName += " WHERE (id ='" + username + "')";
        sqlUserName += " AND (pass ='" + pwd + "')";
        SqlCommand com = new SqlCommand(sqlUserName, Conn);

        string CurrentName;
        CurrentName = (string)com.ExecuteScalar();

        if (CurrentName != null)
        {
            Session["UserAuthentication"] = username;
            Session.Timeout = 1;
            Response.Redirect("Default.aspx");
        }
        else
        {
            Session["UserAuthentication"] = "";
        }
    }
}

2) Default.aspxは私の Web サイトのホームページです。ユーザーがログインしていない場合はアクセスできません。ここで Session["Authentication"] を確認するにはどうすればよいですか ( null の場合、ユーザーはLogin.aspxにリダイレクトされます。これまでのコードは次のとおりです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Team13
{
    public partial class default : System.Web.UI.Page
    {

    }
}
4

3 に答える 3

2

パラメータ化されたSQLを使用して、SQLインジェクション攻撃を防ぐことを検討してください。

ただし、一般的には、メンバーシップに asp.net ユニバーサル プロバイダーを使用することをお勧めします。これにより、堅牢で安全なメンバーシップ機能が保証されます。

これこれを見て、始めましょう。

于 2013-03-23T04:28:50.747 に答える
1

テキスト ボックスにサーバー検証を配置することから始めます。おそらく最大長が役立ちますか?また、アポストロフィが使用されないようにします。

パート 2 では、次のようなことを試してください。おそらく空の文字列もテストしてください。

If (Session("UserAuthentication") Is Nothing) 
{
    Response.Redirect("Login.aspx")
}

アップデート

フォーム認証は、ユーザーが抱えている問題と組み込まれている問題の両方を処理します。必要に応じて、ニーズに合わせてカスタマイズできます。http://www.codeproject.com/Articles/408306/Understanding-and-Implementing-ASP-NET-Custom-Formに優れたチュートリアルがあります。

または、SQL コマンドを変更して、提供されたユーザー名のパスワードを取得し、データを取得した後に文字列比較を行うこともできます。

"SELECT pass FROM ts_dept WHERE (id ='" + username + "')";
于 2013-03-23T02:53:09.803 に答える
1

SQL インジェクションを防止するためのベスト プラクティスは次のとおりです。

  1. ステートメントを実行するためにユーザー値を sql に渡すには、コマンド パラメーターを使用します。
  2. DB で SQL ステートメントを実行するための常にユーザー sp_execute() システム ストアド プロシージャ
  3. SQL ステートメントに値を入力する前に、必ずユーザー入力値を検証してください。
于 2013-03-23T04:36:12.007 に答える