首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有意外加号的MySQL查询

带有意外加号的MySQL查询
EN

Stack Overflow用户
提问于 2015-11-09 15:44:02
回答 2查看 2.5K关注 0票数 0

我正在使用一个工具扫描我的应用程序中潜在的SQL注入漏洞。我遇到了一个测试,它在表单字段中发送以下内容:

代码语言:javascript
复制
+ (SELECT 0 FROM (SELECT SLEEP(10))qsqli_1111)

这将产生如下查询(针对MySQL数据库):

代码语言:javascript
复制
SELECT * FROM SomeTable
WHERE SomeField IN (+ (SELECT 0 FROM (SELECT SLEEP(10))qsqli_1111))

该工具(正确)推断,可能存在SQL注入漏洞,因为查询比发送简单值所花费的时间长10秒。(即SLEEP(10)正在执行。)

我的问题是:这个语法实际上做什么?加号在做什么?qsqli_1111是什么?为什么会有SELECT 0 FROM

我尝试过谷歌"mysql语法加符号“和"qsqli_1111”,但我什么也找不到。我不知道在MySQL手册或其他地方要找什么.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-09 16:12:42

+是一个一元运算符,几乎什么都不做。嗯,我想它会把任何值转换成一个数字。它类似于-,但没有改变标志。

在这种情况下,它是在对子查询的结果做一些事情。当然,结果已经是一个数字了。它可能会欺骗优化器,这样子查询就不会被优化掉。这是猜测。

qsqli_1111更容易解释。它是一个表别名,需要它来防止语法错误。

票数 1
EN

Stack Overflow用户

发布于 2015-11-09 15:54:30

加号是串联的。这样他们就可以在语句中运行额外的sql。他们也会使用或。select 0只是返回0。最后一部分是我相信的化名。在执行sql之前,您应该做好准备。绝不允许在服务器上直接运行sql。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33612796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档