当熟悉数据库的人在你的用户名下面输入
' or 1=1--或者
' delete users--等等一类的吧,怎么办?
参数化是什么东西?参数化处理是一个对象。是C#里面的一个。
下面是普通写登录:
using System.Data.SqlClient;
Console.Write("请输入用户名:");
string? userName = Console.ReadLine();
Console.Write("请输入密码:");
string? password = Console.ReadLine();
using (SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=sa;database=SchoolSystemDB"))
{
conn.Open();
string sql = #34;select count(userid) from users where username='{userName}' and pwd='{password}'";
SqlCommand command = new SqlCommand(sql, conn);
int result = (int)command.ExecuteScalar();
if (result > 0)
Console.WriteLine("登陆成功");
else
Console.WriteLine("登陆失败");
}参数化处理:
using System.Data.SqlClient;
Console.Write("请输入用户名:");
string? userName = Console.ReadLine();
Console.Write("请输入密码:");
string? password = Console.ReadLine();
using (SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=sa;database=SchoolSystemDB"))
{
conn.Open();
string sql = #34;select count(userid) from users where username=@userName and pwd=@pwd";
SqlParameter para1 = new SqlParameter("@userName", userName);//这两条进行处理
SqlParameter para2 = new SqlParameter("@pwd", password);
SqlCommand command = new SqlCommand(sql, conn);
command.Parameters.Add(para1);//只要在ExecuteScalar()执行前加进去就可以。
command.Parameters.Add(para2);
int result = (int)command.ExecuteScalar();
if (result > 0)
Console.WriteLine("登陆成功");
else
Console.WriteLine("登陆失败");上面这个不推荐,因为有些时候在使用sql的时候,不知道条件有多少,一般建议在组织sql的时候,
using System.Data.SqlClient;
Console.Write("请输入用户名:");
string? userName = Console.ReadLine();
Console.Write("请输入密码:");
string? password = Console.ReadLine();
//建立一个数组,把一个数组丢进下面command.Parameters.AddRange(paras)
SqlParameter[] paras =
{
new SqlParameter("@username", userName),
new SqlParameter("@pwd", password)
}
//这样的话,只需要改动上面即可,下面的代码基本上不用动。
using (SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=sa;database=SchoolSystemDB"))
{
conn.Open();
string sql = #34;select count(userid) from users where username=@userName and pwd=@pwd";
SqlCommand command = new SqlCommand(sql, conn);
command.Parameters.AddRange(paras);//在ExecuteScalar()执行前即可。
int result = (int)command.ExecuteScalar();
if (result > 0)
Console.WriteLine("登陆成功");
else
Console.WriteLine("登陆失败");
}可以使用参数化处理,防止SQL注入,这个办法是可行的。
| 留言与评论(共有 0 条评论) “” |