我看到书上一些介绍用户登录的界面时,大部分都有一个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做的。
小弟初学制作网站知识,所以问题比较多,请大家多多指教,帮忙解决上面的疑问!
而且他们做登录时不直接用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做的。
小弟初学制作网站知识,所以问题比较多,请大家多多指教,帮忙解决上面的疑问!
解决方案 »
- sql代码如何换行?
- 自动生成的web.config内容太多,而且有些都不知道是什么用的,有没有精简版的呀?
- 请教个更新小问题
- ASP.NET的GRIDVIEW 配置对象数据源时,找不到业务对象
- 在网页上显示地图控件,哪位大哥能够提供一下
- 关于.net2005的GridView控件高亮显示数据
- 散分...不知道是2.0的Bug,还是VS2005的Bug...
- 翻动100万级的数据 —— 后续篇
- 问个很菜的问题,怎么在样式表里定义元素<A>使得链接没有下划线。。。。在线等
- .NET中如何取得注册表中的键值?
- 弹出对话框的基本问题(C#) 急~~~~~~~
- 为什么提示这样一个错误:类型“dropdownlist”控件“search_dep_id”必须放在具有“runat=server”的窗体标记内
-----------------------
session是独有的。保存在服务器上。
你的比那个and好些.
使用session
=======================================================================
最简单的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注入,最简单的办法是使用参数或存储过程