SQL注入原理、类型、危害与防御
SQL注入的原理概念
SQL注入是一种常见的网络攻击技术,攻击者通过在Web应用程序的输入字段中注入恶意构造的SQL代码,以欺骗后端数据库执行非预期的SQL命令。这种攻击可以导致数据泄露、权限提升、数据篡改甚至系统瘫痪。SQL注入可以分为多种类型,每种类型利用不同的数据库特性和应用程序漏洞。
以下为SQL注入的类型:
数字型注入
攻击者在输入参数中注入数字值,利用这些值来改变原始的SQL查询逻辑。例如,通过在查询参数中添加额外的条件,可以绕过验证逻辑,实现非法的数据访问或操作。
字符串注入
攻击者在输入参数中注入字符串,这些字符串可能包含特殊字符,如单引号、双引号等,用以关闭或修改SQL语句的结构,从而执行攻击者期望的命令。
联合查询注入(UNION注入)
攻击者通过注入UNION语句,将自己构造的SELECT查询与原始查询的结果合并,从而获取额外的数据库信息。这种类型的注入通常需要攻击者猜测或探测原始查询的列数和类型。
布尔盲注
在无法直接观察到数据库返回结果的情况下,攻击者通过构造SQL语句,利用数据库的TRUE或FALSE响应来判断查询条件是否成立,从而间接获取数据库信息。
时间盲注
类似于布尔盲注,攻击者通过构造SQL语句引起数据库的延迟响应,根据响应时间的差异来推断数据库信息。这种方法适用于应用程序不显示数据库错误或直接响应的情况。
堆叠注入
攻击者在一个查询中执行多条SQL语句,通常通过在SQL语句末尾添加分号来分隔多个语句。这种注入方法可以用来执行如删除表、关闭数据库等恶意操作。
SQL注入的危害
SQL注入的危害主要体现在以下几个方面:
数据泄露:攻击者可以通过SQL注入获取数据库中的敏感信息,如用户密码、个人资料、商业机密等。
权限提升:攻击者可能通过执行SQL命令获得数据库的更高权限,甚至完全控制数据库。
数据篡改:攻击者能够修改或删除数据库中的记录,影响业务正常运行,甚至引发法律纠纷。
系统瘫痪:攻击者可能执行大量消耗系统资源的操作,导致数据库乃至整个系统崩溃。
在真实的SQL注入中通常涉及构造特定的输入,以触发数据库的非正常行为。例如,在用户名字段中输入' OR 1=1 --,这样构造的输入会导致SQL查询的WHERE条件始终为真,从而绕过登录验证。另一个例子是使用布尔盲注技术,通过注入的SQL语句导致数据库返回不同的页面加载时间,从而推断出数据库中的信息。
可以怎样进行SQL注入防御:
1、使用参数化查询(PreparedStatements):这是防止SQL注入的最有效方法之一。通过使用参数化查询,您可以将SQL命令的结构与数据分离,确保用户提供的数据不会被当作SQL代码执行。大多数现代编程语言和数据库连接库都支持参数化查询。
2、输入验证和过滤:对所有用户输入进行严格的验证,拒绝不符合预期格式的数据。使用白名单方法过滤输入,只允许预期的字符和格式通过。
3、使用存储过程:存储过程是预定义的SQL语句集合,可以接受参数,并且可以在数据库中进行重复使用。通过调用存储过程,可以减少直接在应用程序代码中编写SQL语句的需要,从而降低SQL注入的风险。
4、最小权限原则:应用程序连接数据库的账号应仅具有执行必要操作的最小权限,避免使用超级管理员权限运行日常查询。
5、使用ORM框架:对象关系映射(ORM)框架通常提供内建的安全措施来防止SQL注入,因为它们抽象化了数据库交互,减少了直接编写SQL语句的需求。
6、避免动态拼接SQL语句:不要在代码中拼接SQL语句,特别是不要将用户输入直接拼接到SQL命令中,这是SQL注入攻击的常见途径23。
7、使用安全的数据库连接:确保数据库连接使用安全的配置,关闭不必要的功能,限制外部访问。
定期更新和维护数据库软件:保持数据库管理系统和应用程序框架的最新状态,及时打补丁以修复已知的安全漏洞。
8、使用Web应用防火墙(WAF):WAF可以在Web请求到达应用服务器之前检测并阻止SQL注入攻击。
9、编码输出:对动态内容进行适当的HTML实体编码,可以防止攻击者插入脚本或HTML标签。
以上能防住SQL注入,但是需要注意配置正确,否则仍能被注入,比如PDO:
1、如果PDO配置为使用仿真预处理(emulated prepares),那么实际上仍然是在本地进行数据的转义和拼接,这仍可能会被注入.
2、如果开发者正确使用PDO的预处理语句,而是手动拼接了SQL语句,那么SQL注入的风险依然存在.
3、动态SQL片段:如果需要动态构建SQL语句的某些部分(如表名、列名或复杂的SQL片段),而这些部分又来源于用户输入,那么传统的预处理语句可能无法提供足够的保护.
所以
1、始终使用真实预处理(PDO::ATTR_EMULATE_PREPARES 设置为 false),以便让数据库服务器处理参数的转义.
2、对于所有外部输入,都应该使用预处理语句和参数绑定,而不是手动拼接SQL语句.
3、对于不能通过预处理语句安全处理的动态SQL部分,应当进行严格的验证和清洁,确保它们不会被解释为SQL代码.
相关文章:
SQL注入原理、类型、危害与防御
SQL注入的原理概念 SQL注入是一种常见的网络攻击技术,攻击者通过在Web应用程序的输入字段中注入恶意构造的SQL代码,以欺骗后端数据库执行非预期的SQL命令。这种攻击可以导致数据泄露、权限提升、数据篡改甚至系统瘫痪。SQL注入可以分为多种类型…...
第2讲 数据库系统的结构抽象与演变
基本内容 数据库系统的标准结构?数据模型?数据库系统的演变与发展?重难点 一组概念的区分:三级模式两层映像,物理独立性和逻辑独立性一组概念的区分:数据→模式→数据模型几种数据模型的差异:网状/层次模型→关系模型→数据模型数据库系统的标准结构 (1)数据库系统的分…...
Git创建开发分支命名规则
git checkout -b feature/branchname 和 git checkout -b branchname 这两条命令的主要区别在于新分支的命名。 主要区别 分支命名: git checkout -b feature/branchname:新分支的名字是 feature/branchname,表示该分支属于一个特性开发&…...
【纯前端excel导出】vue2纯前端导出excel,使用xlsx插件,修改样式、合并单元格
一、使用第三方插件 1、安装 npm install xlsx-js-style 2、引入 import xlsx from xlsx-js-style xlsx插件是基础的导出,不可以修改样式,直接xlsx-style插件式修改样式的,所以这里直接用二者合体插件即可 二、页面使用 1、数据源 [{"…...
如何在极速浏览器中实现谷歌浏览器的扩展功能
在当今数字化时代,浏览器扩展功能极大地增强了我们的在线体验。尤其是谷歌浏览器,以其丰富的扩展生态而闻名。但是,如果你想在极速浏览器中使用这些谷歌浏览器的扩展功能,该怎么办呢?本文将为你详细解析如何实现这一目…...
Web安全 - 跨站点请求伪造CSRF(Cross Site Request Forgery)
文章目录 OWASP 2023 TOP 10CSRF 导图CSRF的基本概念CSRF的工作原理常见CSRF攻击模式CSRF防御策略补充建议应用场景实战防御策略选择1. CSRF Token(首选)2. SameSite Cookie属性3. 验证Referer和Origin4. 多因素认证 实现方案CSRF Token实现SameSite Coo…...
C++游戏开发完整学习路径
C游戏开发完整学习路径 引言 随着游戏行业的迅速发展,C作为主要的游戏开发语言,因其高效性和灵活性,依然受到广泛欢迎。C不仅在大型游戏开发中被广泛使用,而且在游戏引擎的构建、性能优化和复杂算法的实现中也扮演着关键角色。本…...
vue3之 shallowRef、markRaw
shallowRef 用于创建一个浅层响应式引用,只对顶层属性进行响应式处理。 markRaw 用于标记一个对象,使其完全跳过 Vue 的响应式系统。 这两者都可以用于优化性能,避免不必要的响应式开销,特别是在处理大型对象或第三方库对象时。 …...
影刀RPA实战:操作Mysql数据库
1.摘要 影刀RPA(Robotic Process Automation)是一种软件自动化工具,它可以模拟人类用户执行各种重复性任务,其中包括对数据库的操作。 我们可以使用软件自动化指令,通过获取数据库窗口对象来操作数据库,也…...
【c++】c++11多线程开发
2 C多线程 本文是参考爱编程的大丙c多线程部分内容,按照自己的理解对其进行整理的一篇学习笔记,具体一些APi的详细说明请参考大丙老师教程。 代码性能的问题主要包括两部分的内容,一个是前面提到资源的获取和释放,另外一个就是多…...
PW37R_V1 产品规格书
概述 PW37R_V1是一款采用3.7英寸黑白红三色电子纸显示的电子标签,采用一种先进的无线自动更新系统,实现无线传输。 通过http,mqtt协议更新数据和控制该款电子标签的显示等操作,显示内容可自定义。内置电池供电,可Typ…...
android11 usb摄像头添加多分辨率支持
部分借鉴于:https://blog.csdn.net/weixin_45639314/article/details/142210634 目录 一、需求介绍 二、UVC介绍 三、解析 四、补丁修改 1、预览的限制主要存在于hal层和framework层 2、添加所需要的分辨率: 3、hal层修改 4、frameworks 5、备…...
【开源免费】基于SpringBoot+Vue.JS房屋租赁系统(JAVA毕业设计)
本文项目编号 T 020 ,文末自助获取源码 \color{red}{T020,文末自助获取源码} T020,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...
JavaScript全面指南(二)
🌈个人主页:前端青山 🔥系列专栏:Javascript篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript全面指南(二) 目录 21、说明如何使用JavaScript提交表单? 2…...
Nginx:Linux配置Nginx
目录 一、环境安装1.1 GCC编译器1.2 PCRE1.3 Zlib1.4 OpenSSL1.5 快速下载 二、Nginx源码简单安装2.1 下载安装包2.2 解压2.3 进入资源文件中2.4 编译、安装 三、Yum安装四、Nginx源码复杂安装4.1 参数介绍4.2 参数配置 五、卸载Nginx5.1 关闭Nginx进程5.2 将安装的Nginx删除5.…...
WebRTC音频 04 - 关键类
WebRTC音频01 - 设备管理 WebRTC音频 02 - Windows平台设备管理 WebRTC音频 03 - 实时通信框架 WebRTC音频 04 - 关键类(本文) 一、前言: 在WebRTC音频代码阅读过程中,我们发现有很多关键的类比较抽象,搞不清楚会导致代码阅读一脸懵逼。比如…...
Elasticsearch:Redact(编辑) processor
Redact 处理器使用 Grok 规则引擎来隐藏输入文档中与给定 Grok 模式匹配的文本。该处理器可用于隐藏个人身份信息 (Personal Identifying Information - PII),方法是将其配置为检测已知模式,例如电子邮件或 IP 地址。与 Grok 模式匹配的文本将被替换为可…...
O2OA结合备份脚本和定时任务进行数据库的备份,我们以MySQL数据库为例
概述 系统运行一段时间后,可能发生各种情况导致数据丢失,如硬件故障、人为错误、软件错误、病毒攻击等。定期备份可以帮助您保护数据免受这些风险的影响,以便在需要时能够恢复数据。 O2OA应用本身可以通过dump配置每天自定备份数据ÿ…...
Python自动化办公:批量提取PDF中的表格到Excel
在现代办公环境中,处理大量的PDF文件并提取其中的表格数据是一项常见而繁琐的任务。手动复制粘贴不仅耗时耗力,还容易出错。Python作为一种功能强大的编程语言,提供了丰富的工具包,可以高效地解决这一问题。本文将介绍如何使用Pyt…...
selenium有多个frame页时的操作方法(5)
之前文章我们提到,在webdriver.WebDriver类有一个switch_to方法,通过switch_to.frame()可以切换到不同的frame页然后才再定位某个元素做一些输入/点击等操作。 比如下面这个测试网站有2个frame页:http://www.sahitest.com/demo/framesTest.h…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
