如果程序中sql语句不使用参数。
直接拼接,但我能确保sql语句中做为查询的条件是不会包含空格。
比如 Select id ,name,add From users where name = '';其中的name是不能保护空格的。
我在拼接sql语句的时候,
得到name的字符串进行处理把所有空格都去掉,这样能不能防止sql注入?
如何输入的是: 
1' or 1=1 or '1'='1
处理之后变成
1'or1=1or'1'='1
貌似不会被注入吧

解决方案 »

  1.   

    去掉空格 只是防止注入的一个开始。
    如果这样呢?
    Select id ,name,add From users where name = '';drop table users;drop database XXX;--'
    不就杯具了,参数是比较可靠且简便的防注入,建议使用。
      

  2.   

    前端要预处理一些特殊字符,如--等,然后使用非动态sql。可以考虑使用存储过程以参数方式传入。另外可以考虑先加密再传入,这样也能减少注入的风险。
      

  3.   

    ';drop table users;drop database XXX;--
    去掉空格能执行?
    ';droptableusers;dropdatabaseXXX;--
      

  4.   

    这个是肯定的,我只是在假如。
    例如C#里
    string sql ="Select id ,name,add From users where name = '{0}';"
    db.GetData(string.Formart(sql,txtName.Text.Replace(" ", "")));这样会造成注入吗?
      

  5.   

    我的前提条件就是确保sql语句中做为查询的条件是不会包含空格。
    也就是正常的这些做为条件数据是不含有空格的
      

  6.   

    但是这样,就拿你上面那个例子,除非你业务上规定了不能这样,不然我注册name的时候使用:发 粪 涂 墙,这一步如果你通过了,那么下次我登录的时候你就不能去掉空格,所以业务方面你也要考虑一下
      

  7.   

    拼接也没有关系啊;
    提交数据前你过滤掉诸如   Drop、1=1、单引号(此类特殊标点符号)、……之类的文字不就OK了……
      

  8.   

    防注入的知识我看了很多,但是注入的攻击的文章确很少见,
    我在做项目的时候,发现只要查询的表的某些列不允许有空格做条件查询时(比如产品编号、单号等等),
    只要在拼接成查询条件时,我只需把空格去掉就能防止我目前知道的SQL注入方法。
    但我不知道是不是还有其它注入方法