这是示例代码。
create table (id int(11) not null, name char(80));
并且在接受输入时,我不验证最大长度,我只是查看用户输入值是否不为空,而不是插入或更新表。
如果某些用户输入的值超过 80 个字符,查询将不会运行并返回 SQL 错误,现在这个 SQL 错误是否可以利用?
我的第一个和最后一个猜测是“不”。用例子证明我错了。
感谢与问候
这是示例代码。
create table (id int(11) not null, name char(80));
并且在接受输入时,我不验证最大长度,我只是查看用户输入值是否不为空,而不是插入或更新表。
如果某些用户输入的值超过 80 个字符,查询将不会运行并返回 SQL 错误,现在这个 SQL 错误是否可以利用?
我的第一个和最后一个猜测是“不”。用例子证明我错了。
感谢与问候
你错了。查询将被执行并且只返回警告。将插入前 80 个字符,其余字符将被忽略!自己试试。打开 phpmyadmin 制作你的这张表,然后在名称列中插入 81 个或更多字符,你会看到!http://goo.rs/rK6sWE这个。
不,如果您尝试将 100 个字符的输入放入 80 个字符的字段中,攻击者将无法利用它。但是,您会遇到运行时错误,因此在尝试将数据粘贴到数据库中之前,您仍应确保数据适合列。
name char(80)
仅确保 MySQL 将拒绝存储超过 80 个字符的任何内容。然而,在这些数据甚至被写入 MySQL 之前(比如从你的 web 表单中),就没有这样的保证。
如果您真的关心安全性,则应始终使用准备好的语句和绑定变量。