bugku-login1之sql column truncation(列截断)

前言:
在MySQL的配置选项中,有一个sql_mode选项。当mysql的sql-mode设置为default时,即没有开启STARICT_ALL_TABLES选项时候,MYsql对用户插入的超长值只提示warning,而不是erro(如果是erro则插入不成功),这可能会导致发生一些“截断”问题。
开始测试:
首先开启strict模式。
bugku-login1之sql column truncation(列截断)在strict模式下,因为输入的字符串超出了长度限制,因此数据库返回一个error信息,同时数据插入不成功。

bugku-login1之sql column truncation(列截断)解释:
我们在这里解释一下:not null、null、default。
在 MySQL 中,每个字段定义都包含附加约束或者修饰符,这些可以用来增加对所输入数据的约束。

今天我们就来看一下 MySQL 的字段约束:

NULL 和 NOT NULL 修饰符、DEFAULT 修饰符,AUTO_INCREMENT 修饰符。

NULL 和 NOT NULL 修饰符

可以在每个字段后面都加上这 NULL 或 NOT NULL 修饰符来指定该字段是否可以为空(NULL),

还是说必须填上数据 (NOT NULL)。MySQL 默认情况下指定字段为 NULL 修饰符,如果一个字段指定为NOT NULL,

MySQL 则不允许向该字段插入空值(这里面说的空值都为 NULL),因为这是 “规定”。
DEFAULT 修饰符

可以使用 DEFAULT 修饰符为字段设定一个默认值。

当插入记录时,您老人家忘记传该字段的值时,MySQL 会自动为您设置上该字段的默认值。
如果一个字段中没有指定 DEFAULT 修饰符,MySQL 会依据这个字段是 NULL 还是 NOT NULL 自动设置默认值。

如果指定字段可以为 NULL,则 MySQL 为其设置默认值为 NULL。

如果是 NOT NULL 字段,MySQL 对于数值类型插入 0,字符串类型插入空字符串,

时间戳类型插入当前日期和时间,ENUM 类型插入枚举组的第一条。
bugku-login1之sql column truncation(列截断)关闭strict选项时候:
bugku-login1之sql column truncation(列截断)数据库只返回一个warning信息,但是数据插入成功。
bugku-login1之sql column truncation(列截断)bugku-login1之sql column truncation(列截断)我们可以看到数据最终插入了,因此在表中有两列,利用这种方式我们可以用admin x账户进去修改admin密码。

实战:

bugku-login:
废话不多说直接注册一个新用户名字为admin x
bugku-login1之sql column truncation(列截断)用我们刚才注册的账号提示说不是admin不让进。
bugku-login1之sql column truncation(列截断)那么我们就用admin账号登陆,但是密码却是我们所注册账号的密码。
bugku-login1之sql column truncation(列截断)**

注意:

**

注册账号的时候空格一定要长一点,因为我们不确定他的限制字符长度是多少。