我觉得.net中带参数的sql语句的书写是不是可以简略一点:
比如:
string sqlstr="select * from table1 where userid=@userid"
....
然后还要:
cmd.parameters.Add("@userid",userID);
...
这样是不是很麻烦
我sqlstr里是不是可以直接使用变量呢?
比如:
string sqlstr="select * from table1 where userid="+edit.text;
可以吗?

解决方案 »

  1.   

    带参数的sql语句可以防止SQL注册
    没参数可以注册攻击的.
      

  2.   

    我觉得.net中带参数的sql语句的书写是不是可以简略一点:
    比如:
    string sqlstr="select * from table1 where userid=@userid"
    ....
    然后还要:
    cmd.parameters.Add("@userid",userID);
    ...
    这样是不是很麻烦
    我sqlstr里是不是可以直接使用变量呢?
    比如:
    string sqlstr="select * from table1 where userid="+edit.text;
    可以的,只是你的语法错了.这样写,试试看吧
    select * from table1 where userid='"+变量或文本框的值+"'
    一对单引号里是双引号,最里面是一对++号.引号都是英文的.
      

  3.   

    不带参数可以的,一样运行,但坏人可以SQL注册,攻击你的数据库.
    带参数的就不能注册攻击了.不能通过SQL语句的方式攻击你的网站了.
      

  4.   

    使用参数化SQL语句或者存储过程是防止SQL注入的一个有效方法,但不是唯一。您仍然可以使用字符串拼接的方法给成SQL语句交给CMD执行(这样要简单一些),考虑到安全隐患,您需要手动验证传入参数的有效性(比如数据类型、数据长度等)。其实一段好的程序,即使使用存储过程,参数也需要校验参数的合法性。
      

  5.   

    真的谢谢大家,我还真不知道sql攻击
      

  6.   

    把sql写成字符串容易被sql注入攻击,
    但是参数化的sql可以防止sql注入攻击我不能理解,哪位大哥能不能解释下?
      

  7.   

    就是在URL中输入SQL语句攻击你的数据库。给你举个例子:
    很多网站都会用到类似的URL:http://www.yoursite.com/shownews.aspx?id=333
    后台一般会用到类似的语句:string strSql = "select id, title from news where id = " + Request.QueryString["id"]
    然后执行这个SQL语句。
    看似没有什么问题,但如果遇到一个恶意用户,在URL输入下面的URL(举例):
    http://www.yoursite.com/shownews.aspx?id=333%20drop%table%20news--
    如果得逞,你的news表就会被删除。
    类推,如果没有对这些非法数据进行处理,就会给用户提供了运行各种SQL语句的可能,比如获取系统帐户权限窃取他人密码等等,只要你的帐号有足够的权限。
    这里我说得很浅,网上应该有很多相关的文章。
      

  8.   

    带参数的sql语句可以防止SQL注册
    没参数可以注册攻击的.