你的字段xm(char,20)的数据类型最好是VARCHAR,或者NVARCHAR类型的,如果是char类型的话,如果用户的数据不够20个字符的话,系统会自动在后面加空格的。所以用户输入的数据和你数据库中的数据就不一致了。你或者把数据类型改为varchar,或者判断的时候用Rtrim函数对数据库中的数据进行去掉右边空格的处理

解决方案 »

  1.   

    select * from t_xm where xm='"+xm.Text+"'";
    改为select * from t_xm where xm=RTrim('"+xm.Text+"')";而且你的这种写法很容易被黑客跳过你的监测
    如果黑客输入  ' OR 1=1 OR '1'='  的话
    你拼出的SQL语句就会变为
    select * from t_xm where xm='' OR 1=1 OR '1'=''
    所以最好用存储过程进行判断,用户名和密码作为参数传入,这样上面的输入就会引起错误。
    如果我有说的不对,清高手指点一二  :)
      

  2.   

    首先对sniper81表示衷心的感谢!测试之后发现IE缓存捣了鬼:(  我把数据库中的xm字段改过了为varchar,已经可以了,不过一个新的问题出来了,我测试时首先用非法的姓名试过后(textbox的AutoPostBack="true")再用输入正确的姓名时页面刷新后任提示:非法用户??
    再次谢谢sniper81的安全建议,我注册时用的是存储过程,这个姓名判断是附加的,注册信息表和姓名表都是不同的:)
      

  3.   

    还有一个问题:我怎么给sniper81结分啊?
      

  4.   

    用存储过程防止SQL注入式攻击
    http://www.ttd168.com/itbook/it.asp?id=48
      

  5.   

    http://tech.ccidnet.com/pub/article/c1105_a62341_p1.html