我不会用正则表达式,在用文本框向表中插入数据时,我这样做:
string sqlStr="inert into 表名 (字段列表) values(@a,@b)";
SqlCommand cmd=new SqlCommand(sqlStr,连接名);
cmd.Parameters.Add("@a",SqlDbType.NVarChar,20,"字段名");
...
cmd.Parameters["@a"].value=变量;
cmd.ExecuteNoQuery();
经过实验,我在数据输入的文本框里输入:
=1;drop table 表名;
结果只是将上述字符串原样存入数据库,没有真的删除表.
但是,我往文本框里粘了一大段代码,则报告"可能含有攻击代码"(类似的话).各位高手,如果我这样做不能防止注入式攻击,烦请给我一段正则表达式的完整代码,因为帮助中大部分只写正则表达式,而在代码中的用法却都不完整.

解决方案 »

  1.   

    你这样已经能阻挡注入攻击了.
    如果想友好点的话,加入TRY,把这类出错自己处理,警告用户或不处理
    正则式在这方面用处不大,重复工作
      

  2.   

    用带参数的SQL语句跟用存储过程有什么区别呢?
      

  3.   

    一般防止注入可以在sqlserver部分解决。程序中考虑好捕获异常就可以。
      

  4.   

    你这样已经能阻挡注入攻击了.
    如果想友好点的话,加入TRY,把这类出错自己处理,警告用户或不处理
      

  5.   

    用parameter已经可以防止注入攻击了存储过程可以避免大的语句的传输,而只需要传输存储过程名和参数足矣!
      

  6.   

    对于一个SQL语句,最好是判断一下, 是不是有一些破坏的语句。
    建议我用存储过程。