大家好,欢迎来到IT知识分享网。
当熟悉数据库的人在你的用户名下面输入
' 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注入,这个办法是可行的。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/47750.html