这样一个语句:
sql="select id,title,adddate from WygkcnZWB_News where title like '%"+key +"%' order by id desc";
其中key的定义如下:
protected string key = string.Empty;key变量接收其他页面传来的QueryString值。我的理解是不管key接收什么字符,哪怕有危险字符,但是数据库只会把它当成文本,去和字段中的值去比较匹配,而不会当成sql语句来执行,这样就不存在sql注入的危险了,上面的语句就不用写成
sql="select id,title,adddate from WygkcnZWB_News where title like '%@key%' order by id desc";这样的形式了,不知道我理解的对不对。

解决方案 »

  1.   

    sql="select id,title,adddate from WygkcnZWB_News where title like '%"+key +"%' order by id desc";不适用参数肯定会有sql注入,使用数据库参数可以避免,你的理解有问题
      

  2.   

    sql="select id,title,adddate from WygkcnZWB_News where title like '%@key%' order by id desc"参数化可以避免的
      

  3.   

    理解的不对,楼主这样写是会被注入的,应该用参数化写法,或者对key的值进行合法性验证。
      

  4.   

    楼主你这样写太容易注入了哟,sql防注入最忌讳的就是像你这种直接拼接的语句,就如你先在的这个语句,要是改成了select id,title,adddate from WygkcnZWB_News where title like '%' or delete from table  --%' order by id desc 人家不就两三下把你数据库搞瘫痪了,建议楼主以后不要用什么拼接的sql语句,这个习惯不好!
      

  5.   

    绝对不允许用用户输入的字符串拼接sql语句
      

  6.   

    给你个最简单的注入例子.如果入侵者已经大致了解了你是拼串字符串的话,他可以传入如下条件获取所有记录:
    sql=
    "
    select id,title,adddate from WygkcnZWB_News where title like 
    '%"+ "1%' or 1=1 -- " +"%' 
    order by id desc
    ";如果你的连接字符串是可写的:
    删除表:
    sql=
    "
    select id,title,adddate from WygkcnZWB_News where title like 
    '% "+ "1%' Go drop table WygkcnZWB_News -- " +"%' 
    order by id desc
    ";如果你的链接字符串使用帐号是SA的权限....
    那你的数据库有完了...以上例子只是示范,不一定能运行.