好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

mysql数据截断 - 网站安全 - 自学php

LengF:在看《 PHP高级漏洞审核技术 》认真的看了这两点,暂且记下。 对于很多web应用文件在很多功能是不容许重复数据的,比如用户注册功能等。一般的应用程序对于提交注册的username和数据库里已有的username对比是不是已经有重复数据,然而我们可以通过[数据截断]等来饶过这些判断,数据库在处理时候产生截断导致插入重复数据。

1) Mysql SQL Column Truncation Vulnerabilities

这个 漏洞 又是大牛Stefan Esser发现的(Stefan Esser是我的偶像:)),这个是由于 mysql 的sql_mode设置为default的时候,即没有开启STRICT_ALL_TABLES选项时,MySQL对于插入超长的值只会提示warning,而不是error(如果是error就插入不成功),这样可能会导致一些截断问题。测试如下:

mysql> insert into truncated_test(`username`,`password`) values("admin","pass");

mysql> insert into truncated_test(`username`,`password`) values("admin           x", "new_pass"); Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> select * from truncated_test; +----+------------+----------+ | id | username   | password | +----+------------+----------+ | 1 | admin      | pass     | | 2 | admin      | new_pass | +----+------------+----------+ 2 rows in set (0.00 sec)

2) Mysql charset Truncation vulnerability

这个漏洞是80sec发现的,当mysql进行数据存储处理utf8等数据时对某些字符导致数据截断。测试如下:

mysql> insert into truncated_test(`username`,`password`) values(concat("admin",0xc1), "new_pass2"); Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from truncated_test;HdhCmsTest2cto测试数据 +----+------------+----------+ | id | username   | password | +----+------------+----------+ | 1 | admin      | pass      | | 2 | admin      | new_pass  | | 3 | admin      | new_pass2 | +----+------------+----------+ 2 rows in set (0.00 sec)

很多的web应用程序没有考虑到这些问题,只是在数据存储前简单查询数据是否包含相同数据,如下代码:

$result = mysql_query("SELECT * from test_user where user='$user' ");   .... if(@mysql_fetch_array($result, MYSQL_NUM)) {         die("already exist"); }

查看更多关于mysql数据截断 - 网站安全 - 自学php的详细内容...

  阅读:52次