16进制的代码? 
您是指这样的吗?CAST(0x7400610062006C0065003100 AS NVARCHAR(4000))
但是这个会被包含在'   '里,不予执行啊

解决方案 »

  1.   

    keyword.Replace("'", "")
    你要把所有的关键字过滤掉也可以
      

  2.   

    http://security.stackexchange.com/questions/3611/sql-injection-but-why-isnt-escape-quotes-safe-anymore
      

  3.   

    参数化sql可以避免注入
    sql = "select Id,title from Texts where Title like '%'+@Keyword+'%'";
    然后改写你的GetTable()方法,
    使之能够传入SqlParameter参数
      

  4.   


    连字符串内容中包含正常的单引号进行搜索都进行不了了,还讨论什么注入啊?!如果我们一个程序员会用sql语句,最起码地他会写合乎t-sql语法且结果正确的查询语句。
      

  5.   

    不应该把合法的单引号排除在外。比如我要搜  it's a dog .这样你不让搜是没道理的。
    最保险的办法是用参数,如果你是用like查,可以这样写
    sql = "select Id,title from Texts where Title like '%' + @Keyword + '%'";
    DataTable dt = DB.GetTable(sql, new SqlParameter("Keyword", "it's a dog");
    不过按你的说法,你们公司存在大量的这种拼接,GetTable有没有带参数的重载还是个问题。
      

  6.   


    “系统不需要进行这个用例的必要”?只有根本检查不出来任何BUG的用例才没有必要写。哪有说可以检出问题的用例是”没必要的“呢?很难说你们的编程(或者小一点范围,你和你的领导)是基于实践的。比如说你说“因为没有单引号,所以没有必要写针对它的测试”,那么你有什么必要写出这个 Replace("'","'') 代码来呢?这类自相矛盾、总也在纠结是非的事情你们干了很多次吧?
      

  7.   

    说白了就是,Replace("'","''") 是出自 SQL Server 语法手册上的规范代码,就应该这样写且不会出任何纰漏。而你非要改成了 Replace("'",""),这不是多此一举嘛。
      

  8.   

    放注入就是要参数化查询条件,避免拼接sql。