[程序员]这是一张只有程序员才能看懂的图片
文章图片
文章图片
文章图片
文章图片
今天是刘小爱自学Java的第67天 。
感谢你的观看 , 谢谢你 。
【[程序员]这是一张只有程序员才能看懂的图片】话不多说 , 开始今天的学习:
在某技术论坛上曾流传过一张图片 。
这张图片只有程序员能看懂 。
其他人看到都是一脸懵逼 , 而程序员看到则是会心一笑 。
图片如下:
这其中就牵扯到数据库里的一个知识点:sql注入
以一个登录案例来说明这个知识点 。
一、登录案例我们用的很多软件 , 都有一个用户名和密码 , 用户的很多数据都是被存在该软件服务器里面的 。
用户登录时需要保证用户名和密码正确才能登录成功 。
好 , 现在我们来模拟这一场景 。
用sql语句创建一个用户信息表 , 然后添加数据 , 这也算是对前几天知识点的一个复习:
当然现实里的用户信息肯定不是我们自己在数据库中创建的 。 这边仅仅只是为了演示方便 。
现在要模拟用户登录的案例 , 业务逻辑如下:
- 用户名是唯一的 。
- 用户登录要保证用户名和密码都要正确 , 缺一不可 。
- 查询数据库中同时满足该用户名和密码的数据数量 。
- 如果数量为1 , 登录成功并提醒用户 。
- 否则登录失败并提示用户检查用户名和密码 。
①获取连接、创建执行语句对象
利用我们昨天封装的jdbc工具类 , 直接获取连接 。
同时创建执行语句对象 。
②编写sql语句并执行
sql语句在Java中是以一个字符串的形式而编写的 。
所以要将其意义完成转换 。
同时因为name和pwd是两个变量 , 要将其拼接起来 。
在Java中写sql语句的时候 , 可以先在数据库中编写好并执行看看有没有问题 。
若是没有问题 , 再将其拼接成对应的Java字符串 。
③处理结果
我们查询的是满足条件的数据数量 , 也就是count(*)
调用getInt(count(*))方法可以得到满足条件的数据数量 , 根据业务逻辑:如果为1 , 登录成功;否则登录失败 。
二、登录测试以及SQL注入好 , 代码编写完成 , 我们做个测试 。
①用户名密码表中存在
所以登录成功 。
②密码1234是不正确的
所以登录失败 。
那么 , 现在问题来了 。
看③中密码1234是不正确的 , 为何登录成功了呢?
猫腻就出现在用户名上 , 这个用户名叫“liuxiaoai'--” 。
将用户名密码带入Java字符串中 , 再转换成sql语句 。
“--”在sql中是注释 , 将后面的语句给注释掉了 。
等于是只要保证前面的用户名正确 , 后面密码是啥都无所谓 , 不写都行 。
所以回到一开始的图片 , 那张车牌号做了类似的事情:
推荐阅读
- 『程序员』装出新高度! 程序员用代码写招租广告只因不想与其它行业人士合租
- 小回归到爱看剧|在我国越来越没市场了?原来这是必然结果,为什么三星手机
- #程序员#?8年经验程序员跳槽,2个月面试腾讯百度京东等70家公司,总结出4个共同点
- 程序员■Java程序员必知:HashMap进行put操作会不会引起死循
- 程序员@同学在加拿大当程序员,对比国内程序员的待遇,差距这么大
- #程序员#腾讯T4:结合我多年工作经验给程序员的几点忠告,别再埋头苦干了
- 沉默不语666|12更具科技感,网友:这是要逆袭了,华为Mate40多个配置曝光,比iPhone
- #苹果#印度正式宣布!苹果组装业务被迫暂停,美科技界:这是在帮中国?
- 智能手机那点事|红米9价格开始松动,这是要加速淘汰4G?,速度有点快
- [外卖员]美团新交通工具四轮车,引骑手争议,外卖员:这是要端掉咱的饭碗