学习目标
1了解什么是数据库
2了解什么是数据库操作系统
3了解数据库的crud
4了解基本的数据库攻击手段-sql注入
数据库 是长期存储在计算机内,有组织,可共享的数据集合
dbms(数据库管理系统)就是数据库的专属软件管家,专门帮忙管理数据库里的数据
分为mysql oracle sqlserver三种数据库,通过sql结构化查询还存取,管理关系型数据库的数据
数据库的层次结构每一行叫做一个记录 每一列叫做一个字段列
创建数据库操作
可以看到我的sql语句已经成功运行这句增加数据库的语句的意思为
CREATE DATABASE abc 创建一个数据库名字为abc
CHARACTER SET utf8 将字符串类型设置为utf8类型
在这里引出一个新点什么是utf8类型?
所谓的utf8是字符串格式的一种常见的字符串类型属于万能可用于存储,汉字,字母,符号,在电脑中怎么使用二进制来存储
utf8兼容英文,中文,特殊符号通用性强
而另一种常见的gbk编码只适合国内软件,占用空间小
COLLATE(排库规则) utf8_general_ci
这句数据库的语句意思是用utf8_general_ci(case insensitive)
这个规则的意思是不区分大小写 字母大写小写等同
在数据库abc下创建表users
CREATE TABLE users ( id INT PRIMARY KEY, -- 学号(主键,唯一不重复)
name VARCHAR(50) NOT NULL, -- 学生姓名(NOT NULL: 必须填写,不能留空)
id_card VARCHAR(18) NOT NULL, -- 身份证号,非空(18位固定长度)
phone VARCHAR(11) NOT NULL, -- 手机号,非空(11位固定长度)
address TEXT, -- 地址,长度不固定
password VARCHAR(50) NOT NULL -- 校园网密码(NOT NULL: 必须填写,不能留空
可以很明白
SQL-结构化查询语言
1.数据定义语言(DDL):用于创建和修改数据库对象(如表和索引)的结构,如CREATE、ALTER、DROP等语句。
2.数据操纵语言(DML):用于对数据库中的数据进行新增、修改、删除等操作,如INSERT、UPDATE、DELETE等语句。
3.数据查询语言(DQL):用于对数据进行查询操作,如SELECT语句。
4.数据控制语言(DCL):用于控制用户对数据的访问权限,如GRANT和REVOKE语句
-- 插入数据 INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...);
INSERT INTO users (id, name, id_card, phone, address, password) VALUES (1, '吕洪吉', '210105199901011234', '13800138000', '辽宁省沈阳市和平区', '123456');
-- 修改数据 UPDATE 表名 SET 字段1=新值1, 字段2=新值2, ... [WHERE 条件];
-- 删除数据 DELETE FROM 表名 [WHERE 条件];
后续仅需要一步一步执行即可很简单
-- 查询表中所有数据(*代表所有字段) SELECT * FROM users;
-- 查询指定字段(只查姓名和密码) SELECT name, password FROM users;
-- 单条件查询:查询id=1的用户信息 SELECT * FROM users WHERE id=1;
-- 多条件AND:同时满足id=1 AND name=';老李'的用户 SELECT name, password FROM users WHERE id=1 AND name='老李';
-- 多条件OR:满足id=1 或 id=2的用户 SELECT * FROM users WHERE id=1 OR id=2;
-- 查询名字以“吕”开头的用户(%匹配0个或多个字符) SELECT * FROM users WHERE name LIKE '吕%';
-- 查询名字第二个字是“洪”的用户(_匹配1个字符) SELECT * FROM users WHERE name LIKE '_洪%';
-- 按id升序排序(ASC默认可以省略) SELECT * FROM users ORDER BY id ASC;
-- 按id降序排序(DESC必须写) SELECT * FROM users ORDER BY id DESC;
-- 写法1:只取前2条数据 SELECT * FROM users LIMIT 2;
-- 写法2:分页查询,从第1条(偏移量0)开始,取2条数据 SELECT * FROM users LIMIT 0, 2;
-- 分页示例:第2页,每页2条(偏移量=页码-1 * 每页条数) SELECT * FROM users LIMIT 2, 2;
感兴趣可以敲一下但是我觉得没有必要很简单的东西
sql注入漏洞:所谓的sql注入漏洞就是攻击者通过构造精美的sql语句从而改变后端数据库的结构从而对数据库进行未授权的非法访问漏洞
其根本是:缺乏过滤的直接拼接代码直接将用户输入的$name和$pwd拼接到sql语句中,且未进行任何过滤。这导致攻击者可以输入恶意sql语句指令,从而篡改查询逻辑绕过验证和窃取数据。
万能密码'or'1'='1
-- 正常账号密码登录逻辑 SELECT * FROM users WHERE name='$name' AND password='$pwd';
我们现在在两个输入栏中输入万能密码'or'1'='1就变成了
SELECT * FROM users WHERE name='' OR '1'='1' AND password='' OR '1'='1';
and在逻辑表达式本质中是逻辑与操作||只有将双方的条件全为真时才通过检验
or则是只要有一个为真则就可以通过校验现在我们来对这句sql语句进行拆分
第一步先进行and操作1=1andpassword=''明显不对
第二步剩下的所有or进行合并name=''or假or'1'='1'我们从左往右一步步计算假与真进行或操作为真最终这个逻辑表达式的语句为真则可以进入到数据库查询
逻辑成立实操开始
登陆成功