前言

本系列为小迪2022的学习笔记,仅用于自我记录。

正文

在一般情况下,一个网站的首页大致如下



在上方存在着各种各样的导航标签、链接。而一般情况下网站的导航会用参数进行索引的编写,比如id、page等等



比如上面的链接格式,当用户访问不同页面时id参数值也会跟着变化,比如我让id=2即可更改页面内容

动手编写一个导航页

在phpstorm中打开我们在phpstudy中创建的网站

PS:在phpstudy中创建网站时,最好勾选同步hosts文件。不然如果你定义的域名可能访问不到

数据库的创建

下面是创建数据库表的sql语句,使用方法就是你使用mysql创建一个空的数据库,然后运行这个sql文件即可

/*
Navicat Premium Data Transfer Source Server : localhost_mysql8.0
Source Server Type : MySQL
Source Server Version : 80012 (8.0.12)
Source Host : localhost:3306
Source Schema : wushiyiwuzhong_com Target Server Type : MySQL
Target Server Version : 80012 (8.0.12)
File Encoding : 65001 Date: 07/11/2023 14:37:06
*/ SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0; -- ----------------------------
-- Table structure for products
-- ----------------------------
DROP TABLE IF EXISTS `products`;
CREATE TABLE `products` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`product_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`product_description` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
`product_price` decimal(10, 2) NOT NULL,
`sales_volume` int(11) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ----------------------------
-- Records of products
-- ----------------------------
INSERT INTO `products` VALUES (1, 'IDEA', 'IDEA是一款好用的Java开发工具', 999.00, 1000);
INSERT INTO `products` VALUES (2, 'Pycharm', 'Pycharm在开发python这方面非常的好用', 999.00, 1000);
INSERT INTO `products` VALUES (3, 'Phpstorm', '一款大家都在用的php开发工具', 999.00, 1000); SET FOREIGN_KEY_CHECKS = 1;
sql解释
  • id: 主键,自动递增的整数,用于唯一标识每个产品。
  • product_name: 产品名称,最大长度为255个字符,不能为空。
  • product_description: 产品具体介绍,使用TEXT类型存储。
  • product_price: 产品价格,使用DECIMAL类型存储,保留2位小数,不能为空。
  • sales_volume: 销量,整数类型。

运行完该sql文件后库的表结构如下

编写数据库的连接配置文件

创建一个config文件夹,然后在config文件夹里创建一个conn.php数据库连接文件

<?php
// 数据库连接信息
$servername = "localhost"; // 数据库服务器地址
$username = "root"; // 数据库用户名
$password = "root"; // 数据库密码
$dbname = "wushiyiwuzhong_com"; // 数据库名称 // 创建数据库连接
$conn = new mysqli($servername, $username, $password, $dbname);

如下:

html页面的编写

我这里没有用小迪的原始页面,美化了一下

html部分

在phpstorm中创建一个index.php,在里面写入下面的代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Head</title>
<link rel="stylesheet" href="index.css">
</head>
<body>
<div class="header">
<a href="index.html" class="logo">
<h1>wushiyiwuzhong</h1>
</a>
<nav class="navbar">
<ul>
<li><a href="#">首页</a></li>
<li><a href="#">公司介绍</a></li>
<li><a href="#">产品</a>
<ul class="hide">
<li><a href="#">IDEA</a></li>
<li><a href="#">Pycharm</a></li>
<li><a href="#">Phpstorm</a></li>
</ul>
</li>
</li>
<li><a href="#">开源社区</a></li>
<li><a href="#">后台管理</a></li>
</ul>
</nav>
</div>
<div class="content"> </div>
</body>
</html>
<?php
//操作数据库讲数据取出进行展示
include("config/conn.php"); $i=$_GET['id'];//GET请求接受id参数名值给变量i
$sql="select * from products where id=$i";
$result=$conn->query($sql);
if ($result->num_rows > 0) {
// 输出数据
echo "<table border='1'>";
echo "<tr><th>ID</th><th>产品名称</th><th>产品介绍</th><th>产品价格</th><th>销量</th></tr>";
while ($row = $result->fetch_assoc()) {
echo "<tr>";
echo "<td>" . $row["id"] . "</td>";
echo "<td>" . $row["product_name"] . "</td>";
echo "<td>" . $row["product_description"] . "</td>";
echo "<td>" . $row["product_price"] . "</td>";
echo "<td>" . $row["sales_volume"] . "</td>";
echo "</tr>";
}
echo "</table>";
}
CSS样式部分

为了好看点加个css文件,在phpstorm中创建index.css文件

/* css样式初始化 */
* {
font-family: 'Poppins', sans-serif;
margin: 0;
padding: 0;
box-sizing: border-box;
outline: none;
border: none;
text-decoration: none;
text-transform: capitalize;
transition: .2s linear;
} html {
font-size: 62.5%;
}
/* header样式初始化*/
.header {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 1000;
background: #3F3D56;
display: flex;
align-items: center;
justify-content: space-between;
} .header .logo {
color: white;
padding: 0 1rem;
}
/* 导航样式 */
.navbar ul{
display: flex;
} .navbar ul li{
font-weight: bold;
width: 128px;
list-style: none;
text-align:center;
}
.navbar ul li a {
width: 128px;
line-height: 45px;
font-size: 1.7rem;
color: white;
}
.navbar ul li a:hover{
color: #009933;
}
/* 二级菜单样式 */
.navbar ul li ul{
position: absolute;
display: none;
width: 128px;
line-height: 45px;
} .navbar ul li ul li{
background-color: #3F3D56;
}
/* 悬浮展开二级菜单 */
.navbar ul li ul li a:hover{
color: white;
}
.navbar ul li ul li:hover{
background-color: #009933;
} .navbar ul li:hover ul{
display: block;
}
/* 网站内容*/
.content{
margin-top:50px;
}

如下:



将其在浏览器打开,页面如下



接下来我们传入id值获取内容



可以成功获取到了对应的内容,既然id可控,那么我们在id这个参数上尝试着进行sql注入,这里sqlmap直接跑就行了



可以看到sqlmap成功注入了

sql注入原理

这里的代码存在 SQL 注入漏洞的原因是在构建 SQL 查询语句时,直接将用户提供的数据(通过 $_GET['id'])插入到 SQL 查询语句中,而没有进行适当的过滤和转义。导致了

攻击者可以利用这个漏洞通过修改 URL 中的 id 参数来执行恶意的 SQL 代码

php开发中常见的漏洞点(一) 基础sql注入的更多相关文章

  1. PHP开发中常见的漏洞及防范

    PHP开发中常见的漏洞及防范 对于PHP的漏洞,目前常见的漏洞有五种.分别是Session文件漏洞.SQL注入漏洞.脚本命令执行漏洞.全局变量漏洞和文件漏洞.这里分别对这些漏洞进行简要的介绍和防范. ...

  2. WEB开发中常见的漏洞

    一.SQL注入漏洞 SQL注入攻击(SQL Injection),简称注入攻击.SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞.在设计程序,忽略了对输入字符串中夹带的 ...

  3. 常见web漏洞的整理之SQL注入

    SQL注入: 简介: 全称Structured Query Language,即结构化查询语言,是一种特殊的编程语言,用于数据库中的标准数据查询语言.也被作为关系式数据库管理系统的标准语言. 原理: ...

  4. web开发中常见的安全漏洞及避免方法

    1.安全攻击 1.SQL.HTML.JS.OS命令注入 2.XSS跨站脚本攻击,利用站内信任的用户,在web页面插入恶意script代码 3.CSRF跨站请求伪造,通过伪装来自信任用户的请求来利用受信 ...

  5. PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等

    页面导航: 首页 → 网络编程 → PHP编程 → php技巧 → 正文内容 PHP安全 PHP开发中常见的安全问题详解和解决方法(如Sql注入.CSRF.Xss.CC等) 作者: 字体:[增加 减小 ...

  6. Web安全测试中常见逻辑漏洞解析(实战篇)

    Web安全测试中常见逻辑漏洞解析(实战篇) 简要: 越权漏洞是比较常见的漏洞类型,越权漏洞可以理解为,一个正常的用户A通常只能够对自己的一些信息进行增删改查,但是由于程序员的一时疏忽,对信息进行增删改 ...

  7. asp.net开发中常见公共捕获异常方式总结(附源码)

    本文实例总结了asp.net开发中常见公共捕获异常方式.分享给大家供大家参考,具体如下: 前言:在实际开发过程中,对于一个应用系统来说,应该有自己的一套成熟的异常处理框架,这样当异常发生时,也能得到统 ...

  8. ios开发——错误总结篇&开发中常见错误和警告总结(四)

    ios开发——开发总结&开发中常见错误和警告总结(四) 网易彩票实战总结(错误) 错误总结之类的实现 经典错误之重复定义与导入错误 经典错误关于父类的实现 通知对象: 控制器的定义 Xcode ...

  9. Java开发中常见的危险信号(中)

    本文来源于我在InfoQ中文站原创的文章,原文地址是:http://www.infoq.com/cn/news/2013/12/common-red-flags-in-java-1 Dustin Ma ...

  10. 对开发中常见的内存泄露,GDI泄露进行检测

    对开发中常见的内存泄露,GDI泄露进行检测 一.GDI泄露检测方法: 在软件测试阶段,可以通过procexp.exe 工具,或是通过任务管理器中选择GDI对象来查看软件GDI的对象是使用情况. 注意点 ...

随机推荐

  1. [GDOIpj221C] 流水线

    第三题 流水线 提交文件: line.cpp 输入文件: line.in 输出文件: line.out 时间空间限制: 2 秒, 256 MB 在计算机组成原理这门课中,小明的老师布置了实现 CPU ...

  2. [USACO2007NOVG] Cow Relays G

    题目描述 For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race ...

  3. 使用 VS 2019 将 c# 生成 DLL 动态链接库文件

    主要步骤: ChatGPT 的回答: 你可以尝试使用 Visual Studio 创建一个类库项目,然后将你写的两个类添加到该项目中,并进行编译,最终生成 DLL 文件.具体步骤如下: 打开 Visu ...

  4. 给祖传系统做了点 GC调优,暂停时间降低了 90%

    问题描述 公司某规则引擎系统,在每次发版启动会手动预热,预热完成当流量切进来之后会偶发的出现一次长达1-2秒的Young GC(流量并不大,并且LB下的每个节点都会出现该情况) 在这次长暂停之后,每一 ...

  5. 2023 年最后一波工具安利「GitHub 热点速览」

    2023 年还有两周就要接近尾声了,2023 年的热点速览还有一波工具好安利:比如上周推荐之后上了热榜的远程调试工具 page-spy-web,让调试像呼吸一般自然方便:还有轻量级的搜索引擎 oram ...

  6. 微软官方发布的C#开源、免费、实用的Windows工具箱

    前言 今天分享一款由微软官方发布的C#开源.免费.实用的Windows工具箱(帮助用户调整和简化Windows系统的体验,从而提高工作效率):Microsoft PowerToys. 项目介绍 Mic ...

  7. Golang标准库 container/list(双向链表) 的图文解说

    Golang标准库 container/list(双向链表) 的图文解说 提到单向链表,大家应该是比较熟悉的了.今天介绍的是 golang 官方库提供的 双向链表. 1.基础介绍 单向链表中的每个节点 ...

  8. 技本功|统计信息对SQL执行效率的影响

    在一个风和日丽的下午,奋哥哥突然接到业务方线上业务数据库CPU资源告警信息,立马放下手里的枸杞登录业务方阿里云控制台查看具体问题. 对于数据库当前正在发生中的问题,我们首先从数据库实时会话信息中尝试抓 ...

  9. ChatGPT 沦为了我的打工仔

    大家好,我是老章 最近在折腾之前搞的R-bookdown网站.Jekyll博客,还有刚上了Astro做的周刊.Astro Starlight做的文档站 R2ML:https://r2ml.zhangl ...

  10. WPF通用权限平台系统,正在研发中(基本于:VS2019 WPF+Devexpress21.2)

    WPF通用权限平台系统,正在研发中(基本于:VS2019 WPF+Devexpress21.2) 开发工具:VS2019 C# WPF 第三方工具:Devexpress21.2 数据库:SQLServ ...