首页 > 其他分享 >20211317李卓桐 Exp8 Web安全 实验报告

20211317李卓桐 Exp8 Web安全 实验报告

时间:2024-06-01 11:45:54浏览次数:19  
标签:Web 用户名 数据库 用户 Exp8 20211317 SQL 输入

Exp8 Web安全 实验报告

实践内容

  • (1)Web前端HTML
    Web前端HTML
  • (2)Web前端javascipt
    理解JavaScript的基本功能,理解DOM。
    在(1)的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎+输入的用户名”
    尝试注入攻击:利用回显用户名注入HTML及JavaScript。
  • (3)Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表
  • (4)Web后端:编写PHP网页,连接数据库,进行用户认证
  • (5)最简单的SQL注入,XSS攻击测试
  • (6)选做Webgoat或类似平台的SQL注入、XSS、CSRF攻击各一例。

实验基础知识

  • WebGoat
    WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,目前提供的训练课程有很多,包含了XSS、线程安全、SQL注入、访问控制、隐藏字段、Cookie等。

  • SQL注入攻击原理
    SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
    Web应用对后台数据库查询语句处理存在的安全漏洞。即为:在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符串的检查,例如:',--,# 这些特殊字符
    后台数据库将其认作正常SQL指令后正常执行,可能实现对后台数据库进行各种操作,甚至造成破坏后台数据库等严重后果。

  • XSS攻击
    XSS跨站脚本。攻击者利用网站漏洞(通常这些漏洞是指网站后台处理程序没有很好的对用户输入进行过滤),输入可以显示在页面上的、对其他用户造成影响的HTML代码;从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
    攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。

  • CSRF攻击
    CSRF :跨站请求伪造。即冒名登录。跨站请求伪造的核心本质是窃取用户的Session,或者说Cookie,因为目前主流情况Session都是存在Cookie中.攻击者并不关心被害者具体帐号和密码,因为一旦用户进行了登录,Session就是用户的唯一凭证,只要攻击者能够得到Session,就可以伪装成被害者进入服务器;
    主要是当访问网站A时输入用户名和密码,在通过验证后,网站A产生Cookie信息并返回,此时登录网站A成功,可正常发送请求到网站A。在未退出网站A前,若访问另一个网站B,网站B可返回一些攻击性代码并请求访问网站A;因此在网站B的请求下,向网站A发出请求。但网站A不知道该请求恶意的,因此还是会执行该恶意代码防御。

基础问题回答

什么是表单

在HTML中,表单是一种用于向服务器发送数据的方式。它由一组表单元素组成,用户可以在表单中输入信息,并通过点击提交按钮将这些信息发送到服务器进行处理。表单通常包括输入框、下拉框、单选框、复选框等元素,以及一个用于提交数据的按钮。

浏览器可以解析运行什么语言。

浏览器可以解析并执行多种语言,其中最主要的是HTML、CSS和JavaScript。HTML用于定义网页的结构和内容,CSS用于定义网页的样式和布局,而JavaScript则是一种脚本语言,用于为网页添加交互功能和动态效果。

WebServer支持哪些动态语言

Web服务器可以支持多种动态语言,其中一些常见的包括:

  • PHP:一种流行的服务器端脚本语言,用于开发动态网页和Web应用程序。
  • Python:通过诸如Django、Flask等框架支持动态网页开发。
  • Ruby:通过Ruby on Rails框架支持动态网页开发。
  • Java:通过Java Servlet、JSP(JavaServer Pages)等技术支持动态网页开发。
  • ASP.NET:微软的服务器端Web应用程序框架,支持使用C#或Visual Basic等语言进行动态网页开发。

防范注入攻击的方法有哪些

防范注入攻击的方法包括但不限于:

  • 使用参数化查询:使用预编译语句或存储过程等方式,将用户输入作为参数传递给数据库,而不是将其直接拼接到SQL查询中。
  • 输入验证和过滤:对用户输入进行严格的验证和过滤,确保输入数据符合预期格式和范围,并过滤掉可能包含恶意代码的字符。
  • 最小权限原则:为数据库用户分配最小的权限,限制其对数据库的访问和操作权限,以降低攻击者利用注入漏洞的影响范围。
  • 使用ORM框架:使用对象关系映射(ORM)框架来处理数据库操作,这些框架通常会自动处理参数化查询,从而减少注入攻击的风险。
  • 定期更新和漏洞修复:及时更新和修补数据库软件和应用程序,以修复已知的安全漏洞和弱点,从而降低注入攻击的风险。

实践总结与体会

实践过程记录

Web前端HTML

kali默认已安装Apache,直接使用sudo service apache2 start命令打开Apache服务即可。如图所示,如果没有任何错误提示,即表明成功开启。

在浏览器上127.0.0.1,如果可以打开Apache的默认网页,则开启成功

使用sudo su进入root权限模式,用cd /var/www/html进入Apache目录下,新建一个简单的含有表单的html文件myform1.html,内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Form Example</title>
</head>
<body>
    <h2>Form Example</h2>
    <form action="submit.php" method="GET">
        <label for="name">Name:</label>
        <input type="text" id="name" name="name" required><br><br>
        
        <label for="email">Email:</label>
        <input type="email" id="email" name="email" required><br><br>
        
        <button type="submit">Submit (GET)</button>
    </form>

    <br><br>

    <form action="submit.php" method="POST">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required><br><br>
        
        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required><br><br>
        
        <button type="submit">Submit (POST)</button>
    </form>
</body>
</html>

在浏览器上打开该文件

Web前端javascipt 理解JavaScript的基本功能,理解DOM。

在(1)的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎+输入的用户名”

编辑myform1.html,代码如下保存好后退出编辑模式,

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Login Form</title>
</head>
<body>
    <h2>Login Form</h2>
    <form id="loginForm" action="submit.php" method="POST">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required><br><br>
        
        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required><br><br>
        
        <button type="button" id="loginButton">Login</button>
    </form>

    <script>
        // 添加点击事件监听器
        document.getElementById("loginButton").addEventListener("click", function() {
            // 获取用户名和密码
            var username = document.getElementById("username").value;
            var password = document.getElementById("password").value;
            
            // 验证用户名和密码(示例中仅简单验证)
            if (username === "20211317" && password === "123456") {
                // 显示欢迎消息
                alert("欢迎 " + username);
            } else {
                // 验证失败,显示错误消息
                alert("用户名或密码错误");
            }
        });
    </script>
</body>
</html>

然后使用浏览器打开制作的网页,输入用户名、密码后,点击“提交”,页面便跳转欢迎界面,截图如下:

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

较为简单,打开数据库,正常输入相关SQL命令即可,截图如下

Web后端:编写PHP网页,连接数据库,进行用户认证 编写php文件,代码如下

c<?php
include '20211317sql.php';  // 引入数据库连接

// 检查是否有登录数据提交
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = $_POST['username'];
    $password = md5($_POST['password']);  // MD5加密用户提交的密码

    $sql = "SELECT id FROM users WHERE username = '$username' AND password = '$password'";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        // 登录成功
        echo "登录成功";
        // 这里可以设置session或者跳转到其他页面
    } else {
        // 登录失败
        echo "用户名或密码错误";
 echo "<br>执行的SQL: " . htmlspecialchars($sql); // 使用htmlspecialchars防止XSS攻击
    echo "<br>错误信息: " . $conn->error;
    }
}
?>

<!-- HTML登录表单 -->
<form method="post" action="login.php">
    用户名: <input type="text" name="username"><br>
    密码: <input type="password" name="password"><br>
    <input type="submit" value="登录">
</form>

<?php
$servername = "localhost";
$username = "root";
$password = "20211317lzt";
$dbname = "mydatabase";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} else {
    echo "Connected successfully";  // 显示连接成功的消息
}
?>

可以看到正常显示


代码修改如下,连接到本地数据库

打开页面,输入错误密码后显示如下

输入正确密码后显示如下

最简单的SQL注入,XSS攻击测试

sql注入攻击

xss攻击
在用户名输入 ,成功

实验心得体会

本次实验我认为是最简单的一次,由于之前学过web和数据库,所以轻轻松松,如果在我主机上做更简单,因为学过,但是我怕把电脑搞崩,就还是在虚拟机上做。

标签:Web,用户名,数据库,用户,Exp8,20211317,SQL,输入
From: https://www.cnblogs.com/lizhuotong/p/18192151

相关文章

  • 5.SpringTask,WebSocket
    SpringTask,WebSocketSpringTask介绍:SpringTask是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑;定位:定时任务框架作用:定时自动执行某段Java代码;应用场景:信用卡每月还款提醒;银行贷款每月还款提醒;火车票售票系统处理未支付订单;入职纪念日为......
  • Three.js是基于原生WebGL封装的三维引擎
    Three.js:基于原生WebGL封装的三维引擎引言随着互联网技术的发展,Web前端技术不断进步,用户对于网页交互体验的要求也越来越高。艾斯视觉前端开发:三维技术作为提升用户体验的重要手段之一,正在逐渐成为前端开发中的热门技术。Three.js作为一个轻量级、易于使用且功能强大的三维......
  • 1882java密室逃脱管理系统 Myeclipse开发mysql数据库web结构java编程计算机网页项目
    一、源码特点java密室逃脱管理系统是一套完善的web设计系统,对理解JSPjava编程开发语言有帮助采用了java设计,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用java语言开发。二、功能介绍(1)......
  • WEB网页设计期末作业个人主页——简单的学生网页作业源码 基于HTML CSS制作个人简介网
    @TOC>......
  • 我的大二web课程设计 使用HTML做一个简单漂亮的页面(纯html代码)
    @TOC>......
  • 微信小程序webview 调试本地
    场景描述小程序A,内部使用webview访问本地的项目B,项目B启动在localhost:8888本来以为小程序配置勾选不校验https时就可以访问到webview,结果还是无法访问解决方案小程序的启动方式上配置参数如下--disable-web-security--user-data-dir说明小程序本质上也是一个浏览器......
  • 《计算机网络微课堂》实验1 访问WEB服务器
    现在我们使用PacketTracer软件来做一个仿真实验,仿真实验的内容与我们理论讲解部分所采用的例子一样,就是一台主机访问另外一台Web服务器我们先来构建网络拓扑,我们拖动一个普通的计算机到逻辑工作空间,再拖动一台普通的服务器到逻辑工作空间,然后我们选择自动连线将他们互联起来......
  • WebSocked
    1@Slf4j2@Component3@ServerEndpoint("/ws/{sid}")4publicclassWebSocketServer{56privatestaticMap<String,Session>sessionMap=newHashMap<>();78/**9*连接建立时触发10*@paramsession11*......
  • 基于web的奶茶店线下点餐管理系统论文
    摘要随着信息技术的飞速发展,传统行业与互联网的融合已成为推动行业创新发展的重要动力。奶茶店作为快速消费品行业的重要组成部分,面临着提高服务效率、优化顾客体验、降低运营成本等多重挑战。因此,开发一套基于Web的奶茶店线下点餐管理系统,对于提升奶茶店的运营效率与顾客......
  • webapi 设置swagger上请求参数的默认值
    1.创建一个Config文件夹,再文件夹下创建一个类,我这点取名DefaultValue.csusingMicrosoft.OpenApi.Any;usingMicrosoft.OpenApi.Models;usingSwashbuckle.AspNetCore.SwaggerGen;namespaceWebApiTest1.Config{publicclassDefaultValue:ISchemaFilter{......