mysql sql语句 参数化_C#参数化执行SQL语句,防止破绽攻击本文以MySql为例【20151108非查询操作】_mysql...

C#参数化执行SQL语句,防止漏洞攻击本文以mysql为例【20151108非查询操作】

为什么要参数化执行SQL语句呢?

一个作用就是可以防止用户注入漏洞。

简单举个列子吧。

比如账号密码登入,如果不用参数,

写的简单点吧,就写从数据库查找到id和pw与用户输入一样的数据吧

sql:select id,pw where id='inputID' and pw='inputPW';

一般情况没什么问题,但如果用户输入的id或PW带 ‘ ,这是可能就会出现漏洞,bug了

比如用户输入的id是: 1‘ or ’1‘=‘1

这是sql语句执行的是:select id,pw where id='1‘ or ’1‘=‘1 ‘ and pw='inputPW';

那数据库里的所有账号密码都符合这个条件了。

简而言之,用户可以通过 ' 来改变你SQL的执行。

参数化就可以避免这个问题了。

/************************非查询操作*****************************************/ //今天太晚了,先写个非查询操作的,明天在写查询操作的。 /****函数*****/ /// ///增删改数据,返回影响行数,没有则返回-1/// /// sql语句 /// 参数 /// 返回影响行数 static string connStr ="server=IP;User Id=账号名;password=密码;Database=表名";public static int ExecuteNonQuery(string sql, paramsMySqlParameter[] ps) {using (MySqlConnection conn = newMySqlConnection(connStr)) {using (MySqlCommand cmd = newMySqlCommand(sql, conn)) { cmd.Parameters.AddRange(ps); conn.Open();return cmd.ExecuteNonQuery();//返回受影响行数 } } }/****应用举例****/ public voidInsertData() {int cid=1,aid=2;string name="hha";string sql = "insert into tb_compart (compartID,compartName,areaID)values(@compartID,@compartName,@areaID);"; MySqlParameter[] ps={ new MySqlParameter("@compartID",(object)cid),new MySqlParameter("@compartName",name),new MySqlParameter ("@areaID",(object)aid)};int r = Mysql.MySQLHelper.ExecuteNonQuery(sql, ps);//r得值就是受影响的行数,执行失败r=-1; } }

欢迎大家阅读《C#参数化执行SQL语句,防止破绽攻击本文以MySql为例【20151108非查询操作】_mysql》,跪求各位点评,by 搞代码

e7ce419cf2d6ad34d01da2ceb8829eed.png

微信 赏一包辣条吧~

023a57327877fb4402bcc76911ec18ea.png

支付宝 赏一听可乐吧~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值