20222314 2024-2025-1 《网络与系统攻防技术》实验八实验报告

news/2025/3/10 14:47:04/文章来源:https://www.cnblogs.com/52HuLu/p/18610707

20222314 2024-2025-1 《网络与系统攻防技术》实验八实验报告

1. 实验内容

1.1 Web前端HTML
能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML
1.2 Web前端javascipt
理解JavaScript的基本功能,理解DOM
在1的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎+输入的用户名”
尝试注入攻击:利用回显用户名注入HTML及JavaScript
1.3 Web后端:MySQL基础
正常安装、启动MySQL,建库、创建用户、修改密码、建表
1.4 Web后端:编写PHP网页,连接数据库,进行用户认证
1.5 最简单的SQL注入,XSS攻击测试
1.6 安装DVWA或WebGoat平台,并完成SQL注入、XSS、CSRF攻击

2. 实验过程

2.1 Web前端HTML

2.1.1 正常安装、启动Apache
下载phpstudy,单机即可启动apache

用浏览器访问http://127.0.0.1,Apache启动成功。

2.1.2 编写一个含有表单的HTML

找到phpstudy所在文件夹

在WWW下新建一个czy文件夹,进入,新建一个20222314.html,内容如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Web实验表单</title>
</head>
<body><h1>用户登录</h1><form id="loginForm" method="POST" action="login.php"><label for="username">用户名:</label><input type="text" id="username" name="username" required><br><br><label for="password">密码:</label><input type="password" id="password" name="password" required><br><br><button type="button" onclick="validateForm()">登录</button></form><p id="message"></p><script src="script.js"></script>
</body>
</html>

保存后,在phpstudy中进行如下操作:

随后重启服务,打开127.0.0.1/czy/20222314.html,即可访问网站

2.2 Web前端javascipt

2.2.1 理解JavaScript的基本功能,理解DOM
JavaScript 是一种基于对象和事件驱动的脚本语言,广泛应用于客户端网页开发。它具备相对较高的安全性,并通过其核心组件实现了动态内容展示与交互功能。JavaScript 由以下三个主要部分构成:

  1. ECMAScript:作为 JavaScript 的语法和语义规范,ECMAScript 定义了语言的基本结构、数据类型、操作符、语句以及内置对象。它为 JavaScript 提供了统一的标准,确保了跨浏览器和平台的一致性。ECMAScript 不仅涵盖了基础的语言特性,还引入了诸如箭头函数、解构赋值、模块化等现代编程特性,增强了代码的可读性和维护性。作为标准,它不断演进,新的版本(如ES6/ES2015, ES7/ES2016等)引入了许多新特性来改善开发者体验并解决编程挑战。比如,类的定义、模块化支持、异步函数(async 和 await)等都是近年来添加的重要特性。
  2. 文档对象模型:DOM 是一种用于处理 HTML 和 XML 文档的标准编程接口。它将文档表示为一个树形结构,其中每个节点代表一个元素、属性或文本内容。通过 DOM,开发者可以动态地访问、修改、添加或删除文档中的任何部分。DOM 树的构建过程称为解析(parse),即将 HTML 或 XML 文档转换为内存中的对象模型。这种模型不仅描述了文档的结构,还定义了节点的行为,允许开发者通过调用节点的方法和属性来实现对页面内容的实时操作。DOM 的灵活性使得 JavaScript 能够高效地响应用户交互,动态更新页面内容,从而提升用户体验。DOM API允许JavaScript代码与页面内容直接互动。通过选择器,JavaScript可以获取页面上的元素,并且可以通过修改这些元素的属性、样式或直接添加/移除元素来改变页面结构。此外,事件监听机制让JavaScript能够响应用户的动作,如点击、键盘输入等,从而实现动态交互。
  3. 浏览器对象模型:BOM 是一组用于与浏览器环境进行交互的对象和方法。它提供了对浏览器窗口、历史记录、位置信息、定时器等功能的访问。通过 BOM,JavaScript 可以控制浏览器的行为,例如打开新窗口、导航到不同的 URL、管理会话状态等。BOM 还支持异步网络请求,允许开发者通过 XMLHttpRequest 或 Fetch API 与服务器进行数据交换,实现 AJAX 操作和 RESTful API 调用,从而实现无刷新的数据加载和动态内容更新。虽然“BOM”这个术语不像DOM那样有一个正式的标准文档,但它通常指的是浏览器提供的全局对象,如window、navigator、location、history等。这些对象提供了对浏览器环境本身的访问,包括控制窗口、处理用户导航、执行定时任务等功能。特别是XMLHttpRequest和现在的fetch API,它们使得从客户端向服务器发送请求变得非常简单,是构建单页应用(SPA)和进行AJAX调用的基础。
    三者结合,使得JavaScript成为一种功能强大的语言,适用于创建复杂且高度互动的Web应用程序。随着Node.js的出现,JavaScript的应用范围已经超出了浏览器端,扩展到了服务器端编程,实现了全栈JavaScript开发的可能性。此外,诸如React、Vue、Angular这样的前端框架和库也大大推动了JavaScript生态系统的繁荣和发展。
    JavaScript 的强大之处在于它能够通过修改 HTML 元素和 CSS 样式,实现动态的内容展示和交互效果。它可以通过监听用户的操作(如点击、滚动、提交表单等)触发事件处理程序,执行复杂的业务逻辑和算法。JavaScript 内置了丰富的函数库和对象,支持数据处理、计算、逻辑判断等功能,能够满足各种复杂的前端开发需求。此外,JavaScript 还可以通过网络请求与服务器进行通信,实现实时数据交互,进一步增强了网页的功能性和互动性。
    总之,JavaScript 通过 ECMAScript、DOM 和 BOM 的协同作用,赋予了开发者强大的工具来操作网页内容、响应用户交互并实现复杂的业务逻辑。DOM 的树形结构和节点操作机制为 JavaScript 提供了灵活的文档 manipulation 能力,使其成为现代 Web 开发中不可或缺的核心技术。
    2.2.2 编写JavaScript验证用户名、密码的规则,在用户点击登陆按钮后回显“欢迎+输入的用户名”

新建并且编辑script.js
编辑内容为

function validateForm() {const username = document.getElementById("username").value.trim();const password = document.getElementById("password").value.trim();const message = document.getElementById("message");// 验证规则if (!username || !password) {message.textContent = "用户名和密码不能为空!";message.style.color = "red";return;}if (username.length < 3) {message.textContent = "用户名必须至少3个字符!";message.style.color = "red";return;}// 显示欢迎信息message.textContent = `欢迎, ${username}`;message.style.color = "green";
}

再次用浏览器访问>
http://127.0.0.1/20222314.html

在账号中输入czy,密码20222314

在账号中输入c,密码20222314

测试xss
用户名输入,密码20222314

并没有存在常见的xss

2.3 Web后端:MySQL基础,正常安装、启动MySQL,修改密码、创建用户

phpstudy打开MySQL服务
创建20222314czy数据库
创建一个名为czy的用户,并使用密码20222314进行身份验证。


-- 创建用户表
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,password VARCHAR(255) NOT NULL
);-- 插入用户数据
INSERT INTO users (username, password) VALUES ('20222314', 'czy123456');

2.4 Web后端:编写PHP网页,连接数据库,进行用户认证。
新建并且编辑20222314.php,内容如下:

<?php
// 数据库配置
$servername = "localhost";
$username = "czy";
$password = "20222314";
$dbname = "20222314czy";// 连接数据库
$conn = new mysqli($servername, $username, $password, $dbname);// 检查连接是否成功
if ($conn->connect_error) {die("连接失败: " . $conn->connect_error);
}// 获取表单数据
$user = $_POST['username'];
$pass = $_POST['password'];// 查询用户
$sql = "SELECT * FROM users WHERE username = ? AND password = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ss", $user, $pass);
$stmt->execute();
$result = $stmt->get_result();if ($result->num_rows > 0) {echo "登录成功,欢迎 " . htmlspecialchars($user);
} else {echo "用户名或密码错误!";
}$stmt->close();
$conn->close();
?>

修改20222314.html
修改原来的html文件,将action指向20222314.php。
代码如下:

<!DOCTYPE html>
<html>
<head><title>Login</title><script>function login() {const username = document.getElementById("username").value.trim();const password = document.getElementById("password").value.trim();// 检查用户名或密码是否为空if (username === "" || password === "") {  alert("Username or password cannot be empty!");  return false;  // 阻止表单提交}  // 检查用户名和密码是否匹配else if (username !== "20222314") {  alert("Your username is incorrect!");  return false;  // 阻止表单提交} else if (password !== "czy123456") {   alert("Your password is incorrect!");  return false;  // 阻止表单提交}// 验证通过,允许表单提交return true;}</script>
</head>
<body><h1>Login Page</h1><form action="20222314.php" method="post" onsubmit="return login()">Username: <input type="text" id="username" name="username"><br><br>Password: <input type="password" id="password" name="password"><br><br><input type="submit" value="Login"></form>
</body>
</html>

用浏览器打开http://127.0.0.1/20222314.html

若输入的用户名和密码正确(20222314,czy123456)

登陆成功

若没有输入用户名,则提示

若用户名或密码错误,则会提示用户名或密码错误。

2.6 dvwa平台的SQL注入、XSS、CSRF攻击

下载dvwa后部署到phpstudy上,下面是部署好的界面

选择安全度为low

2.6.2 完成一个SQL注入攻击。
输入1' UNION SELECT 1,group_concat(user,0x3a,avatar) from users#

2.6.3 完成一个反射型XSS攻击。

图片

输入

可以看到,XSS攻击成功,出现告警信息。

2.6.4 完成一个CSRF实验。
服务器收到修改密码的请求后,会检查参数password_new与password_conf是否相同,如果相同,就会修改密码,并没有任何的防CSRF机制
修改一次密码,获取修改的get请求

http://dvwa-master/vulnerabilities/csrf/?password_new=123456789&password_conf=123456789&Change=Change#


登录测试
发现原密码password已经无法登录

而123456789可以(这里实在不知道怎么截图了)

3.问题及解决方案

4.学习感悟、思考等

通过本次实验,我对Web安全有了全新的理解,也在技术和思想层面上得到了全面提升。在实验中,我系统性地学习并实践了HTML注入、JavaScript注入、SQL注入、XSS(跨站脚本攻击)、CSRF(跨站请求伪造)等多种常见的Web攻击手段。这不仅让我了解了Web应用可能面临的各种威胁,还帮助我掌握了应对这些威胁的有效策略。

从攻击到防御:双向视角的学习
实验开始时,我带着“攻”的心态,从攻击者的视角出发,通过模拟各种攻击方式深刻体验了漏洞利用的过程。例如:

HTML和JavaScript注入让我看到,未经校验的输入会如何轻易突破前端页面的安全屏障;
SQL注入演示了,当后端数据库查询语句未使用参数化或预编译技术时,攻击者可以轻松窃取、篡改数据;
XSS和CSRF攻击让我意识到,即使是用户信任的网站,也可能因为开发者的疏忽而被用于欺骗或攻击用户。
在理解这些攻击机制后,我转向“防”的视角,结合理论和实践,学习如何在代码中构建更牢固的防线。通过添加严格的输入校验、使用参数化查询、启用内容安全策略(CSP)和引入CSRF令牌,我感受到安全开发不仅是一种技术能力,更是一种思维习惯。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/853896.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CosyVoice 2.0 支持双向流式语音合成;无问芯穹开源全模态理解端侧模型丨RTE 开发者日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑…

分布式锁代码编写问题分析

分布式锁代码编写问题分析 先给大家一段代码示例:@AutowiredRedisson redisson;@GetMapping("/modifyInfo/{id}")public Result modifyInfo(@PathVariable String id) {String lockKey = RedisLockConstant.ERP_CLUE_LOCK + id;RLock rLock = redisson.getLock(lo…

AlmaLinux 10.0 Beta “Purple Lion” - RHEL 二进制兼容免费发行版

AlmaLinux 10.0 Beta “Purple Lion” - RHEL 二进制兼容免费发行版AlmaLinux 10.0 Beta “Purple Lion” - RHEL 二进制兼容免费发行版 由社区提供的免费 Linux 操作系统,RHEL 二进制兼容发行版 请访问原文链接:https://sysin.org/blog/almalinux-10/ 查看最新版。原创作品,…

leetcode2055. 蜡烛之间的盘子 - 前缀和

这道题目作为比较单纯的前缀和题目,不需要额外的一些知识,只需要了解前缀和数组的生成与使用即可,并且也有一定的难度(难度分1819),是一个比较好的前缀和例题。 题干 算术评级: 6第 64 场双周赛Q3 给你一个长桌子,桌子上盘子和蜡烛排成一列。给你一个下标从 0 开始的字符…

云原生周刊:Kubernetes v1.32 正式发布

云原生周刊:Kubernetes v1.32 正式发布 开源项目推荐 Helmper Helmper 简化了将 Helm Charts导入OCI(开放容器倡议)注册表的过程,并支持可选的漏洞修复功能。它确保您的 Helm Charts不仅安全存储,还能及时应用最新的安全修复。该工具完全兼容 OCI 标准,能够方便地与 OCI …

五款实用报表工具推荐:助你轻松搞定数据可视化!

概述 本文将为大家介绍五款功能各异的报表工具,包括山海鲸报表、Canva、BIRT、Chart.js和Metabase。文章详细分析了每款工具的特点、优缺点以及适用场景,帮助企业用户根据自身需求选择合适的报表解决方案,以提高数据分析和可视化能力。 1. 山海鲸报表 简介山海鲸报表是一款国…

三、USB PD物理层

1、定义 物理层(PHY层)定义了USB电源传输的信令技术。本章定义了USB PD设备之间的互操作性所需的PD物理层的电气要求和参数。 2、物理层的功能 USB PD物理层由一对发射机和接收器组成,它们通过单个信号线(CC)进行通信。所有的通信都是半双工的。PHY层实现了避免冲突,以最小…

FineReport模板性能问题排查方法

1. 概述 模板的加载速度受到很多因素影响,如果一个模板预览的时候,加载较慢,该如何去分析问题原因呢? 2. 排查步骤 2.1 查看数据集查询速度 大部分模板加载慢,都是因为 sql 执行速度比较慢。那么如何验证 sql 速度快慢呢?可以使用以下几种方案。 1)在设计器的数据集中直…

模板性能问题排查方法

1. 概述 模板的加载速度受到很多因素影响,如果一个模板预览的时候,加载较慢,该如何去分析问题原因呢? 2. 排查步骤 2.1 查看数据集查询速度 大部分模板加载慢,都是因为 sql 执行速度比较慢。那么如何验证 sql 速度快慢呢?可以使用以下几种方案。 1)在设计器的数据集中直…

【bug】重复请求的幂等问题

问题背景 某验收系统,客户发起验收流程时,由于前端没有做防重点击的限制,导致申请按钮连续点击了多次,重复发起了多条流程 历史逻辑 后端为了保证接口幂等,在发起验收流程的代码中加了几层逻辑如下:判断验收记录状态是否为待发起, 如果不是,则立刻返回失败 发起流程的入…

Deformable DETR

PDF:https://arxiv.org/pdf/2010.04159 Code:https://github.com/fundamentalvision/Deformable-DETR 一、大体内容 前面介绍DETR时,说明了其还存在对小物体检测效果不佳和训练慢的问题,Deformable DETR引入了DCN(Deformable Convolutional Networks)并将其和DETR相结合,借…

【蓝队】HW中盛行的Java内存马,如何全面检测?

一、背景 1.1 Java内存马是什么? 内存马是一种仅在内存中运行、没有文件落地的恶意程序,因此具有较强的隐蔽性,能够避开常规的基于文件系统的检测。Java内存马是针对Java语言的内存马,它利用Java语言的动态特性,如类加载机制、动态代理和反射技术等,在Java应用的内存中注…