0

我有一个与此类似的语句,可以在其中插入“名称”

select * from table where column in (/**name*/ 'name')

我目前正在检查')'.

前任。他们可以输入'*/; drop table--',但是sql会因为没有括号而抛出错误,对吗?

如果他们不能关闭括号,是否还有安全风险?

4

4 回答 4

3

为什么要冒险?对于动态值,始终使用 SQL 查询参数,那么您无需担心转义或是否有风险。

如果您指定您使用的编程语言和 RDBMS 品牌,我将向您指出一个资源,其中包含使用查询参数的示例。

于 2012-12-14T00:34:27.287 回答
2

是的——如果他们终止语句(尽管无效),然后执行自己的语句怎么办?

这有效(在mysql上本地测试):

select * from TABLE where (col = ''; select * from TABLE;

第一条语句产生错误,但第二条语句运行良好。

于 2012-12-14T00:31:20.613 回答
0

是的。

如果我从字面上看你的帖子,你想在两个地方插入名字,一次在评论中,一次在文本字符串中:

select * from table where column in (/**/select column from table where column !=/**/ '/select column from table where column !=/*');
于 2012-12-14T00:31:59.323 回答
-1

始终转义任何用户输入的数据。

mysqli_real_escape_string

或者老学校

mysql_real_escape_string
于 2012-12-14T00:31:08.287 回答