四时宝库

程序员的知识宝库

ADO.Net-参数化SQL语句 150(sql参数化为什么能防止注入)

上节说过通过字符串拼接的SQL参数语句很容易被注入攻击,防范参数注入攻击的方法:就是不使用字符串的SQL语句拼接而是通过参数化对SQL语句进行赋值

在MSSQL中SQL语句只支持@开头标记的命名参数,还可以以@开头声明变量;其他的数据库系统使用自己的标记,程序中不同数据库的SQL语句对参数的写法可能不同

参数化SQL语句中参数使用SqlParameter类的方法进行赋值,以下为其是赋值的一种方式

将之前字符串拼接的SQL语句改为参数化的SQL语句,再次验证登陆结果

select count(*) from User1 where uName=@name(参数名) and UPwd=@pwd(参数名)

SQL语句中列名必须与数据库表中列名相同(不区分大小写),对列名赋值的参数名自己随便起(也可以与列名一样),但是为参数赋值时,sp1中参数名必须与SQL语句中对应的参数名一致,两个参数名不能相同,学过参数化SQL语句以后SQL语句都使用这种语句防止注入漏洞攻击

通过数据库中的事件探查器查看执行的SQL语句,参数化的SQL语句在SQLServer内部就不再是简单的字符串替换而是用添加的值进行数据比较

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接