首页 > 数据库 >SQL inject 宽字节注入

SQL inject 宽字节注入

时间:2024-07-16 16:20:24浏览次数:9  
标签:字符 字节 编码 df GBK inject SQL

宽字符截断的原理主要涉及字符编码的处理方式,特别是在多字节字符集(如GBK、BIG5等)中。这种漏洞通常发生在web应用对用户输入进行过滤时,由于字符编码的不一致导致的。

原理

多字节字符集中,一个字符通常由两个或更多字节组成。
在进行字符串操作时,如果不正确处理这些多字节字符,可能会导致字符被错误地截断或解释。
攻击者可以利用这一点,构造特殊的输入来绕过安全过滤。
具体例子:
假设有一个PHP应用使用GBK编码,并使用addslashes()函数来转义特殊字符以防止SQL注入。

考虑以下场景:
用户输入:%df' (其中%df是宽字符的第一个字节)
addslashes()函数会在单引号前添加一个反斜杠,变成:%df' ,

在GBK编码中,%df%5c正好是一个合法的宽字符
结果是,反斜杠被当作宽字符的一部分,失去了转义的作用
最终在数据库查询中,单引号逃逸出来,可能导致SQL注入。

$input = "%df'";
$escaped = addslashes($input);
// $escaped 现在是 "%df\'",但在GBK编码下,\' 会被视为一个字符

$query = "SELECT * FROM users WHERE name = '$escaped'";
// 实际的查询变成:SELECT * FROM users WHERE name = '%df''

防御措施

1.使用参数化查询而不是字符串拼接
2.确保整个应用使用一致的字符编码(最好是UTF-8)
3.在进行安全过滤之前,先将输入转换为安全的字符编码
4.使用专门设计用于防止SQL注入的函数,如mysqli_real_escape_string()
5.理解并防范宽字符截断漏洞对于确保web应用的安全性非常重要,尤其是在处理多语言或遗留系统时。

标签:字符,字节,编码,df,GBK,inject,SQL
From: https://www.cnblogs.com/mysticbinary/p/17522281.html

相关文章

  • 字节跳动内网开源的《Python项目开发实战》,GitHub飙升!
    今天给小伙伴们分享的这份手册的内容共15个章节,总共可以分为四个部分。第一部分,主要讲“Python开发入门”,这部分将重点放在了个人开发上,涵盖了简单的web应用开发和Python项目结构等。第二部分,主要讲“团队开发周期”,介绍书中的极客们在多人团队开发中遇到的问题,以及如何提......
  • mysql分区
    --1.分区相关--创建存储过程DELIMITER$$CREATEPROCEDUREens_rb.add_partitions_by_day(intable_namevarchar(30),start_strvarchar(30),end_strvarchar(30))BEGINdeclarestart_ddatedefaultDATE_FORMAT(start_str,'%Y-%m-%d');declare......
  • 走进NoSql
    一、引入1.1什么是NoSqlNoSQL(Not Only SQL)是一组非关系型数据库(或称为非SQL数据库)的统称,它们提供了与传统的关系型数据库不同的数据存储和检索方式。NoSQL数据库通常用于处理大量的、分布式的、非结构化或半结构化的数据,并且它们能够在大规模并行处理方面表现出色。  1.......
  • Java性能优化-书写高质量SQL的建议(如何做Mysql优化)
    场景Mysql中varchar类型数字排序不对踩坑记录:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/139955012为避免开发过程中针对mysql语句的写法再次踩坑,总结开发过程中常用书写高质量sql的一些建议。注:博客:https://blog.csdn.net/badao_liumang_qizhi实现查询......
  • mysql索引与锁
    一.MYSQL索引1.1索引介绍1.1.1索引是什么官⽅方介绍索引是帮助MySQL高效获取数据的数据结构。更更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中的(可能存储在单独的索引文......
  • SQL Server数据库出现逻辑错误的数据恢复
    一、常见逻辑错误类型校验和不正确(ChecksumError):这类错误通常表示数据库页中的数据在写入磁盘时与读取时不一致。可能由硬件故障、驱动程序问题或数据库文件损坏导致。逻辑I/O错误(如Error824):表示从磁盘成功读取了页面,但页面本身存在错误。这通常是由于数据库文件损坏或I/O......
  • Mysql8.4参考手册走读(四)
    第19章复制MySQL复制支持从一个MySQL数据库服务器(称为source)复制到一个或多个MySQL数据库服务器(称为副本)。默认情况下,复制是异步的,副本不需要永久连接才能接收来自源的更新。根据配置,您可以复制所有数据库、选定的数据库,甚至是数据库中的选定表。MySQL复制的优点包括:......
  • 【数据管理】PostgreSQL空间侦探!一文掌握数据库、表、索引占用大小查询技巧!
    在PostgreSQL中,了解数据库、表和索引的空间占用大小对于优化数据库性能、管理存储空间和识别潜在问题非常重要。通过使用PostgreSQL提供的系统函数和视图,我们可以轻松获取这些信息,并采取相应的措施来优化数据库。可以帮助我们优化数据库性能、管理存储空间和识别潜在的问题......
  • 木舟0基础学习Java的第十八天(IO流,字节流,字符流,缓冲)
    IO流正常使用流程:1.抛异常 2.资源读写 3.关闭资源(从后往前关)字节流:(拷贝推荐使用)开发中一般不会抛出异常用try{}catch(){}也不推荐字节流读中文FileInputStream:读FileInputStreamfs=newFileInputStream("e:/b.txt");//11111111为-1的补......
  • sql sqlserver 查看锁表语句
    在SQLServer中,查看当前被锁定的表或资源,可以通过几种不同的方式来实现。这通常涉及到系统视图和动态管理视图(DMVs)。以下是一些常用的查询,可以帮助你诊断锁定情况。1.使用 sys.dm_tran_locks 视图sys.dm_tran_locks 视图提供了当前执行中的所有锁定信息。你可以结合其他系......