一个用户注册的问题,希望有人帮帮我,谢了

therainman 2004-08-29 01:50:41
功能是:检验用户输入的姓名是否在数据库里存在,如果存在就让注册,否则不让
代码:
void Check_name(Object O,EventArgs E)
{
conn.Open();
string sql="select * from t_xm where xm='"+xm.Text+"'";
SqlCommand cmd=new SqlCommand(sql,conn);
SqlDataReader dr;
dr=cmd.ExecuteReader();
if(dr.Read())
{
conn.Close();
}
else
{
JS.Text="非法注册用户!";
dr.Close();
xm.Text="";
MyButton.Visible=false;
conn.Close();
}
}
问题:估计是输入姓名时自动加了空格,所以不管输入如何都报:非法用户.数据库中字段xm(char,20)中明明保存了一些测试姓名的,我试过Trim(xm.Text)编译时报错:名称“Trim”在类或命名空间“ASP.append_aspx”中不存在,这到底是怎么回事啊,怎么解决呢?在线等答案
...全文
133 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxcc 2004-08-29
  • 打赏
  • 举报
回复
http://tech.ccidnet.com/pub/article/c1105_a62341_p1.html
lxcc 2004-08-29
  • 打赏
  • 举报
回复
用存储过程防止SQL注入式攻击
http://www.ttd168.com/itbook/it.asp?id=48
therainman 2004-08-29
  • 打赏
  • 举报
回复
还有一个问题:我怎么给sniper81结分啊?
therainman 2004-08-29
  • 打赏
  • 举报
回复
首先对sniper81表示衷心的感谢!测试之后发现IE缓存捣了鬼:( 我把数据库中的xm字段改过了为varchar,已经可以了,不过一个新的问题出来了,我测试时首先用非法的姓名试过后(textbox的AutoPostBack="true")再用输入正确的姓名时页面刷新后任提示:非法用户??
再次谢谢sniper81的安全建议,我注册时用的是存储过程,这个姓名判断是附加的,注册信息表和姓名表都是不同的:)
yiyefuping 2004-08-29
  • 打赏
  • 举报
回复
零度说的好啊,我也遇到这样的情况过
sniper81 2004-08-29
  • 打赏
  • 举报
回复
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'=''
所以最好用存储过程进行判断,用户名和密码作为参数传入,这样上面的输入就会引起错误。
如果我有说的不对,清高手指点一二 :)
sniper81 2004-08-29
  • 打赏
  • 举报
回复
你的字段xm(char,20)的数据类型最好是VARCHAR,或者NVARCHAR类型的,如果是char类型的话,如果用户的数据不够20个字符的话,系统会自动在后面加空格的。所以用户输入的数据和你数据库中的数据就不一致了。你或者把数据类型改为varchar,或者判断的时候用Rtrim函数对数据库中的数据进行去掉右边空格的处理

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧