|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
很多网站把密码放到数据库中,在登陆验证中用以下sql,(以asp为例) sql="select * from user where username=\\\'"&username&"\\\'and pass=\\\'"& pass&\\\'" 此时,您只要根据sql构造一个特别的用户名和密码,如:ben\\\' or \\\'1\\\'=\\\'1 hehe ...是不是进去了?? ----------------------------------------------------------------------- 解释: 上述的SQL语句是ASP程序的if判定的一部分,假如该语句返回为真,则密码验证通过。 输入 ben\\\' or \\\'1\\\'=\\\'1这样的用户名之后,其验证的语句将执行为: sql="select * from user where username=\\\'"& ben\\\' or \\\'1\\\'=\\\'1 &"\\\'and pass=\\\'"& pass&\\\'" 因为1=1为真,由于 or 逻辑运算符的作用,这个语句将返回为真。 所以验证通过。 解决方案 ASP程序员应该用更严密的判定语句来防止这个安全问题 下面是发现者提出的解决方案: 比较好的应该按照以下方法: 1、处理输入字符, 2、处理‘,|等字符 3、select * from user where user=’ " & User & "\\\' " 4、假如返回不为假,则取密码 pass=rs("passwd") 5、判定:if pass=password 6、得出结论。 返回类别: 教程 上一教程: 大灰狼的ASP工具箱??用ASP读INI配置文件的函数 下一教程: ASP 3.0高级编程(三十九) 您可以阅读与"ASP程序密码验证问题 (MS,缺陷)"相关的教程: · ASP进阶教程Ⅶ:留言簿设置密码验证 · ASP与数据库运用:密码验证 · ASP如何更好的解决用户验证问题 · 关于ASP程序中日期型数据的格式问题 · 开发连接远程SQL Server 的ASP程序应注重的问题 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |