나 인증 방법 다음에 asp.net 한 SQL 인젝션 방지 :는
protected void Button1_Click(object sender, EventArgs e)
{
string s;
s = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
SqlConnection con = new SqlConnection(s);
con.Open();
string sqlCmd;
sqlCmd = "SELECT Username, UserPassword FROM Benutzer WHERE Username = @Username AND UserPassword [email protected]";
SqlCommand cmd = new SqlCommand(sqlCmd, con);
String username = tbUsername.Text.Replace("'", "''");
String password = tbPassword.Text.Replace("'", "''");
cmd.Parameters.AddWithValue("Username", username);
cmd.Parameters.AddWithValue("Password", password);
string CurrentName;
CurrentName = (string)cmd.ExecuteScalar();
if (CurrentName != null)
{
Session["UserAuthentication"] = cmd.Parameters[0].ToString();
Session.Timeout = 1;
Response.Redirect("Default.aspx");
}
else
{
lblStatus.ForeColor = System.Drawing.Color.Red;
lblStatus.Text = "Benuztername/Password ungültig!";
}
}
는 SQL 주입을 방지하기 위해이 충분? 나는이 같은 직접 명령에 단지 사용자 이름과 암호에 사용 :
sqlCmd = "SELECT Username, UserPassword FROM Benutzer WHERE Username ='" + username + "' AND UserPassword ='" + pwd + "'";
사용자 이름과 비밀번호가 그냥 문자열 변수가있는 사용자 이름과 암호 텍스트 상자의 내용이 저장된
...
편집 :
내가 내 코드를 편집 한 확인 지금처럼 보이는 :
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection objcon = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ToString());
SqlDataAdapter objda = new SqlDataAdapter("[MembershipPruefen]", objcon);
objda.SelectCommand.CommandType = CommandType.StoredProcedure;
objda.SelectCommand.Parameters.Add("@Username", SqlDbType.VarChar).Value = tbUsername.Text;
objda.SelectCommand.Parameters.Add("@UserPassword", SqlDbType.VarChar).Value = tbPassword.Text;
objcon.Open();
string CurrentName;
CurrentName = (string)objda.SelectCommand.ExecuteScalar();
if (CurrentName != null)
{
Session["UserAuthentication"] = tbUsername.Text;
Session.Timeout = 1;
Response.Redirect("Default.aspx");
}
else
{
lblStatus.ForeColor = System.Drawing.Color.Red;
lblStatus.Text = "Benuztername/Password ungültig!";
}
objcon.Close();
}
이 내 저장 프로 시저는 다음과 같습니다
CREATE PROCEDURE MembershipPruefen (@Username VARCHAR(50), @UserPassword VARCHAR(50))
AS
SELECT Username, UserPassword FROM Benutzer WHERE Username LIKE @Username AND UserPassword LIKE @UserPassword;
충분합니까? 내 웹 응용 프로그램은 SQL Inections에 대해 안전 할 것인가 아니면 아직 할 일이 있습니까?
나는 왜 당신이 단지 저장 프로 시저와 다중 계층 기술을 사용하지 않는지 알 수 있습니까 ?? 그것의 진짜로 도움이되는 – Marwan
나는 이것에 상당히 새롭기 때문에 나는 그것에 시작하는 아무 단서도 없다 ... 또한 나의 시간은 조금 제한 되 그래서 나는 이것이 가능한 한 빨리 끝내야한다 ... 나는 많은 기사에 살균, 매개 변수화 및 저장 프로 시저는 SQL 주입에 대해 일반적으로 안전하므로 처음 2 개를 수행했지만 충분하지 않은지는 알 수 없습니다. – LeonidasFett
문자열 연결을 건너 뛸 때 유용합니다! – Michel