「学习笔记」系统存储过程_参数化处理_防SQL注入

「学习笔记」系统存储过程_参数化处理_防SQL注入当熟悉数据库的人在你的用户名下面输入’ or 1=1或者’ delete users等等一类的吧,怎么办?参数化是什么东

大家好,欢迎来到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

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信