1、一般的系统都默认有admin账号,如果我能获取到admin的密码就可以,登录后搞破坏。
2、第一步:新建一个账号 admin'#123,就会在数据库增加一条记录
特别说明,账号中包含引号在英语中是有效的,比如:NBA的 Shaq O'neal
3、第二部:使用admin'#123账号登录,并修改密码,拼接的SQL为:
update user set passwd='123456' where name=''
我们帮账号放进去,变成:
update user set passwd='123456' where name='admin'#123'
本来的SQL是认为admin'#123是一个整体,但是替换后,单引号闭合,绕过了原本的SQL语义
修改admin账号的密码,就可以使用 admin/123456登录
4、SQL注入的主要因素是改变SQL语义,绕过正常的逻辑检查,那我们继续追问,而这个又因为SQL是描述性语言,我们使用的编程是过程式语言。
SQL只要告诉想要什么就可以,而C++等编程语言需要自己实现做么做
比如这个逻辑,查找重名的员工名称
select name from staff group by name having count(name) > 1;
5、这个很好理解,比方说有个员工集合,找出年龄大于20岁的
SQL一个语句就可以,而编程语言需要遍历集合,判断,然后保存结果
6、事情不是绝对的,随着语言的发展,二者会相互交叉。
高级语言现在都有SQL的倾向,比方说C#,Java等,结合lambda表达式
List<People> data = list.stream().filter(a -> a.getAge().greater(20)).collect(Collectors.toList());
有人也把这个叫做语法糖
而SQL语言也有这种需求,就是逐个记录进行业务逻辑处理,这就是游标
相关文章
- 01-19全球范围内87% 的组织遭受 DNS 攻击,确保 DNS安全刻不容缓
- 01-19关于防止sql注入的几个知识点
- 01-19使用Ninject进行DI(依赖注入)
- 01-19Spring 依赖注入的两种实现方式
- 01-19报告称:你的智能家居设备每周可能遭受10000次黑客攻击
- 01-19为什么使用依赖注入和控制反转
- 01-19bzoj5104 Fib数列(BSGS+二次剩余)
- 01-19BZOJ5104 Fib数列 二次剩余、BSGS
- 01-19vue—依赖注入
- 01-19第二次十天冲刺 第四天