码迷,mamicode.com
首页 > 数据库 > 详细

防止SQL注入的办法

时间:2020-04-25 13:04:03      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:pat   注册验证   init   tab   get   使用   nec   com   val   

1、返回自动增长的ID

insert into mytable output inserted.ID values (‘abc‘,‘cde‘,1)

使用 command对象有executescalar 方法 ,返回ID号

  object autoid = command.executescalar();

2、sqldatareader对象访问索引

  reader.getString(索引)

  reader.getInt32(索引)

3、SQL带参数

原始SQL语句:select count(*) from tbusers where username=‘abc‘ and userpass=‘abc‘
注入后的SQL:select count(*) from tbusers where username=‘abc‘ or 1=1 -- and userpass=‘abc‘

注入SQL后,会绕过注册验证,所以建议使用带参数的sql或者存储过程.

string connstr="Data source=.;Initial Catalog=mydb;Integrated Security=true";

using(SqlConnection conn = new SqlConnection(connstr))

{

  //不再拼接SQL语句,使用变量 ,变量以@来标志

  string sql="select * from tbusers where username=@username and userpass=@userpass";

  using(SqlCommand command = new SqlCommand(sql,conn))

  {

    SqlParameter paramUsername = new SqlParameter("@username",SqlDbType.VarChar,50){value=txtUsername.text};
    SqlParameter paramUserpass = new SqlPatameter("@userpass",SqlDbType,VarChar,50){value=txtUserpass.text};
    command.Parameters.add(paramUsername);
    command.Parameters.add(paramUserpass);
    conn.open();
    object result = command.executescalar();
  }

}

多参数的另一种简便写法,使用数组的形式

SqlParam[] params = new SqlParam[]
{
  new SqlParameter("@username",SqlDbType.VarChar,50){value=txtUsername.text},
  new SqlPatameter("@userpass",SqlDbType,VarChar,50){value=txtUserpass.text}
};
command.Parameters.AddRange(params);

另一个简便写法:

command.Parameters.AddWithValues("@username",txtUsername.text);

command.Parameters.AddWithValues("@userpass",txtUserpass.text);

 

防止SQL注入的办法

标签:pat   注册验证   init   tab   get   使用   nec   com   val   

原文地址:https://www.cnblogs.com/boentouch/p/12772188.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!