当前位置: 首页 > article >正文

【网络安全】SQL注入

        如果文章不足还请各位师傅批评指正!

        想象一下,你经营着一家咖啡店,顾客可以通过店内的点单系统下单。这个系统会根据顾客的输入,向后厨发送指令,比如“为顾客A准备一杯拿铁”。

        然而,如果有个不怀好意的顾客,在点单时输入了“给我一杯拿铁;再给所有顾客免费升级到特大杯”,那么后厨可能会按照这个指令执行,导致你的咖啡店损失惨重。

        在网络安全领域,这种类似的情况就是SQL注入。SQL注入是指攻击者在Web应用程序中输入恶意的SQL代码片段,这些代码片段会与原本的数据库查询语句合并执行,从而欺骗数据库执行非授权的操作。就好比在正常的订单系统中偷偷加入了一些额外的指令,让数据库按照攻击者想要的方式去执行。

一、什么是 SQL 注入

        SQL 注入是一种常见的网络攻击手段,它专门针对程序员在编写代码时的疏忽。

        你在网上注册了一个账号,填写用户名和密码后点击提交。正常情况下,网站会将你输入的信息发送到数据库进行验证,看看用户名是否存在,密码是否正确。但如果网站对用户输入的数据没有进行严格的检查,黑客就有机会在你输入的内容里添加一些特殊的 SQL 语句。比如,在用户名框里输入 “' or '1'='1”(别小看这串字符,它可是有大 “威力” 的),这时候网站传给数据库的查询语句就可能变成了 “SELECT * FROM users WHERE username = ' ' or '1'='1' AND password = ' 你输入的密码 '” 。由于 “1'='1” 这个条件永远成立,黑客就能绕过密码验证,轻松登录系统,获取他们不该得到的数据,这就是 SQL 注入的可怕之处!

二、SQL 注入的类型

(一)联合查询注入

        这种注入方式就像是黑客找到了网站数据显示的 “秘密通道”。

        当网站有明确的数据回显位置时,黑客就能利用它来获取各种信息。比如说,有一个学生信息查询网站,输入学生 ID 就能显示学生的姓名、年龄等信息。黑客发现这个网站存在注入漏洞后,就可以通过 “order by” 语句来判断数据库表的列数,假设发现有 3 列。接着,他们使用 “union select” 语句,构造出类似 “-1' union select 1,user (),database () --+” 这样的攻击语句(这里的 “-1” 是为了让原查询不返回数据,“user ()” 和 “database ()” 是 SQL 函数,分别用于获取数据库的使用者和当前数据库名),网站就会把数据库的使用者和数据库名显示出来,黑客就这样轻松获取到了敏感信息。

(二)报错注入

        有些网站比较 “粗心”,虽然没有给黑客提供数据回显的位置,但却没有屏蔽数据库的报错信息,这就给了黑客可乘之机。

        报错注入就是利用这一点,通过一些特殊的函数让数据库报错,然后从报错信息中获取数据。例如 “updatexml ()” 函数,黑客在访问网站时输入 “?id=1' and updatexml (1,concat (0x7e,(select user ()),0x7e),1) --+” ,数据库就会报错,而报错信息里会显示出当前数据库的使用者信息。就好像黑客故意在数据库里制造混乱,然后从混乱中找到他们想要的东西。

(三)布尔盲注

        布尔盲注就像是黑客在和网站玩猜谜游戏。

        当网站关闭了错误回显和数据回显,但页面会根据输入的对错发生变化时,黑客就可以用这种方法。比如一个登录页面,正常输入用户名和密码,页面会提示 “登录成功” 或 “用户名或密码错误” 。黑客通过构造 “and 1=1” 和 “and 1=2” 这样的语句,如果输入 “and 1=1” 时页面显示正常,输入 “and 1=2” 时页面有变化,就说明存在注入点。然后,他们利用 “substr ()”“ascii ()” 等函数,结合二分法来逐个猜解数据库里的数据。这就好比黑客每次问网站一个关于数据的 “小问题”,根据网站的回答来慢慢拼凑出完整的数据。

(四)时间盲注

        时间盲注是最 “狡猾” 的一种注入方式。

        当网站没有任何形式的回显,连错误信息都不显示时,黑客就会利用睡眠函数来判断注入是否成功。在 MySQL 里有个 “Benchmark ()” 函数可以用来测试性能,黑客会构造类似 “?id=1' and if (ascii (substr (user (),1,1))>1, sleep (5),0) --+” 的语句。如果页面加载时间明显变长了 5 秒,就说明这个语句被执行了,也就意味着存在注入点。这就好像黑客在网站上偷偷设置了一个 “定时器”,通过观察网站的反应时间来获取信息。

(五)堆叠注入

        堆叠注入在 MySQL 上不太常见,但在 Mssql 中比较多见。

        它就像是黑客找到了一条能直接进入数据库的 “捷径”,可以用分号分割来执行多个语句。比如,黑客输入 “root';DROP database user;”,服务器生成的 SQL 语句就会变成 “select * from user where name='root';DROP database user;” ,这样第一条语句查询数据,第二条语句就能把整个 user 数据库删除,危害极大。

三、注入点方式类型

(一)数字型注入

        这种注入发生在网站对数字类型的参数处理不当的时候。

        比如一个商品详情页面,URL 可能是 “xxx.com/product?id=1” ,这里的 “id” 就是数字型参数。如果网站没有对这个参数进行严格验证,黑客就可以尝试在 “id” 参数后添加特殊的 SQL 语句,如 “xxx.com/product?id=1; DROP TABLE products;”(当然,实际情况中可能需要根据数据库类型和网站架构进行调整),这样就有可能导致商品信息表被删除。

(二)字符型注入

        字符型注入通常出现在处理字符串参数的地方,比如登录页面的用户名和密码输入框。

        就像前面提到的万能密码 “' or '1'='1” ,就是利用了字符型注入的漏洞。黑客在输入框中输入特殊字符和 SQL 语句,让数据库的查询逻辑发生改变,从而达到非法访问的目的。

(三)搜索型注入

        搜索框也是黑客经常攻击的目标。

        当你在网站的搜索框里输入关键词时,如果网站没有对输入进行过滤,黑客就可以输入特殊的 SQL 语句。比如,在搜索框输入 “' or 1=1 --” ,原本的搜索语句可能就会变成 “SELECT * FROM articles WHERE title LIKE '%' or 1=1 -- %'” ,这样黑客就能获取到所有文章的信息,而不仅仅是符合搜索关键词的文章。

四、如何预防SQL注入攻击?

(一)输入验证

对用户输入的数据进行严格的验证和过滤,确保输入中不包含恶意的SQL代码。就像咖啡店要仔细检查顾客的订单,确保没有不合理的要求一样。

(二)使用预编译语句

预编译语句(如PreparedStatement)可以在执行前对SQL语句进行编译,将用户输入作为参数传递,这样用户输入就不会改变SQL语句的结构,从而有效防止SQL注入。

(三)限制数据库权限

为Web应用程序设置专用的数据库用户,并严格限制该用户的权限,使其只能执行必要的操作。这就像是给咖啡店的员工设置权限,让他们只能接触和操作自己职责范围内的事物,避免因权限过大而引发问题。

(四)隐藏错误信息

避免将详细的数据库错误信息直接显示在页面上,而是显示友好的错误提示。这样可以防止攻击者从错误信息中获取敏感信息,就像咖啡店的后厨出现问题时,不会直接把错误的订单细节展示给顾客,而是由店员出面友好地解释情况。

五、SQL相关靶场

        用心的小伙伴可以发现我在主页自己搭建sqllab搭建报错,问题应该出在数据库冲突,还没解决,总之新手伙伴们可以试下这个在线连接,网上也可以找到相关通关教程。

        在线靶场:https://sqli-labs.bachang.org/

        sql-libs是一个专门用于学习和测试SQL注入的开源平台,它提供了一系列的注入场景和关卡,帮助开发者和安全测试人员深入理解SQL注入的原理和防范方法。

        再次感谢!是小白是小白是小白,如果文章不足还请师傅批评指正。感谢~

相关文章:

【网络安全】SQL注入

如果文章不足还请各位师傅批评指正! 想象一下,你经营着一家咖啡店,顾客可以通过店内的点单系统下单。这个系统会根据顾客的输入,向后厨发送指令,比如“为顾客A准备一杯拿铁”。 然而,如果有个不怀好意的顾客…...

Transformer Decoder-Only 参数量计算

Transformer 的 Decoder-Only 架构(如 GPT 系列模型)是当前大语言模型的主流架构,其参数量主要由以下几个部分组成: 嵌入层(Embedding Layer)自注意力层(Self-Attention Layers)前馈…...

uni-app 中的条件编译与跨端兼容

uni-app 为了实现一套代码编译到多个平台(包括小程序,App,H5 等),引入了条件编译机制。 通过条件编译,我们可以针对不同的平台编写特定的代码,从而实现跨端兼容。 一、条件编译的作用 平台差异…...

<C#>log4net 的配置文件配置项详细介绍

log4net 是一个功能强大的日志记录工具&#xff0c;通过配置文件可以灵活地控制日志的输出方式、格式、级别等。以下是对 log4net 配置文件常见配置项的详细介绍&#xff1a; 根元素 <log4net> 这是 log4net 配置文件的根元素&#xff0c;所有配置项都要包含在该元素内…...

excel单元格如果是日期格式,在C#读取的时候会变成45807,怎么处理

excel单元格如果是日期格式&#xff0c;在C#读取的时候会变成45807&#xff0c;怎么处理 excel单元格如果是日期格式&#xff0c;在C#读取的时候会变成45807&#xff0c;怎么处理 在 C# 中&#xff0c;Excel 日期被表示为一个数字&#xff0c;这是因为 Excel 内部将日期存储为…...

Unity接入SDK之修改Unity启动页面

原理就是在Android Studio新建Activity继承UnityPlayerActivity&#xff0c;然后再Unity中修改启动页面。 一&#xff0c;Android Studio篇 首先新建一个项目&#xff0c; 新建完成之后基于新建的项目新建一个module&#xff0c;选择为Android Library类型 新建的Library再目…...

yarn workspace使用指南

作用 Yarn workspace 是 Yarn 包管理工具中的一个功能&#xff0c;主要用于管理多包项目&#xff08;monorepo&#xff09;。它的主要作用如下&#xff1a; 支持多包结构&#xff1a;允许在一个仓库中管理多个独立的包或项目。项目间依赖管理&#xff1a;方便地在不同包之间添…...

[学习]RTKLib详解:datum.c、download.c与lambda.c

RTKLib详解: datum.c、download.c 与 lambda.c 本文是 RTKLlib详解 系列文章的一篇&#xff0c;目前该系列文章还在持续总结写作中&#xff0c;以发表的如下&#xff0c;有兴趣的可以翻阅。 [学习] RTKlib详解&#xff1a;功能、工具与源码结构解析 [学习]RTKLib详解&#xff…...

VUE el-select下拉框动态设置禁用,删除后恢复可选择

场景&#xff1a;点击新增添加按钮&#xff0c;列表table会新增一条包含下拉菜单的数据&#xff0c;如果其中任何一个下拉框选择了某个值&#xff0c;那么新增的下拉菜单的选项中该值是禁用状态&#xff0c;只能选择其他未被选中过的值。点击删除按钮后&#xff0c;已禁用的选项…...

FPGA----基于ALINX提供的debian实现TCF

引言:接上问,我们使用自制的image.ub和boot.bin以及ALINX提供的debian8根文件系统,构建了petalinux,但是经测试,该文件系统无法启用TCF服务,即无法与Xilinx SDK建立连接,那么我们应该如何解决? FPGA----基于ZYNQ 7020实现定制化的EPICS通信系统-CSDN博客文章浏览阅读4…...

木马查杀篇—Opcode提取

【前言】 介绍Opcode的提取方法&#xff0c;并探讨多种机器学习算法在Webshell检测中的应用&#xff0c;理解如何在实际项目中应用Opcode进行高效的Webshell检测。 Ⅰ 基本概念 Opcode&#xff1a;计算机指令的一部分&#xff0c;也叫字节码&#xff0c;一个php文件可以抽取出…...

1.7 方向导数

&#xff08;底层逻辑演进脉络&#xff09;从"单车道"到"全路网"的导数进化史&#xff1a; 一、偏导数奠基&#xff08;1.6核心&#xff09; 诞生背景&#xff1a;多元函数分析需求 当变量间存在耦合关系时&#xff08;如房价面积单价装修成本&#xff09…...

设计模式系列(01):总览与引导

设计模式系列(01):总览与引导 本文为设计模式系列第1篇,定位为总览和引导,系统梳理设计模式的核心思想、分类、UML、设计原则、典型场景、学习建议与常见误区,适合系统学习与团队协作。 目录 1. 前言2. 设计模式简介3. UML与设计模式4. 术语解释5. UML工具与PlantUML6. 面…...

国产化Excel处理控件Spire.XLS系列教程:如何通过 C# 删除 Excel 工作表中的筛选器

在 Excel 文件中&#xff0c;筛选器&#xff08;Filter&#xff09;是一个常用的数据处理工具&#xff0c;可以帮助用户快速按条件筛选数据行。但在数据整理完成、导出、共享或打印之前&#xff0c;往往需要 删除 Excel 工作表中的筛选器&#xff0c;移除列标题中的下拉筛选按钮…...

第二篇 客户端脚本安全

同源策略 限制了来自不同的"dociment"或脚本&#xff0c;对当前"dociment"读取或设置一些属性。 不同源&#xff1a;host&#xff08;域名或ip&#xff09;&#xff0c;子域名&#xff0c;端口&#xff0c;协议。 对于当前页面来说&#xff0c;页面的源…...

[sklearn] 特征工程

一.字典数据抽取 def dictvec():"""字典数据抽取:return: None"""# 实例化# sparse改为True,输出的是每个不为零位置的坐标&#xff0c;稀疏矩阵可以节省存储空间dict DictVectorizer(sparseFalse) #矩阵中存在大量的0&#xff0c;sparse存储只…...

CI/CD与DevOps流程流程简述(提供思路)

一 CI/CD流程详解&#xff1a;代码集成、测试与发布部署 引言 在软件开发的世界里&#xff0c;CI/CD&#xff08;持续集成/持续交付&#xff09;就像是一套精密的流水线&#xff0c;确保代码从开发到上线的整个过程高效、稳定。我作为一名资深的软件工程师&#xff0c;接下来…...

S7-1500——零基础入门1、工业编程基本概念

工业编程基本概念 一,数制与基本数据类型二,数字量信号三,模拟量信号一,数制与基本数据类型 本节主要内容 类别内容主题数制与基本数据类型数制讲解十进制、十六进制、二进制及其进位规则;基数、位权概念数据类型介绍PLC 使用的数据类型:未序列数据类型(bit、byte、wor…...

六、快速启动框架:SpringBoot3实战

六、快速启动框架&#xff1a;SpringBoot3实战 目录 一、SpringBoot3介绍 1.1 SpringBoot3简介1.2 系统要求1.3 快速入门1.4 入门总结 二、SpringBoot3配置文件 2.1 统一配置管理概述2.2 属性配置文件使用2.3 YAML配置文件使用2.4 批量配置文件注入2.5 多环境配置和使用 三、…...

万兴PDF-PDFelement v11.4.13.3417

万兴PDF专家(Wondershare PDFelement)是一款国产PDF文档全方位解决方案.万兴PDF编辑器软件万兴PDF中文版,专注于PDF的创建,编辑,转换,签名,压缩,合并,比较等功能.万兴PDF专业版PDF编辑软件,以简约风格及强大的功能在国外名声大噪,除了传统功能外,还提供OCR扫描,表格识别,创建笔…...

LSP里氏替换原则

LSP强调子类必须能够替换父类。即子类应该具有与父类相同的行为和功能&#xff0c;而不仅仅是继承父类的属性和方法。LSP是对继承机制的约束规范、是指导接口与实现的设计原则。 LSP关键点 前置条件不能强化&#xff1a;子类方法的参数类型必须与父类相同或者更为宽松。后置条…...

机器学习-无量纲化与特征降维(一)

一.无量纲化-预处理 无量纲&#xff0c;即没有单位的数据 无量纲化包括"归一化"和"标准化"&#xff0c;这样做有什么用呢&#xff1f;假设用欧式距离计算一个公司员工之间的差距&#xff0c;有身高&#xff08;m&#xff09;、体重&#xff08;kg&#x…...

C语言复习--柔性数组

柔性数组是C99中提出的一个概念.结构体中的最后⼀个元素允许是未知大小的数组&#xff0c;这就叫做柔性数组成员。 格式大概如下 struct S { int a; char b; int arr[];//柔性数组 }; 也可以写成 struct S { int a; char b; int arr[0];//柔性数组 }; …...

图形化编程如何从工具迭代到生态重构?

一、技术架构的范式突破 在图形化编程领域&#xff0c;技术架构的创新正在重塑行业格局。iVX 作为开源领域的领军者该平台通过图形化逻辑设计&#xff0c;将传统文本编程需 30 行 Python 代码实现的 "按钮点击→条件判断→调用接口→弹窗反馈" 流程&#xff0c;简化…...

法国蒙彼利埃大学团队:运用元动力学模拟与马尔可夫状态模型解锁 G 蛋白偶联受体构象动态机制

背景简介 在生命科学领域&#xff0c;G 蛋白偶联受体&#xff08;GPCRs&#xff09;一直是研究的热点。它作为膜蛋白家族的重要成员&#xff0c;承担着细胞对多种刺激的响应任务&#xff0c;从激素、神经递质到外源性物质的信号传导都离不开它。据估计&#xff0c;约三分之一的…...

【PostgreSQL】不开启归档模式,是否会影响主从库备份?

PostgreSQL 不开启归档模式&#xff08;archive_mode off&#xff09;不会直接影响基于流复制&#xff08;Streaming Replication&#xff09;的主从备份&#xff0c;但可能会在特定场景下影响复制的健壮性和恢复能力。以下是详细分析&#xff1a; 1. 流复制的核心机制 流复制…...

网页Web端无人机直播RTSP视频流,无需服务器转码,延迟300毫秒

随着无人机技术的飞速发展&#xff0c;全球无人机直播应用市场也快速扩张&#xff0c;从农业植保巡检到应急救援指挥&#xff0c;从大型活动直播到智慧城市安防&#xff0c;实时视频传输已成为刚需。预计到2025年&#xff0c;全球将有超过1000万架商用无人机搭载直播功能&#…...

Shell脚本编程3(函数+正则表达式)

1.函数 1.1 定义 简单来讲&#xff0c;所谓函数就是把完成特定功能&#xff0c;并且多次使用的一组命令或者语句封装在一个固定的结构中&#xff0c;这个结构我们就叫做函数。从本质上讲&#xff0c;函数是将一个函数名与某个代码块进行映射。也就是说&#xff0c;用户在定义了…...

数据结构-堆排序

1.定义 -堆中每个节点的值都必须大于等于&#xff08;或小于等于&#xff09;其左右子节点的值。如果每个节点的值都大于等于其子节点的值&#xff0c;这样的堆称为大根堆&#xff08;大顶堆&#xff09;&#xff1b;如果每个节点的值都小于等于其子节点的值&#xff0c;称为…...

HTML简单语法标签(后续实操:云备份项目)

以下是一些 HTML 的简单语法标签及其功能介绍&#xff1a; 基本结构标签 <!DOCTYPE html>&#xff1a;声明文档类型为 HTML5<html>&#xff1a;HTML 文档的根标签<head>&#xff1a;包含文档元数据&#xff08;如标题、字符编码等&#xff09;<title>…...