【网络安全】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注入的原理和防范方法。

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

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

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

相关文章

解决Mawell1.29.2启动SQLException: You have an error in your SQL syntax问题

问题背景 此前在openEuler24.03 LTS环境下的Hive使用了MySQL8.4.2,在此环境下再安装并启动Maxwell1.29.2时出现如下问题 [ERROR] Maxwell: SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version f…

Oracle APEX IR报表列宽调整

目录 1. 问题:如何调整Oracle APEX IR报表列宽 2. 解决办法 1. 问题:如何调整Oracle APEX IR报表列宽 1-1. 防止因标题长而数据短,导致标题行的文字都立起来了,不好看。 1-2. 防止因数据太长而且中间还没有空格,把列…

pytorch 14.3 Batch Normalization综合调参实践

文章目录 一、Batch Normalization与Batch_size综合调参二、复杂模型上的Batch_normalization表现1、BN对复杂模型(sigmoid)的影响2、模型复杂度对模型效果的影响3、BN对复杂模型(tanh)的影响 三、包含BN层的神经网络的学习率优化…

Model.eval() 与 torch.no_grad() PyTorch 中的区别与应用

Model.eval() 与 torch.no_grad(): PyTorch 中的区别与应用 在 PyTorch 深度学习框架中,model.eval() 和 torch.no_grad() 是两个在模型推理(inference)阶段经常用到的函数,它们各自有着独特的功能和应用场景。本文将详细解析这两…

Swagger go中文版本手册

Swaggo(github.com/swaggo/swag)的注解语法是基于 OpenAPI 2.0 (以前称为 Swagger 2.0) 规范的,并添加了一些自己的约定。 主要官方文档: swaggo/swag GitHub 仓库: 这是最权威的来源。 链接: https://github.com/swaggo/swag重点关注: README.md: 包含了基本的安装、使用…

物联网设备远程管理:基于代理IP的安全固件更新通道方案

在物联网设备远程管理中,固件更新的安全性直接关系到设备功能稳定性和系统抗攻击能力。结合代理IP技术与安全协议设计,可构建安全、高效的固件更新通道。 一、代理IP在固件更新中的核心作用 网络层隐匿与路由优化 隐藏更新源服务器:通过代理I…

【C++重载操作符与转换】句柄类与继承

目录 一、句柄类的基本概念 1.1 什么是句柄类 1.2 句柄类的设计动机 1.3 句柄类的基本结构 二、句柄类的实现方式 2.1 基于指针的句柄类 2.2 值语义的句柄类 2.3 引用计数的句柄类 三、句柄类与继承的结合应用 3.1 实现多态容器 3.2 实现插件系统 3.3 实现状态模式…

谷歌曾经的开放重定向漏洞(如今已经修复) -- noogle DefCamp 2024

题目描述: 上周,我决定创建自己的搜索引擎。这有点难,所以我背上了另一个。我也在8000端口上尝试了一些东西。 未发现题目任何交互,但是存在一个加密js const _0x43a57f _0x22f9; (function(_0x3d7d57, _0x426e05) {const _0x16c3fa _0x22f9, _0x3187…

【C#】ToArray的使用

在 C# 中&#xff0c;ToArray 方法通常用于将实现了 IEnumerable<T> 接口的集合&#xff08;如 List<T>&#xff09;转换为数组。这个方法是 LINQ 提供的一个扩展方法&#xff0c;位于 System.Linq 命名空间中。因此&#xff0c;在使用 ToArray 方法之前&#xff0…

资产管理平台—chemex

1、简介 Chemex CMDB&#xff08;Configuration Management Database&#xff09;是一个基于现代微服务架构的资产管理与自动化平台&#xff0c;专为 IT 基础设施与业务资产管理而设计。其核心目标是解决大规模系统运维中资产信息混乱、配置分散、数据不一致等问题&#xff0c…

【AI】mcp server是什么玩意儿

文章目录 背景mcp server的必要性mcp server的基本概念mcp server的架构与核心组件总结 背景 劈里啪啦的整了一堆概念&#xff0c;对mcp server还是只停留在知道个词的地步。 虽然目前大模型的对话生成能力很强&#xff0c;但是大模型&#xff08;如deepseek&#xff09;并不能…

c# 数据结构 树篇 入门树与二叉树的一切

事先声明,本文不适合对数据结构完全不懂的小白 请至少学会链表再阅读 c# 数据结构 链表篇 有关单链表的一切_c# 链表-CSDN博客 数据结构理论先导:《数据结构&#xff08;C 语言描述&#xff09;》也许是全站最良心最通俗易懂最好看的数据结构课&#xff08;最迟每周五更新~~&am…

《Cookie Cutter》中2000多张精灵表与10000个2D光源的管理之道

一个小团队如何在多个平台上以优秀的效果展示手绘动画&#xff1f;Subcult Joint 工作室给出了答案。他们用六年时间开发出了游戏《Cookie Cutter》。游戏中使用了数千个使用传统动画技术制作的高分辨率资产&#xff0c;而且这些资产都在 Unity 中进行了优化。由于工作室需要在…

什么是实景VR?实景VR应用场景

实景VR&#xff0c;即基于真实场景的虚拟现实技术&#xff0c;是利用计算机技术生成三维环境&#xff0c;以模拟并再现真实世界场景的技术。 用户通过佩戴VR设备&#xff08;如VR头盔、手柄等&#xff09;或通过电脑设备&#xff0c;可以沉浸在一个高度仿真的虚拟环境中&#…

内核性能测试(60s不丢包性能)

以xGAP-200-SE7K-L&#xff08;双口10G&#xff09;在飞腾D2000上为例&#xff08;单通道最高性能约2.8Gbps) 单口测试 0口&#xff1a; tcp&#xff1a; taskset -c 4 iperf -c 1.1.1.1 -i 1 -t 60 -p 60001 taskset -c 4 iperf -s -i 1 -p 60001 udp&#xff1a; taskse…

58. 区间和

题目链接&#xff1a; 58. 区间和 题目描述&#xff1a; 给定一个整数数组 Array&#xff0c;请计算该数组在每个指定区间内元素的总和。 输入描述 第一行输入为整数数组 Array 的长度 n&#xff0c;接下来 n 行&#xff0c;每行一个整数&#xff0c;表示数组的元素。随后…

C#进阶(2)stack(栈)

前言 我们前面介绍了ArrayList,今天就介绍另一种数据结构——栈。 这是栈的基本形式,博主简单画了一下,你看个意思就行,很明显,这种数据有一种特征:先进后出。因为先进来的数据会在下面,下面是密闭的,所以只能取后面进来的。 C#为我们封好了这种数据结构,我们不用担…

汽车工厂数字孪生实时监控技术从数据采集到三维驱动实现

在工业智能制造推动下&#xff0c;数字孪生技术正成为制造业数字化转型的核心驱动力。今天详细介绍数字孪生实时监控技术在汽车工厂中的应用&#xff0c;重点解析从数据采集到三维驱动实现的全流程技术架构&#xff0c;并展示其在提升生产效率、降低成本和优化决策方面的显著价…

git|gitee仓库同步到github

参考&#xff1a;一次提交更新两个仓库&#xff0c;Get 更优雅的 GitHub/Gitee 仓库镜像同步 文章目录 进入需要使用镜像功能的仓库&#xff0c;进入「管理」找到「仓库镜像管理」选项&#xff0c;点击「添加镜像」按钮绑定github绑定成功后再次点击添加镜像如何申请 GitHub 私…

原生小程序+springboot+vue+协同过滤算法的音乐推荐系统(源码+论文+讲解+安装+部署+调试)

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统背景 在数字音乐产业迅猛发展的当下&#xff0c;Spotify、QQ 音乐、网易云音乐等音乐平台的曲…