【渗透入门】SQL注入

声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。

文章目录

  • 什么是sql注入
  • sql注入举例
  • 防御方式
  • 练习靶场


什么是sql注入

SQL注入是一种网络安全漏洞,攻击者利用这个漏洞将恶意的SQL代码插入到Web应用程序的输入字段中。当这些输入数据被应用程序的数据库查询使用时,恶意的SQL代码也会被执行。这可能导致数据泄露、数据丢失、数据破坏、非授权访问、会话劫持等安全问题。

sql注入举例

SQL注入通常发生在应用程序使用用户输入构建SQL查询时,而没有对输入进行适当的处理或验证。以下是一个简单的示例,展示了最基本的SQL注入攻击:

假设有一个Web应用程序,它使用以下PHP代码来查询数据库中的用户信息:

<?php
// 假设$_GET['id']是用户输入的ID
$id = $_GET['id'];// 构建SQL查询,这里存在SQL注入的风险
$sql = "SELECT * FROM users WHERE id = '$id'";// 执行SQL查询
$result = mysqli_query($conn, $sql);// 处理查询结果
if ($result) {while ($row = mysqli_fetch_assoc($result)) {echo "Username: " . $row['username'] . "<br>";echo "Email: " . $row['email'] . "<br>";}
} else {echo "Error: " . mysqli_error($conn);
}
?>

在这个例子中,如果用户输入的id1,那么SQL查询将会正常执行。但是,如果攻击者输入的是1' --,那么SQL查询将会变成:

SELECT * FROM users WHERE id = '1' --'

这里的--是SQL中的注释符号,它会使得后面的代码被忽略,从而绕过id的检查。如果数据库没有其他安全措施,攻击者可以继续添加更多的SQL代码,比如:

1' UNION SELECT * FROM users --

这将导致查询返回数据库中所有用户的列表,而不是仅仅查询ID为1的用户。这就是一个基本的SQL注入攻击。

防御方式

为了防止这种攻击,可使用参数化查询,如下所示:

<?php
$id = $_GET['id'];// 使用参数化查询来防止SQL注入
$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("s", $id); // "s" 表示参数是字符串类型
$stmt->execute();$result = $stmt->get_result();if ($result) {while ($row = $result->fetch_assoc()) {echo "Username: " . $row['username'] . "<br>";echo "Email: " . $row['email'] . "<br>";}
} else {echo "Error: " . $conn->error;
}
?>

在这个修改后的代码中,prepare方法创建了一个参数化查询,bind_param方法绑定了用户输入的id作为参数,这样即使用户输入了恶意代码,它也不会被执行,因为参数化查询会将输入视为数据而不是代码。

练习靶场

sqli-labs是一个专业的SQL注入练习平台,适用于GET和POST场景,包含了多种注入类型。
GitHub地址:https://github.com/Audi-1/sqli-labs


为什么我眼睛一睁开,你就不是我的了。

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

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

相关文章

【Android源码】Gerrit安装

前言 如果你打开 https://android.googlesource.com/platform/manifest&#xff0c;就会发现&#xff0c;google官方管理Android源码&#xff0c;使用的是Gerrit。Android系统源码是非常大的&#xff0c;用Git肯定是不适合。对于大型项目&#xff0c;得用Gerrit&#xff0c;今…

NoSQL之Redis高可用与优化

一、Redis高可用 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%、99.99%、99.999%等等&#xff09;。 但是在Redis语境中&#xff0c;高可用的含义似乎要宽泛一些&#xff0c;除了保证…

二叉树的链式访问 与 二叉树专题

目录 二叉树的前、中、后序遍历求二叉树第K层节点的个数二叉树查找值为x的节点leetcode相同的树对称二叉树二叉树的前序遍历另一棵子树牛客 二叉树的遍历 二叉树的前、中、后序遍历 1.前序遍历&#xff1a;先访问根节点&#xff0c;再访问左子树&#xff0c;最后访问右子树 根…

【备忘】fastadmin 如何获取列表选中行的pk

去官方搜没搜出来&#xff0c;还得是万能的网友厉害。 //获取选中项 $(document).on("click", ".btn-selected", function () {// 获取选中项idsconsole.log(JSON.stringify(Table.api.selectedids(table)));// 获取选中项所有数据console.log(JSON.strin…

输入一个整数n,输出n的约数为质数的数?两个问题n的约数问题和n的质数问题

输入一个整数n&#xff0c;输出n的约数为质数的数&#xff1f; 一.首先解决n的质数的问题&#xff08;1&#xff09;枚举法&#xff08;2&#xff09;埃氏筛 二.解决n的质数约数问题 一.首先解决n的质数的问题 &#xff08;1&#xff09;枚举法 考虑质数的定义&#xff1a;在大…

conda中创建环境并安装tensorflow1版本

conda中创建环境并安装tensorflow1版本 一、背景二、命令三、验证一下 一、背景 最近需要使用tensorflow1版本的&#xff0c;发个记录&#xff01; 二、命令 conda create -n tf python3.6 #创建tensorflow虚拟环境 activate tf #激活环境&#xff0c;每次使用的时候都…

理解策略梯度方法:从REINFORCE到PPO

今年2月的时候&#xff0c;导师突然告诉我Ron William离世了。他算是我导师的 a life time friend&#xff0c;关系很好&#xff0c;我做毕业论文的时候&#xff0c;他还来参与了论文的答辩。Ron是一个很友善的老头&#xff0c;和他在强化学习领域的影响力比起来&#xff0c;本…

汽车信息安全--数据安全:图像脱敏

General 随着车联网的发展&#xff0c;汽车越来越智能化&#xff0c;就像是一部“装着四个轮子的手机”。 有人说&#xff0c;智能手机就如同一部窃听器&#xff0c;无论你开机或者关机&#xff0c;它都会无时不刻地监听着用户的一举一动。 可想而知&#xff0c;智能车辆上…

马工程刑法期末复习笔记重点2

马工程刑法期末复习笔记重点2

SpringBoot 参数校验

参数校验 引入springvalidation依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency>参数前添加Pattern public Result registry(Pattern(regexp &qu…

Java面向对象练习(2.商品类)(2024.7.4)

商品类 package Supermarket20240704;public class Commodity {private String name;private double price;private int inventory;public Commodity(){};public Commodity(String name, double price, int inventory){this.name name;this.price price;this.inventory inv…

Java核心技术【十九】Iterator与增强for循环

Java中的Iterator与增强for循环 在Java编程中&#xff0c;迭代是处理集合元素的一种常见操作。Java提供了多种迭代集合元素的方式&#xff0c;其中最常用的两种是Iterator和增强for循环&#xff08;也称为“for-each”循环&#xff09;。本文将深入探讨这两种迭代方式的特性和…

CLAM用于弱监督WSI分析

计算病理学&#xff08;computational pathology&#xff09;下的深度学习方法需要手动注释大型 WSI 数据集&#xff0c;并且通常存在领域适应性和可解释性较差的问题。作者报告了一种可解释的弱监督深度学习方法&#xff0c;只需要WSI级标签。将该方法命名为聚类约束注意力多实…

Perl 格式化输出:提升代码可读性的技巧

引言 Perl 是一种功能强大的脚本语言&#xff0c;广泛用于文本处理、系统管理、网络编程等多个领域。在 Perl 编程中&#xff0c;代码的格式化输出不仅有助于提升代码的可读性&#xff0c;还能增强程序的用户体验。本文将详细介绍如何在 Perl 中实现代码的格式化输出。 Perl …

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(二十一)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 31 节&#xff09; P31《30.数据持久化-关系型数据库》 上一节中学习了使用用户首选项的方式实现数据持久化&#xff0c;但用户首…

微机原理 选择题

D C MOV、PUSH、POP、XLAT&#xff08;查表&#xff09;、IN、OUT不影响标志位 D B D C D C D B 1. (单选题, 5分)8位无符号数(字节)表示的数值范围是( ), 16位无符号数(字)表示的数值范围是( )。 A. 0~128 0~32768B. 0~255 0~655…

为什么 npm run serve 正常,npm run build 就报错:digital envelope routines::unsupported

这个错误通常与 Node.js 版本和使用的加密算法有关。让我解释一下原因和可能的解决方案&#xff1a; 错误原因 这个错误&#xff08;“error:0308010C:digital envelope routines::unsupported”&#xff09;通常发生在以下情况&#xff1a; 使用较新版本的 Node.js&#xf…

Vscode快捷键崩溃

Vscode快捷键崩溃 Linux虚拟机下使用vscode写代码【ctrlA&#xff0c;CtrlC&#xff0c;CtrlV】等快捷键都不能使用&#xff0c;还会出现“NO text insert“等抽象的指令&#xff0c;问题就是不知道什么时候装了一个VIM插件&#xff0c;让他滚出电脑》》》

监听 web 容器内的网络请求(错误的方案)

需求 iOS 项目中 wkwebview 实现的 web 容器&#xff0c;需要监听 web 容器内的所有网络请求 实现 在 iOS 项目中使用 WKWebView 实现的 Web 容器&#xff0c;监听 Web 容器内的网络请求是一个常见需求。可以通过实现 WKURLSchemeHandler 协议来处理自定义的 URL scheme&#…

通过 API 接口管理 Kafka

文章目录 前言Topic 管理配置管理消费者群组管理查看消费者群组修改消费者群组 为主题添加分区从主题中删除消息首领选举 前言 除了通过命令行和可视化界面对 kafka 进行管理&#xff0c;也可以通过 AdminClient的 API 对 kafka 进行管理。本文将介绍如何通过 AdminClient 进行…