我看到书上一些介绍用户登录的界面时,大部分都有一个UserDB类,但是怎么找这个类也找不到。
    而且他们做登录时不直接用SQL语句来获取输入框中的值,也就是说并不是如下:  
   select * from login where username= Textbox.text(不知道对不对,大概如此了)而是用了一些参数 如:
   select * from login where username=@name
    然后在sqlcommand中用了个参数来传递输入框中的值:如:sqlcommand.parameter.add("@name",......);
sqlcommand.parameter("@name").value=textbox.text;
这样来做的,为了防止sql注入式攻击。
    我所想不明白的是:他们是把用户名和密码一起在数据库中查出来的,那样的语句是:
select * from login where username=Textbox1.text and password==Textbox.text
    我想这样的话攻击是因为条件语句里有个and, 如果我们通过提取用户所输入的用户名来查询密码,然后把查出来的密码和用户所输入的密码来比较,这样的话可以避免攻击吗?
    还有就是,如果能正确登录,那么登录之后的页面是不是要跟登录叶面有一定的关系呢?肯定得有吧,但是那个网页的url应该怎样表示呢?用户可能只把登录后的页面的url打出来就能登录吗?
    就是说:网易上登录邮箱时,在网页url后面加了jsp?username=...这样的话,如果把用户名打上能不能直接登录阿?当然网易是jsp做的。
    小弟初学制作网站知识,所以问题比较多,请大家多多指教,帮忙解决上面的疑问!

解决方案 »

  1.   

    就是说:网易上登录邮箱时,在网页url后面加了jsp?username=...这样的话,如果把用户名打上能不能直接登录阿?当然网易是jsp做的。
    -----------------------
    session是独有的。保存在服务器上。
      

  2.   

    我想这样的话攻击是因为条件语句里有个and, 如果我们通过提取用户所输入的用户名来查询密码,然后把查出来的密码和用户所输入的密码来比较,这样的话可以避免攻击吗?
    你的比那个and好些.
    使用session
      

  3.   

    我想这样的话攻击是因为条件语句里有个and, 如果我们通过提取用户所输入的用户名来查询密码,然后把查出来的密码和用户所输入的密码来比较,这样的话可以避免攻击吗?
    =======================================================================
    最简单的SQL注入如果界面上有两个文本框是用来登录的,你的SQL语句可能如下string strSQL = "select * from [Users] where usename = '" + TextBox1.Text.Trim() + "' and password = '" + TextBox2.Text.Trim() + "'";假设你的用户名和密码是"aa","aa" (双引号内)
    则出来的SQL语句如下
    select * from [Users] where username = 'aa' and password = 'aa'但是如果用户的输入如下 用户名 "XX ' or 1 = 1 -- "密码不填
    则出来的SQL语句如下
    select * from [Users] where username = 'XX ' or 1 = 1 -- ' and password = 'aa'由于条件中多了1 = 1,则无论如何都会登陆成功了为了避免SQL注入,最简单的办法是使用参数或存储过程