mysql - 为什么此 MySQL 查询成功执行?

标签 mysql sql xss

我正在玩 Multilldae 的 XSS 练习,在其中一个练习(OWASP 2013->A3->Reflected->Pen Test Tool Lookup)中,我精心设计的输入导致以下查询。 where 子句的形式非常奇怪。而 tool_id 是一个 int 字段。

SELECT tool_id, tool_name, phase_to_use, tool_type, comment FROM pen_test_tools 
WHERE tool_id = '2\", \"good\":\"haha';

令我惊讶的是,这个查询成功执行并返回了正确的结果。你能告诉我为什么吗?在我看来,where子句完全是无稽之谈,MySQL应该报错。

谢谢!

最佳答案

原因是因为tool_id是一个整数,所以比较的是数值。

MySQL 会将字符串转换为数字上下文中的数字。当它这样做时,它确实 “静默”转换,因此不会报告错误。它根据前导数字转换字符串,因此该字符串变为 2。如果没有前导数字(或前导空格后的减号或加号),则值为 0

关于mysql - 为什么此 MySQL 查询成功执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23750037/

相关文章:

MySQL Order By date 列和integer 列,但指定integer 列的排序规则?

sql - 将一个表的一部分插入到另一个表中

mysql - 全文搜索不适用于 mysql 中的 varchar

PHP - 在 HTML 表中输出 2 个查询的结果

javascript - 如何使 anchor 标记的 href 调用匿名函数?

php - 哪里使用 strip_tags() 和 htmlspecialchars()

java - 如何实现Java ESAPI来防止XSS?

mysql - 从3个不相关的mysql表中获取和计算数据

php - 使用大数据库在本地安装 MediaWiki : "LocalSettings.php" couldn't be generated

php - 将一个单元格的值超链接到另一个单元格