news 2026/5/30 14:53:07

Web第三周

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Web第三周

本文章写与2025年12月

1.初步了解数据库(MySQL)

MySQL 是目前最流行的开源关系型数据库管理系统(RDBMS)之一,广泛应用于 Web 开发、数据分析、后端服务等场景,以轻量、高效、易用、免费(社区版)为核心特点。下面从核心概念、基础操作、核心特性三个维度,帮你快速入门。

(1)关系型数据库的核心逻辑

MySQL 基于「关系模型」组织数据,简单理解:

  • 数据库(Database):存放数据的「仓库」,一个 MySQL 服务可以创建多个数据库(比如电商系统的ecommerce库、用户系统的user_center库)。
  • 表(Table):数据库的「基本存储单元」,类似 Excel 表格,每行是一条数据,每列是一个字段(比如user表包含idnameage列)。
  • 行(Row)/ 记录(Record):表中的一条数据(比如id=1, name=张三, age=20)。
  • 列(Column)/ 字段(Field):表的属性(比如age列专门存年龄,有数据类型限制,比如整数)。
  • 数据类型:列的「数据规则」,MySQL 常用类型:
    • 数值:INT(整数)、FLOAT/DOUBLE(浮点数)、DECIMAL(高精度小数,如金额);
    • 字符串:VARCHAR(n)(可变长度字符串,如姓名)、CHAR(n)(固定长度,如手机号)、TEXT(长文本,如简介);
    • 日期:DATE(日期,如 2025-12-14)、DATETIME(日期 + 时间,如 2025-12-14 10:00:00);
    • 其他:BOOLEAN(布尔值)、ENUM(枚举,如性别:男 / 女)。
  • 主键(Primary Key, PK):唯一标识表中每行数据的列(比如id列),不能重复、不能为空。
  • 外键(Foreign Key, FK):关联两个表的字段(比如订单表orderuser_id关联用户表userid,保证订单归属有效用户)。
(2)MySQL 的架构(简单版)
  • 客户端:操作 MySQL 的工具(如 Navicat、DBeaver 可视化工具,或命令行mysql客户端);
  • 服务端:MySQL 核心程序,负责接收请求、处理数据、管理存储;
  • 存储层:数据最终存在磁盘文件(如.ibd文件),支持多种存储引擎(最常用InnoDB)。
(3)MySQL 核心特性(为什么用它?)
  1. 开源免费:社区版完全免费,企业版提供商业支持,降低成本;
  2. 跨平台:支持 Windows、Linux、macOS 等主流系统;
  3. 高性能:针对读写场景优化,InnoDB引擎支持事务、行级锁,适合高并发;
  4. 易用性:SQL 语法简单,配套工具丰富(可视化工具、命令行、编程语言驱动);
  5. 扩展性:支持主从复制、分库分表,可应对大数据量、高并发场景;
  6. 生态完善:几乎所有编程语言(Python/Java/PHP/Go)都有成熟的 MySQL 驱动,与框架(Spring Boot、Django)无缝集成。
(4)新手注意事项
  1. 慎用删除 / 修改DROP/DELETE/UPDATE无 WHERE 子句会导致数据全丢,操作前先备份;
  2. 主键必设:每张表建议设置主键(如自增 ID),便于数据定位和关联;
  3. 数据类型匹配:比如手机号用VARCHAR(不是 INT,避免开头 0 丢失),金额用DECIMAL(不是 FLOAT,避免精度丢失);
  4. 规范命名:库 / 表 / 字段用小写,下划线分隔(如user_order),避免关键字(如order需加反引号`order`)。

2.初步了解sql注入漏洞

SQL 注入(SQL Injection,简称 SQLi)是最常见、最危险的 Web 安全漏洞之一,本质是攻击者通过在用户输入中插入恶意 SQL 代码,欺骗数据库执行非预期的操作,最终窃取、篡改甚至删除数据库中的敏感数据,甚至控制整个服务器。

(1)为什么会出现 SQL 注入

SQL 注入的根源是程序未对用户输入做严格校验,直接将用户输入拼接到 SQL 语句中执行。

举个通俗例子:正常业务逻辑中,用户登录时输入「用户名」和「密码」,程序会拼接成如下 SQL 语句查询数据库:

-- 预期的正常 SQL(用户输入:用户名=zhangsan,密码=123456) SELECT * FROM user WHERE username = 'zhangsan' AND password = '123456';

但如果攻击者在用户名输入框中输入:zhangsan' OR '1'='1,拼接后的 SQL 就会变成:

-- 恶意拼接后的 SQL SELECT * FROM user WHERE username = 'zhangsan' OR '1'='1' AND password = '123456';

由于'1'='1'永远为真,这条 SQL 会查询出所有用户数据,攻击者无需正确密码就能登录。

核心问题总结:

  • 程序把「用户可控的输入」直接作为 SQL 语句的一部分;
  • 输入中包含 SQL 语法关键字(如ORANDUNIONDROP等),改变了原 SQL 的执行逻辑。
(2)SQL 注入的危害

从轻度到重度,危害逐级递增:

  1. 数据泄露:窃取用户手机号、密码、银行卡、个人信息等敏感数据;
  2. 数据篡改:修改数据库中的数据(如篡改订单金额、用户等级);
  3. 数据销毁:删除表、清空数据库,甚至通过DROP DATABASE销毁整个库;
  4. 权限提升:通过注入获取数据库 root 权限,进而控制服务器(如读取服务器文件、执行系统命令);
  5. 合规风险:违反《网络安全法》《个人信息保护法》,企业面临罚款、追责。
(3)防护 SQL 注入

防护的核心思路:永远不要相信用户的输入,杜绝「直接拼接用户输入到 SQL 语句」。以下是从易到难的防护手段:

使用参数化查询(预处理语句)【最有效】

这是防护 SQL 注入的黄金法则,原理是:将 SQL 语句的「结构」和「数据」分离,用户输入仅作为「数据参数」传入,不会被解析为 SQL 语法。

示例(Python + pymysql):

# 错误方式:直接拼接(有注入风险) sql = f"SELECT * FROM user WHERE username = '{username}'" # 正确方式:参数化查询(? 是占位符,不同语言占位符可能不同:%s、:name 等) sql = "SELECT * FROM user WHERE username = %s" cursor.execute(sql, (username,)) # 第二个参数是参数列表,自动转义输入

示例(Java + JDBC):

// 错误方式:拼接字符串 String sql = "SELECT * FROM user WHERE username = '" + username + "'"; // 正确方式:PreparedStatement(预处理语句) String sql = "SELECT * FROM user WHERE username = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, username); // 绑定参数,自动转义 ResultSet rs = pstmt.executeQuery();

参数化查询会自动对用户输入中的特殊字符(如单引号'、注释符--)进行转义,从根本上杜绝注入。

对用户输入做「白名单校验」(推荐)或「黑名单过滤」(辅助):

  • 白名单:仅允许符合规则的输入(如用户 ID 只能是数字、手机号只能是 11 位数字),不符合则直接拒绝;

  • 黑名单:过滤 / 转义 SQL 关键字(如ORANDUNIONDROP--;等),但黑名单易被绕过(如大小写混合OraNd),仅作为辅助手段。

最小权限原则

数据库操作账号仅赋予「必要的权限」,避免使用 root 等高权限账号:

  • 比如查询用户数据的接口,仅赋予SELECT权限,即使被注入,也无法执行DROPUPDATE等操作;

  • 禁止数据库账号拥有服务器系统权限(如读取 / 写入服务器文件)。

使用 ORM 框架

ORM(对象关系映射)框架(如 Python 的 SQLAlchemy、Java 的 MyBatis/hibernate)会自动使用参数化查询,避免手动拼接 SQL,降低注入风险。

示例(Python + SQLAlchemy):

from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker engine = create_engine("mysql+pymysql://user:password@localhost/test_db") Session = sessionmaker(bind=engine) session = Session() # ORM 查询:自动参数化,无注入风险 user = session.query(User).filter(User.username == username).first()

开启数据库防护机制

  • 启用 MySQL 的sql_mode严格模式,限制危险语法执行;

  • 使用 Web 应用防火墙(WAF):如阿里云 WAF、腾讯云 WAF,可拦截常见的 SQL 注入攻击请求;

  • 定期审计 SQL 日志,发现异常的 SQL 执行行为。

(4)新手易踩的坑
  1. 「仅过滤单引号」就认为安全:攻击者可通过编码(如 URL 编码%27)、大小写混合绕过;
  2. 对数字型参数放松警惕:比如id=1 OR 1=1无需单引号,直接拼接仍会注入;
  3. 依赖前端校验:前端校验可被轻易绕过(如禁用 JS、抓包改参数),必须做后端校验;
  4. 认为「小众框架 / 语言」无注入风险:只要存在手动拼接 SQL,无论什么语言(PHP/Java/Python/Go)都可能出现注入。

总结

SQL 注入的本质是「输入未校验 + SQL 拼接」,防护的核心是使用参数化查询,辅以输入校验、最小权限、WAF 等手段。作为开发者,入门阶段需牢记:永远不要手动拼接用户输入到 SQL 语句中,这是避免 SQL 注入的第一道也是最重要的防线。

3.练习sql语句

方式一:

首先要启动小皮中的mysql服务

然后找到它所在的目录,输入cmd 来打开终端

输入

mysql -uroot -p

-p后的密码即为小皮中设置的密码,详情请查找“终端中使用mysql数据库的基本操作”

方式二:

要先下载navicat

Navicat Premium 16 保姆级手把手 安装教程包含下载、安装、授权(附安装包)-CSDN博客

练习数据准备

将下方语句一一执行

若用navicat,可一键复制,全选后点击运行

-- 创建数据库(如果不存在)

CREATE DATABASE IF NOT EXISTS student_grade_db;

USE student_grade_db;

-- 创建课程表(5门课,覆盖常见科目)

CREATE TABLE courses (

id INT AUTO_INCREMENT PRIMARY KEY,

course_name VARCHAR(50) NOT NULL

);

-- 创建学生表(30个真实感名字+班级+年龄)

CREATE TABLE students (

id INT AUTO_INCREMENT PRIMARY KEY,

name VARCHAR(50) NOT NULL,

age INT NOT NULL,

gender VARCHAR(10) NOT NULL,

class VARCHAR(20) NOT NULL

);

-- 创建成绩表(关联学生和课程,150条数据)

CREATE TABLE scores (

id INT AUTO_INCREMENT PRIMARY KEY,

student_id INT NOT NULL,

course_id INT NOT NULL,

score DECIMAL(5,2) NOT NULL,

FOREIGN KEY (student_id) REFERENCES students(id),

FOREIGN KEY (course_id) REFERENCES courses(id)

);

-- 插入课程数据(5门课,基础科目全齐)

INSERT INTO courses (course_name) VALUES

('Mathematics'),

('Chinese'),

('English'),

('Physics'),

('Chemistry');

-- 插入30个学生数据(名字/年龄/性别/班级随机分配,真实不塑料!)

INSERT INTO students (name, age, gender, class) VALUES

('张明', 19, 'Male', 'Computer Science 1'),

('李华', 20, 'Female', 'Computer Science 2'),

('王芳', 18, 'Female', 'IT Engineering 1'),

('刘伟', 21, 'Male', 'Computer Science 1'),

('陈静', 19, 'Female', 'IT Engineering 2'),

('杨洋', 20, 'Male', 'Computer Science 2'),

('黄丽', 19, 'Female', 'Computer Science 1'),

('周强', 22, 'Male', 'IT Engineering 1'),

('吴敏', 20, 'Female', 'Computer Science 2'),

('徐娜', 18, 'Female', 'IT Engineering 2'),

('孙浩', 20, 'Male', 'Computer Science 1'),

('马超', 21, 'Male', 'Computer Science 2'),

('朱婷', 19, 'Female', 'IT Engineering 1'),

('胡杰', 20, 'Male', 'IT Engineering 2'),

('林雪', 18, 'Female', 'Computer Science 1'),

('何亮', 22, 'Male', 'Computer Science 2'),

('高峰', 19, 'Male', 'IT Engineering 1'),

('郭静', 20, 'Female', 'IT Engineering 2'),

('韩梅', 19, 'Female', 'Computer Science 1'),

('谢敏', 20, 'Female', 'Computer Science 2'),

('邓伟', 21, 'Male', 'IT Engineering 1'),

('冯丽', 18, 'Female', 'IT Engineering 2'),

('曾强', 20, 'Male', 'Computer Science 1'),

('彭华', 19, 'Female', 'Computer Science 2'),

('颜强', 21, 'Male', 'IT Engineering 1'),

('潘丽', 20, 'Female', 'IT Engineering 2'),

('杜明', 22, 'Male', 'Computer Science 1'),

('丁芳', 19, 'Female', 'Computer Science 2'),

('董强', 20, 'Male', 'IT Engineering 1'),

('赵敏', 21, 'Female', 'IT Engineering 2');

-- 插入150条成绩数据(每学生5门课,分数有高有低,真实到能编故事!)

-- 重点:覆盖增删改查所有场景(比如查“物理不及格的”、按分数排序等)

INSERT INTO scores (student_id, course_id, score) VALUES

(1,1,85.5), (1,2,90.0), (1,3,78.5), (1,4,82.0), (1,5,88.5), -- 张明(学霸型)

(2,1,76.0), (2,2,85.0), (2,3,82.0), (2,4,79.5), (2,5,81.0), -- 李华(中等偏上)

(3,1,65.0), (3,2,70.0), (3,3,68.0), (3,4,62.0), (3,5,67.0), -- 王芳(挂科预警!)

(4,1,92.0), (4,2,88.0), (4,3,85.0), (4,4,90.0), (4,5,89.0), -- 刘伟(卷王)

(5,1,72.5), (5,2,75.0), (5,3,78.0), (5,4,74.5), (5,5,76.0), -- 陈静(稳如老狗)

(6,1,80.0), (6,2,84.0), (6,3,83.0), (6,4,81.0), (6,5,82.5), -- 杨洋(进步中)

(7,1,77.5), (7,2,81.0), (7,3,79.5), (7,4,76.0), (7,5,78.5), -- 黄丽(小透明)

(8,1,88.0), (8,2,92.0), (8,3,89.0), (8,4,91.0), (8,5,90.0), -- 周强(大佬)

(9,1,74.0), (9,2,78.0), (9,3,76.5), (9,4,73.0), (9,5,75.0), -- 吴敏(努力型)

(10,1,68.0), (10,2,72.0), (10,3,70.0), (10,4,65.0), (10,5,69.0), -- 徐娜(差点挂科)

(11,1,83.0), (11,2,86.0), (11,3,84.0), (11,4,82.0), (11,5,85.0), -- 孙浩(中上)

(12,1,79.0), (12,2,82.0), (12,3,80.0), (12,4,78.5), (12,5,81.0), -- 马超(稳)

(13,1,71.5), (13,2,74.0), (13,3,72.5), (13,4,70.0), (13,5,73.0), -- 朱婷(小进步)

(14,1,81.0), (14,2,83.0), (14,3,82.5), (14,4,80.0), (14,5,84.0), -- 胡杰(卷中卷)

(15,1,69.5), (15,2,73.0), (15,3,71.0), (15,4,67.5), (15,5,70.5), -- 林雪(差点挂科)

(16,1,90.0), (16,2,93.0), (16,3,91.0), (16,4,92.0), (16,5,94.0), -- 何亮(天花板)

(17,1,75.0), (17,2,77.0), (17,3,76.0), (17,4,74.0), (17,5,78.0), -- 高峰(中等)

(18,1,82.0), (18,2,85.0), (18,3,83.0), (18,4,81.5), (18,5,84.5), -- 郭静(优秀)

(19,1,78.0), (19,2,80.0), (19,3,79.0), (19,4,77.0), (19,5,81.0), -- 韩梅(小能手)

(20,1,84.5), (20,2,87.0), (20,3,86.0), (20,4,85.0), (20,5,88.0), -- 谢敏(学霸)

(21,1,67.0), (21,2,71.0), (21,3,69.0), (21,4,65.0), (21,5,68.0), -- 邓伟(危险边缘)

(22,1,73.0), (22,2,76.0), (22,3,74.0), (22,4,72.0), (22,5,75.0), -- 冯丽(稳)

(23,1,86.0), (23,2,89.0), (23,3,87.0), (23,4,85.0), (23,5,88.0), -- 曾强(卷王)

(24,1,77.5), (24,2,80.0), (24,3,78.5), (24,4,76.5), (24,5,79.5), -- 彭华(中等偏上)

(25,1,89.0), (25,2,91.0), (25,3,88.5), (25,4,90.0), (25,5,92.0), -- 颜强(大佬)

(26,1,74.5), (26,2,77.5), (26,3,75.0), (26,4,73.5), (26,5,76.5), -- 潘丽(小进步)

(27,1,92.5), (27,2,95.0), (27,3,93.0), (27,4,94.0), (27,5,96.0), -- 杜明(天花板2号)

(28,1,80.5), (28,2,83.5), (28,3,82.0), (28,4,81.0), (28,5,84.0), -- 丁芳(优秀)

(29,1,76.0), (29,2,79.0), (29,3,77.5), (29,4,75.0), (29,5,78.0), -- 董强(中等)

(30,1,83.0), (30,2,86.0), (30,3,84.5), (30,4,82.5), (30,5,85.5); -- 赵敏(稳如老狗)

4.搭建sql靶场

网址:入门网安方向的下载与安装-CSDN博客

在里面的4.2,就已经搞过了,大家可以去看一下

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 1:08:04

最近在研究高速列车的主动悬挂系统,发现H无穷控制策略在这个领域挺有意思的。今天就来聊聊基于H无穷控制策略的横摆半车9自由度高速列车主动悬挂

基于H无穷控制策略的横摆半车9自由度高速列车主动悬挂首先,我们得明白什么是H无穷控制。简单来说,H无穷控制是一种鲁棒控制方法,能够在系统存在不确定性和外部干扰的情况下,保证系统的稳定性和性能。对于高速列车这种复杂系统&…

作者头像 李华
网站建设 2026/5/28 22:37:53

Ubuntu硬盘空间不够?一文带你理清过程的根分区无损扩容实战指南

复杂分区布局下的 Ubuntu 根目录无损扩容实践:从引导参数调试到扇区移位 摘要 本文详细记录了在一块 1TB NVMe 固态硬盘(WD_BLACK SN770)上,解决 Ubuntu 根分区(/)空间不足问题的全过程。本次扩容的特殊性在…

作者头像 李华
网站建设 2026/5/27 9:32:04

想让你的标书不废标应该这样做

1、检查项目编号与名称:投标文件整篇项目编号与名称是否正确。2、检查投标人名称:投标人名称与营业执照、资质证书、安全生产许可证、银行资信证明等证明证书是否一致。3、检查投标文件的排版:文本格式、字体、行数、图片是否模糊或歪斜,这些是否按照招标文件的要求…

作者头像 李华
网站建设 2026/5/27 20:36:32

探索图像滤波去噪:MATLAB GUI的奇妙之旅

图像滤波去噪 MATLAB GUI【带报告】 本链接包含 MATLAB代码,代码,【带word 大报告】。 对图像添加高斯 噪声、椒盐噪声,可进行 均值滤波、中值滤波、同态滤波、小波阈值去噪等多种处理。在图像处理领域,噪声就像是讨人厌的小恶魔&…

作者头像 李华
网站建设 2026/5/22 7:38:00

vue基于Spring Boot的军事论坛军迷交流平台_6c496w86

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持java、ThinkPHP、Node.js、Spring B…

作者头像 李华