关于登录验证的SQL避免浅见
2013-06-26 11:57
211 查看
网上看到很多关于防止登录SQL注入的方法, 搜到的很多大概是都是过滤和字符转换.
而过滤和转换是因为攻击者的输入中会包含一些关键词,诸如:select, delete,or, ' ,drop等等。
用这两种方式来解决登录注入的原因是,他们的登录的时候,用户名和密码的验证语句大概都是这样的:
select * from adminwhere username='XXX' and password='YYY'的语句,若在正式运行此句之前,如果没有进行必要的字符过滤,则很容易实施SQL注入。如在用户名文本框内输入:abc’ or1=1-- 在密码框内输入:123 则SQL语句变成:select * from adminwhere username='abc’ or 1=1 and password='123’不管用户输入任何用户名与密码,此语句永远都能正确执行,用户轻易骗过系统,获取合法身份。
这样子的话, 确实可以通过构造一些特殊的输入,改变sql语句的结构从而导达到想要的结果。
刚刚开始, 自己的验证命令并不是这样的,所以有次朋友说要给我测试下登录的sql注入安全,结果没被攻击成功,那时候并不懂sql注入的原理,毕竟还是菜鸟。我的sql验证语句是这样的:select password from admin where username='XXX'如果查得到password的话,就用此password和用户输入的password进行比较,相等的话则登录成功,否则显示密码错误。如果查不到password的话,说明用户不存在,显示提示用户名不存在。
这样一来,即使攻击者构造了诸如:xxx' or 1=1 的输入,是语句变成:select password from admin where username='xxx' or 1=1虽然语句的where条件还是成立,执行返回的结果是true。但是下一步的比较:从数据库的password和用户输入的password就不能成立了,因为没有查到,所以这就防止了sql注入欺骗。
后来跟另一个朋友讨论了,他也觉得应该要跟我一样的写法,并且他也都是这样做的,所以可能网上的很多大神都是这么干的,只是没有写出来而已,今天本菜鸟就瞎写一下,当作是第一篇博客!
而过滤和转换是因为攻击者的输入中会包含一些关键词,诸如:select, delete,or, ' ,drop等等。
用这两种方式来解决登录注入的原因是,他们的登录的时候,用户名和密码的验证语句大概都是这样的:
select * from adminwhere username='XXX' and password='YYY'的语句,若在正式运行此句之前,如果没有进行必要的字符过滤,则很容易实施SQL注入。如在用户名文本框内输入:abc’ or1=1-- 在密码框内输入:123 则SQL语句变成:select * from adminwhere username='abc’ or 1=1 and password='123’不管用户输入任何用户名与密码,此语句永远都能正确执行,用户轻易骗过系统,获取合法身份。
这样子的话, 确实可以通过构造一些特殊的输入,改变sql语句的结构从而导达到想要的结果。
刚刚开始, 自己的验证命令并不是这样的,所以有次朋友说要给我测试下登录的sql注入安全,结果没被攻击成功,那时候并不懂sql注入的原理,毕竟还是菜鸟。我的sql验证语句是这样的:select password from admin where username='XXX'如果查得到password的话,就用此password和用户输入的password进行比较,相等的话则登录成功,否则显示密码错误。如果查不到password的话,说明用户不存在,显示提示用户名不存在。
这样一来,即使攻击者构造了诸如:xxx' or 1=1 的输入,是语句变成:select password from admin where username='xxx' or 1=1虽然语句的where条件还是成立,执行返回的结果是true。但是下一步的比较:从数据库的password和用户输入的password就不能成立了,因为没有查到,所以这就防止了sql注入欺骗。
后来跟另一个朋友讨论了,他也觉得应该要跟我一样的写法,并且他也都是这样做的,所以可能网上的很多大神都是这么干的,只是没有写出来而已,今天本菜鸟就瞎写一下,当作是第一篇博客!
相关文章推荐
- 关于登录验证的SQL避免浅见
- 启动Sql身份验证模式/Sa登录
- Java web过滤器验证登录(避免未经登录进入主页)
- VC SQL 登录对话框数据库对用户名和密码进行验证代码!
- iOS中关于Cookie验证登录状态
- 关于angularjs的用户登录验证
- 关于CSDN登录提示手机号验证的问题
- 关于安卓登录注册页面构建(包含用户名密码验证+记住密码+再按一次返回退出)
- easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)
- shiro框架---关于用户登录和权限验证功能的实现步骤(六)
- [转]Microsoft SQL Server Management Studio Express 使用SQL验证登录sa
- MyEclipse+JSP+SqlServer登录验证图文教程(含源码)
- 关于thinkphp避免登录出现循环重定向问题
- c#连接sql 2014登录界面及密码验证
- Java web过滤器验证登录(避免未经登录进入主页)
- 关于Struts2和ajax的登录验证问题
- Java web过滤器验证登录(避免未经登录进入主页)
- 关于软件防止破解的思考,如何避免简单的跳转指令型的验证方法,如何设置更复杂的验证方式。
- shiro(四) 关于session:验证登录时候如何处理session以及其他
- 关于避免MySQL替换逻辑SQL的坑爹操作详解