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

SQL注入--基本概念

SQL注入的定义

  • SQL:是操作数据库数据的结构化查询语言,网页的应用数据和后台数据库中的数据

    进行交互时会采用SQL。

  • SQL注入:是将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语

    句,传递给Web服务器,进而传给数据库服务器以执行数据库命令。这时相当于用户

    控制了后端SQL语句的一部分。它目前是黑客对数据库进行攻击的最常用手段之一。

    比如,Web应用程序的开发人员对用户所输入的数据或cookie等内容不进行过滤或验

    证(即存在注入点)就直接传输给数据库,就可能导致拼接的SQL被执行,获取对数

    据库的信息以及提权,发生SQL注入攻击。

网站结构

  • 表示层:前端(用户在浏览器看到的内容)
  • 业务逻辑层:后端(对用户提交的数据进行处理的代码,也就是常说的编程语言,比如java、php、python等)
  • 数据访问层:数据库(保存数据的地方)

SQL注入原理

SQL注入攻击:通过操作输入来修改SQL语句,用以达到执行代码对WEB服务器进行攻击的方法。

SQL注入产生的原因:

当Web应用向后台数据库传递SQL语句进行数据库操作时,如果对用户输入的参数没有

经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执

行,获取或修改数据库中的数据。简单的说就是在post/get表单或页面请求的查询字符

串中插入SQL语句,最终使web服务器执行恶意命令的过程。可以通过一个例子简单说明

SQL注入攻击。假设某网站页面显示时URL为 http://www.example.com?id=123 ,此时

URL实际向服务器传递了值为123的变量id,这表明当前页面是对数据库进行动态查询的

结果。由此,我们可以在URL中插入恶意的SQL语句并进行执行。另外,在网站开发过程

中,开发人员使用动态字符串构造SQL语句,用来创建所需的应用,这种情况下SQL语句

在程序的执行过程中被动态的构造使用,可以根据不同的条件产生不同的SQL语句,比

如需要根据不同的要求来查询数据库中的字段。这样的开发过程其实为SQL注入攻击留

下了很多的可乘之机。

SQL注入的本质:其实就是把用户输入的数据当做代码来执行,违背了“数据与代码分离”的原则。

SQL注入的两个关键点:

  1. 用户能够控制输入的内容。
  2. Web应用把用户输入的内容带入到数据库中执行。

SQL注入分类

  • 根据注入位置分类:GET注入、POST注入、Head头注入

  • 根据结果反馈分类:有回显注入(联合查询,报错注入,堆叠注入)、无回显注入(布尔盲注,时间盲注)

  • 根据数据类型分类:

    1. 数字型注入:当输入的参数为整型时,如ID、年龄、页码等,如果存在注入漏洞,则可以认为是数字型注入。
    2. 字符型注入:当输入参数为字符串时,称为字符型。

    数字型与字符型注入最大的区别在于:数字型不需要闭合,而字符型一般需要进行闭合。

隐式类型转换

基本概念

  • 在 MySQL 中,隐式类型转换是指在某些操作中,MySQL 会自动将一种数据类型转换为另一种数据类型,而不需要用户显式地使用类型转换函数。这种转换通常在比较操作、算术运算或者函数调用等场景下发生。例如,当一个数字和一个字符串进行比较时,MySQL 可能会将字符串转换为数字后再进行比较。

常见场景

  • 比较操作

    • 数字与字符串比较:如果一个数字和一个字符串进行比较,MySQL 会尝试将字符串转换为数字。例如,在比较5​和'5abc'​时,MySQL 会将'5abc'​转换为数字5​(转换时会从字符串开头提取数字部分,直到遇到非数字字符),然后进行比较,此时结果为相等。但是如果字符串以非数字字符开头,如比较5​和'abc5'​,转换后的数字为0​,比较结果为不相等。
    • 日期与字符串比较:在比较日期类型和字符串类型时,MySQL 也会进行隐式转换。例如,假设date_column​是一个日期类型的列,在查询语句SELECT * FROM table_name WHERE date_column = '2024-01-01';​中,MySQL 会尝试将字符串'2024-01-01'​转换为日期类型,然后与date_column​中的日期值进行比较。
  • 算术运算

    • 数字与字符串运算:当一个数字和一个字符串进行算术运算时,如加法、减法等,MySQL 会将字符串转换为数字。例如,在表达式3 + '4'​中,MySQL 会将'4'​转换为数字4​,然后进行加法运算,结果为7​。但如果字符串不能转换为数字,如3 + 'abc'​,MySQL 会将'abc'​转换为数字0​,结果为3​。
  • 函数调用

    • 参数类型不符时的转换:

      在调用函数时,如果传递的参数类型与函数期望的类型不符,MySQL 可能会进行隐式转换。例如,在使用SUM()​函数对一个包含数字和字符串混合的列进行求和时,MySQL 会将字符串转换为数字后再进行求和操作。假设列value_column​中有值1​、2​和'3'​,执行SELECTSUM(value_column) FROM table_name;​时,MySQL 会将'3'​转换为数字3​,然后计算总和为6​。


http://www.kler.cn/a/420092.html

相关文章:

  • 高校数字化运营平台解决方案:构建统一的服务大厅、业务平台、办公平台,助力打造智慧校园
  • MAUI APP开发蓝牙协议的经验分享:与跳绳设备对接
  • [Redis#13] cpp-redis接口 | set | hash |zset
  • xiaolin coding 图解 MySQL笔记——事务篇
  • 408——数据结构(持续更新)
  • C—操作符易错点
  • 01-标准库开发-STM32定时器
  • 为什么在服务器上设置 fish 为默认 shell, vscode remote ssh 默认还是 bash?
  • flink学习(13)—— 重试机制和维表join
  • 在 uniapp 项目中使用 Iconify 字体图标库
  • 《Python PDF 格式转换全攻略》
  • Linux 进程管理详解
  • 张量并行和流水线并行在Transformer中的具体部位
  • 25.4K Star 高效内存数据存储!特别好用的Redis 和 Memcached 替代品:Dragonfly!
  • redisson-spring-data与Spring-Data-Redis的版本关系问题
  • 性能监控系统Prometheus、Node-exporter与Grafana部署详解搭建
  • 黑马程序员Java项目实战《苍穹外卖》Day03
  • Xilinx PCIe高速接口入门实战(一)
  • 软件保护:从用户角度出发的安全需求与体验
  • C++之 String 类的模拟实现
  • k8s api对象,CRD
  • linux 操作系统环境配置 redhat9
  • 如何利用微型5G网关为智慧无人矿车提供精确定位
  • pytest(一)csv数据驱动
  • AI开发 - GPT之魂 用Python 演示chatGPT的自注意力机制 - 机器学习
  • JavaScript根据数据生成柱形图