MySQL长字符截断的实现示例

 更新时间:2023年03月24日 16:06:58   作者:辰霖心  
本文主要介绍了MySQL长字符截断的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

MySQL超长字符截断又名"SQL-Column-Truncation",是安全研究者Stefan Esser在2008 年8月提出的。

在MySQL中的一个设置里有一个sql_mode选项,当sql_mode设置为default时,即没有开启STRICT_ALL_TABLES选项时(MySQLsql_mode默认即default),MySQL对插入超长的值只会提示warning,而不是error,这样就可能会导致一些截断问题。

新建一张表测试,表结构如下(MySQL5.1):

CREATE TABLE USERS(
id int(11) NOT NULL, //长度为7
username varchar(7)NOT NULL,
password varchar(12)NOT NULL , 
)

分别插入以下SQL语句(注入提示消息)。

①插入正常的SQL语句。

mysql> insert into users(id,username,password)values(1,'admin','admin');//成功插入,无警告,无错误
 
Query OK,1 row affected(0.00 sec)

②插入错误的SQL语句,此时的"admin "右面有三个空格,长度为8,已经超过了原有的规定长度。

mysql> insert into users(id,username,password)values(2,'admin       ','admin');
//成功插入,一个警告
Query OK,1 row affected,1 warning(0.00 sec)

③插入错误的SQL语句,长度已经超过原有的规定长度。

mysql> insert into users(id,username,password) values(3,'admin    x','admin');
//成功插入,一个警告
Query OK,1 row affected,1 warning(0.00 sec)

MySQL提示三条语句都已经插入到数据库,只不过后面两条语句产生了警告。那么最终有没有插入到数据库呢?执行SQL语句查看一下就知道了。

mysql> select username from users;

可以看到,三条数据都被插入到数据库,但值发生了变化,此时在通过length来取得长度,判断值的长度。

mysql> select length(username)from users where id =1 ;

可以发现,第二条与第三条数据的长度为7,也就是列的规定长度,由此可知,在默认情况下,如果数据超出列默认长度,MySQL会将其截断。

但这样何来攻击一说呢?

面查询用户名为'admin'的用户就知道了。

mysql> select username from users where username='admin';

只查询用户名为admin的用户,但是另外两个长度不一致的admin用户也被查询出,这样就会造成一些安全问题,比如,有一处管理员登录是这样判断的,语句如下:

$sql = "select count(*) from users where username='admin' and password='*******;

假设这条SQL语句没有任何注入漏洞,攻击者也可能登录到管理页面。假设管理员登录的用户名为 admin,那么攻击者仅需要注册一个"admin”用户即可轻易进入后台管理页面,像著名的WordPress就被这样的方式攻击过。

到此这篇关于MySQL长字符截断的实现示例的文章就介绍到这了,更多相关MySQL长字符截断内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mysql数据库分库和分表方式(常用)

    Mysql数据库分库和分表方式(常用)

    本文主要给大家介绍Mysql数据库分库和分表方式(常用),涉及到mysql数据库相关知识,对mysql数据库分库分表相关知识感兴趣的朋友一起学习吧
    2016-03-03
  • mysql如何配置secure_file_priv

    mysql如何配置secure_file_priv

    这篇文章主要介绍了mysql如何配置secure_file_priv问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 教你巧用mysql位运算解决多选值存储的问题

    教你巧用mysql位运算解决多选值存储的问题

    如果你不知道什么是位运算的话,那么请你先去看看基础的C语言教程吧,下面这篇文章主要给大家介绍了关于如何巧用mysql位运算解决多选值存储问题的相关资料,需要的朋友可以参考下
    2022-02-02
  • 详谈mysql order by in 的字符顺序(推荐)

    详谈mysql order by in 的字符顺序(推荐)

    下面小编就为大家带来一篇详谈mysql order by in 的字符顺序(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • MySQL InnoDB row_id边界溢出验证的方法步骤

    MySQL InnoDB row_id边界溢出验证的方法步骤

    这篇文章主要给大家介绍了关于MySQL InnoDB row_id边界溢出验证的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者使用MySQL InnoDB具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-10-10
  • 利用SQL注入漏洞拖库的方法

    利用SQL注入漏洞拖库的方法

    利用SQL注入漏洞登录后台和利用SQL注入漏洞拖库是我学习了相关内容之后的一点小结,没啥深度,正如文章开头所说,权当总结,别无它意
    2012-01-01
  • 查找MySQL中查询慢的SQL语句方法

    查找MySQL中查询慢的SQL语句方法

    这篇文章主要介绍了查找MySQL中查询慢的SQL语句方法,需要的朋友可以参考下
    2017-05-05
  • 你真的会用Mysql的explain吗

    你真的会用Mysql的explain吗

    explain显示了mysql如何使用索引来处理select语句以及连接表,可以帮助选择更好的索引和写出更优化的查询语句,下面这篇文章主要给大家介绍了关于Mysql中explain用法的相关资料,需要的朋友可以参考下
    2022-03-03
  • 解决Can''t locate ExtUtils/MakeMaker.pm in @INC报错

    解决Can''t locate ExtUtils/MakeMaker.pm in @INC报错

    今天小编就为大家分享一篇关于解决Can't locate ExtUtils/MakeMaker.pm in @INC报错,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • MySQLexplain之possible_keys、key及key_len详解

    MySQLexplain之possible_keys、key及key_len详解

    这篇文章主要介绍了MySQLexplain之possible_keys、key及key_len的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08

最新评论