博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql注入
阅读量:1824 次
发布时间:2019-04-25

本文共 729 字,大约阅读时间需要 2 分钟。

1、假如有一个系统,需要输入用户名和密码进行登录,那么这个系统的后台肯定有一条sql,这个sql的逻辑是根据用户名和密码去  查询有没有这个用户,如果有,就登录成功,如果没有,就登录失败

2、假如这个sql是这样的:select * from user where username=? and password=?

      ?是变量,就是要输入的用户名和密码

3、预编译:预编译就是在将变量替换成输入的值之前,就编译好这条sql,sql编译之后结构就固定了

4、假如用户真实的用户名和密码分别是(zhangsan,123456)

5、sql注入:这条带变量的sql不进行预编译,那么sql的结构不固定,假如黑客知道zhangsan这个用户名不知道密码,但是他输入 的密码是(123 or 1=1),or这个关键字就改变了这条sql的结构,那么这条带变量的sql替换之后就成了这个样子(select * from user where username=zhangsan and password=123 or 1=1),那么即使密码输入错误,这条sql仍能查出结果(因为最后的or 1=1能保证一定查出结果,不信去数据库运行看看),黑客恶意登录就成功,这就是sql注入

6、防sql注入:对sql进行预编译,sql一旦结构固定,那么即使sql长这样(select * from user where username=zhangsan and password=123 or 1=1),咱们的数据库只会把密码当成123 or 1=1,这个密码肯定是不对的,那登录肯定失败,预编译就成功防止了sql注入

7、至于如何对sql预编译,各种编程语言(比如java)都有实现

转载地址:http://xjpkf.baihongyu.com/

你可能感兴趣的文章
Android开发岗还不会这些问题,面试建议
查看>>
android开发经典实战!这些年我所经历的所有面试,年薪50W
查看>>
Android开发者该学习哪些东西提高竞争力?系列篇
查看>>
android开发面试题及答案,2021新一波程序员跳槽季,使用指南
查看>>
Android彻底组件化方案实践方法!Android校招面试指南
查看>>
Kubernetes 两步验证 - 使用 Serverless 实现动态准入控制
查看>>
攻防世界 unfinish
查看>>
攻防世界 easy_serialize_php
查看>>
攻防世界 Confusion1
查看>>
攻防世界 comment
查看>>
攻防世界 0ctf-unserialize(piapipia)
查看>>
攻防世界1-4
查看>>
攻防世界 4-8
查看>>
攻防世界 9-12
查看>>
BUUCTF The mystery of ip
查看>>
BUUCTF [De1CTF 2019]SSRF Me
查看>>
BUUCTF [极客大挑战 2019]FinalSQL
查看>>
[BJDCTF 2nd]简单注入
查看>>
buuctf [pasecactf_2019]flask_ssti
查看>>
Buuctf [第三章 web进阶]SSTI 20
查看>>