分类: Python/Ruby
2011-09-06 15:23:47
登陆表单:
//验证用户名,密码是否存在或正确
看似没什么问题,假如用户在登录框填写:
admin , 'or' 1=1,那么post提交之后。sql语句却成了这样:
select * from user_table where username='xxxx' AND passwd='1' or '1=1'
it's crazy,不是吗?逻辑or 1=1成立了。就这样通过了验证获取了权限!
这只是简单一例,如何避免?
1. 登录界面用js禁止掉or 1=1这样的密码。
2.mysql_real_escape_string()转义掉特殊字符。
3.转变编程习惯,先select 出登录用户的密码,然后把post提交的密码和这个比较验证。
4.把post的密码用md5加密然后比较。