广州专业的免费建站常州建设公司网站
2026/1/16 10:57:21 网站建设 项目流程
广州专业的免费建站,常州建设公司网站,旅游必去的10个地方,海南百度推广中心【Web第三周】『12.9-12.14』 初步了解数据库#xff08;MySQL#xff09;初步了解sql注入漏洞练习sql语句搭建sql靶场 初步了解数据库#xff08;MySQL#xff09; 一、MySQL 基础认知 1. 什么是 MySQL#xff1f; 一款开源的关系型数据库管理系统#xff08;RDBMSMySQL初步了解sql注入漏洞练习sql语句搭建sql靶场初步了解数据库MySQL一、MySQL 基础认知1. 什么是 MySQL一款开源的关系型数据库管理系统RDBMS基于客户端 - 服务器架构核心特点轻量、高效、跨平台、支持多用户并发访问应用场景网站后台数据存储如电商订单、用户信息、小型应用数据管理等2. 核心概念术语解释示例数据库DB存储数据的容器逻辑上独立的数据集school_db学校数据库表Table数据库中数据的结构化存储单元按行和列组织student学生表行Row表中的一条具体数据记录一条学生信息ID、姓名等列Column表中的一个字段定义数据类型name姓名列字符串类型主键PK唯一标识表中每行数据的列不可重复student_id学生 IDSQL操作数据库的标准语言结构化查询语言SELECT * FROM student二、MySQL 环境搭建简版1. 安装步骤下载官网MySQL Downloads选择对应系统版本Windows/Mac/Linux安装Windows双击安装包选择「Typical」模式一路下一步记住 root 密码Mac使用 dmg 镜像安装或通过 Homebrew 命令 brew install mysql验证打开终端 / 命令行输入 mysql -u root -p输入密码登录成功则安装完成2. 常用工具命令行客户端MySQL 自带适合快速操作图形化工具Navicat、SQLyog、MySQL Workbench免费适合可视化管理数据库三、核心 SQL 操作CRUD1. 数据库操作-- 1. 创建数据库指定字符集utf8mb4支持emojiCREATE DATABASE school_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;-- 2. 查看所有数据库SHOW DATABASES;-- 3. 使用数据库切换到目标库USE school_db;-- 4. 删除数据库谨慎不可逆DROP DATABASE school_db;2. 表操作创建 / 查看 / 修改 / 删除-- 1. 创建表学生表示例CREATE TABLE student ( student_id INT PRIMARY KEY AUTO_INCREMENT, -- 主键自增 name VARCHAR(50) NOT NULL, -- 姓名非空 age INT DEFAULT 0, -- 年龄默认值0 gender ENUM(男,女,未知) DEFAULT 未知, -- 性别枚举类型 create_time DATETIME DEFAULT CURRENT_TIMESTAMP -- 创建时间默认当前时间);-- 2. 查看表结构DESCRIBE student; -- 或 DESC student;-- 3. 查看所有表SHOW TABLES;-- 4. 修改表添加列ALTER TABLE student ADD COLUMN phone VARCHAR(20);-- 5. 删除表谨慎DROP TABLE student;3. 数据操作增删改查1新增数据INSERT-- 方式1指定列插入INSERT INTO student (name, age, gender) VALUES (张三, 18, 男);-- 方式2插入多条数据INSERT INTO student (name, age, gender) VALUES (李四, 19, 女), (王五, 20, 男);-- 方式3全列插入需按表结构顺序INSERT INTO student VALUES (NULL, 赵六, 21, 未知, DEFAULT); -- 主键自增填NULL2查询数据SELECT-- 1. 查询所有数据SELECT * FROM student;-- 2. 查询指定列SELECT name, age, gender FROM student;-- 3. 条件查询WHERE子句SELECT * FROM student WHERE age 18; -- 年龄大于18SELECT * FROM student WHERE gender 女 AND age 女且年龄≤20-- 4. 排序查询ORDER BYASC升序/Desc降序SELECT * FROM student ORDER BY age DESC; -- 按年龄降序-- 5. 限制查询条数LIMITSELECT * FROM student LIMIT 2; -- 只查前2条-- 6. 模糊查询LIKESELECT * FROM student WHERE name LIKE 张%; -- 姓名以“张”开头3修改数据UPDATE-- 修改指定数据必须加WHERE否则全表修改UPDATE student SET age 19, phone 13800138000 WHERE name 张三;4删除数据DELETE-- 删除指定数据加WHERE条件DELETE FROM student WHERE student_id 3;-- 删除全表数据保留表结构自增主键不重置DELETE FROM student;-- 快速删除全表清空数据重置自增主键效率更高TRUNCATE TABLE student;四、常用进阶技巧1. 数据类型选型避免浪费空间数据类型用途推荐场景INT整数-21 亿21 亿年龄、ID、数量VARCHAR(n)可变长度字符串姓名、手机号、地址DATETIME日期时间格式YYYY-MM-DD HH:MM:SS创建时间、更新时间ENUM固定枚举值性别、状态如 “启用 / 禁用”2. 注意事项关键字不做表名 / 列名如SELECT、TABLE、USER等字符串和日期类型需用单引号包裹如’张三’、‘2024-01-01’操作前先备份数据DROP/DELETE无 WHERE 条件需格外谨慎中文乱码解决方案创建数据库 / 表时指定utf8mb4字符集初步了解sql注入漏洞一、什么是 SQL 注入1. 核心定义SQL 注入SQL Injection简称 SQLi是最常见的 Web 安全漏洞之一本质是攻击者通过输入恶意 SQL 语句欺骗应用程序执行非预期的数据库操作。核心原因应用程序未对用户输入进行严格过滤 / 转义直接将用户输入拼接到 SQL 语句中执行。2. 类比理解比如之前 MySQL 笔记中的条件查询-- 正常逻辑根据用户输入的用户名查询SELECT * FROM users WHERE username $user_input;若用户输入恶意内容 ’ OR ‘1’1拼接后 SQL 变成SELECT * FROM users WHERE username OR 11;由于 ‘1’1 恒为真将返回全表用户数据造成信息泄露。二、SQL 注入的核心原理1. 漏洞产生的 3 个必要条件用户可控输入攻击者能修改输入内容如登录框、搜索框、URL 参数等输入直接拼接 SQL应用程序未处理用户输入直接嵌入 SQL 语句SQL 语句被执行拼接后的恶意 SQL 语句被数据库执行产生危害。2. 简单注入流程示意图用户输入 → 未过滤处理 → 拼接 SQL 语句 → 数据库执行 → 返回恶意结果恶意内容 如 OR 11--三、SQL 注入的常见类型按注入方式1. 联合查询注入UNION 注入利用 UNION 关键字拼接查询语句获取其他表的数据适用场景目标 SQL 语句返回结果集如搜索、列表查询。示例-- 正常查询搜索文章SELECT title, content FROM articles WHERE keyword $input;-- 恶意输入 UNION SELECT username, password FROM users---- 拼接后执行SELECT title, content FROM articles WHERE keyword UNION SELECT username, password FROM users--;-- 是 SQL 注释符用于忽略后面的语句2. 布尔盲注Boolean Blind攻击者通过输入判断条件如 OR 11、OR 12根据应用程序的返回结果成功 / 失败、显示 / 不显示推测数据库信息适用场景目标 SQL 语句不返回结果集但会根据条件返回不同页面。3. 时间盲注Time Blind利用 SLEEP() 等函数通过观察页面响应时间判断条件是否成立适用场景应用程序对真假条件返回相同页面无明显差异。示例-- 恶意输入 OR SLEEP(5)---- 若条件成立数据库会延迟 5 秒响应以此确认注入点存在4. 报错注入构造恶意输入触发数据库报错从错误信息中提取数据库结构如表名、列名依赖应用程序开启了错误显示生产环境应关闭。四、SQL 注入的危害从轻度到严重信息泄露获取数据库中的用户信息账号密码、手机号、业务数据订单、支付记录数据篡改修改数据库内容如修改密码、篡改订单金额数据删除通过 DROP TABLE、DELETE 语句删除表或数据不可逆权限提升获取数据库管理员root权限甚至控制整个服务器。五、基础防护措施核心原则过滤输入 避免拼接1. 核心防护使用参数化查询PreparedStatement原理将 SQL 语句与用户输入分离用户输入仅作为 “参数值” 传递而非 SQL 语句的一部分示例Java 伪代码// 错误方式直接拼接String sql SELECT * FROM users WHERE username userInput ;// 正确方式参数化查询String sql SELECT * FROM users WHERE username ?; // ? 为占位符PreparedStatement pstmt conn.prepareStatement(sql);pstmt.setString(1, userInput); // 自动过滤转义安全注意所有开发语言PHP、Python、Java均支持参数化查询这是最有效的防护手段。2. 输入过滤与转义对用户输入的特殊字符如 、、;、–进行转义处理示例将单引号 ’ 转义为 ‘’MySQL 中两个单引号表示普通字符局限仅作为辅助防护不能替代参数化查询复杂场景易被绕过。3. 限制数据库权限应用程序连接数据库时使用最小权限账号而非 root例如查询操作仅授予 SELECT 权限禁止 DROP、ALTER 等高危操作。4. 关闭错误显示生产环境中禁用应用程序的 SQL 错误详情显示避免攻击者通过错误信息推测数据库结构替换为自定义错误页面如 “系统繁忙请稍后再试”。5. 避免使用动态 SQL尽量减少拼接 SQL 语句尤其避免根据用户输入动态生成表名、列名如无必要不使用 SELECT $column FROM $table 这类写法。练习sql语句[!note] 笔记下载navicat右键点击安装程序文件 “navicat16.3.5_premium_cs_x64.exe”选择 “以管理员身份运行”等待出现安装程序欢迎界面“欢迎安装 Navicat Premium 16”点击 “下一步”一直继续,直至勾选 “Create a desktop icon”创建桌面图标然后点击 “下一步安装完成出现 “完成 Navicat Premium 16 安装向导” 界面点击 “完成” 即可。注意此时不要着急启动 Navicat Premium 16。找到下载的 “Navicat16.2-16.3bd.zip” 压缩包右键点击选择解压到双击解压文件中的【无限…】打开 Navicat Premium 16 的安装目录将补丁文件中的 “winmm.dll” 拖动或者复制到 Navicat Premium 16 的安装目录中替换原文件如出现需要确认文件替换操作点击确认 。进入 Navicat Premium 16 主界面显示版本为 16.3.5 。点击 “连接” 按钮可选择多种数据库类型如 MySQL、PostgreSQL 等多种数据库 。点击 “MySQL” 后弹出 “新建连接 MySQL” 窗口输入连接名、主机、端口、用户名和密码等信息点击 “确认” 连接数据库打开小皮,将下方语句一一执行完成

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询