1

这是示例代码。

create table (id int(11) not null, name char(80));

并且在接受输入时,我不验证最大长度,我只是查看用户输入值是否不为空,而不是插入或更新表。

如果某些用户输入的值超过 80 个字符,查询将不会运行并返回 SQL 错误,现在这个 SQL 错误是否可以利用?

我的第一个和最后一个猜测是“不”。用例子证明我错了。

感谢与问候

4

3 回答 3

4

你错了。查询将被执行并且只返回警告。将插入前 80 个字符,其余字符将被忽略!自己试试。打开 phpmyadmin 制作你的这张表,然后在名称列中插入 81 个或更多字符,你会看到!http://goo.rs/rK6sWE这个。

于 2012-11-24T20:19:51.167 回答
1

不,如果您尝试将 100 个字符的输入放入 80 个字符的字段中,攻击者将无法利用它。但是,您会遇到运行时错误,因此在尝试将数据粘贴到数据库中之前,您仍应确保数据适合列。

于 2012-11-24T20:16:29.513 回答
1

name char(80)仅确保 MySQL 将拒绝存储超过 80 个字符的任何内容。然而,在这些数据甚至被写入 MySQL 之前(比如从你的 web 表单中),就没有这样的保证。

如果您真的关心安全性,则应始终使用准备好的语句和绑定变量。

于 2012-11-24T20:18:51.823 回答