将数据从表复制到另一个表时是否可能进行 SQL 注入或任何其他攻击

Is SQL injection or any other attack possible while copying data from table to another table

提问人:user2161171 提问时间:10/26/2022 最后编辑:Joel Coehoornuser2161171 更新时间:10/27/2022 访问量:154

问:

我有 2 张表,TableA 和 TableB。TableA 包含不可靠的数据,用户可以在此表中输入他们想要的任何数据。我想使用以下命令将数据从 TableA 复制到 TableB:

Insert into tableB(col1,col2) 
select col1,col2 
from TableA 
where find_in_set('someStaticText',replace(col3,';',',')

从 TableA 复制此数据时是否有可能发生 SQL 注入或任何其他攻击?

我已经尝试了标准的 SQL 注入示例,但这似乎不是问题,而且由于我的 SQL 查询是静态的“插入 tableB 从 tableA 中选择”,我也没有看到任何问题。

但是,由于我们正在处理来自 TableA 的完全不可靠的数据,因此无论如何都可以确保在复制数据时不会出现任何问题。

数据库 安全性 SQL 注入

评论


答:

0赞 Amadan 10/26/2022 #1

SQL注入攻击是指用户提交的字符串(或者更确切地说,是未在代码中创建的任何输入,您自己保证是安全的)在发送到数据库之前将其注入可执行SQL代码。

经典的例子在 XKCD 中永垂不朽;据推测,用户输入被注入到类似 的东西中,创建以下一系列语句:Robert'); DROP TABLE Students; --INSERT INTO Students VALUES ('$name')

INSERT INTO Students VALUES ('Robert');
DROP TABLE Students;
--');

请注意,如果语句被正确编写,无论是作为预准备语句 () 还是字符串首先被正确转义(这将转换为 ),它就会被正确插入;一旦进入数据库,它就只是数据,没有特殊的超能力。INSERT INTO Students VALUES (?)Robert'); DROP TABLE Students; --Robert''); DROP TABLE Students; --

至关重要的是,危险位是在应用程序代码中创建 SQL 语句文本的位置,而不是在数据库中。由于你的SQL语句是静态字符串,所以不能注入任何东西,也不可能有SQL注入攻击。

评论

0赞 Your Common Sense 10/26/2022
“用户提交的字符串”是一个谬误,没有可靠的衡量标准来判断字符串是否是“用户提交的”。所以它应该只是任何输入。
0赞 Your Common Sense 10/26/2022
任何带着不同问题来回答这个问题的人,即使用某种编程语言而不是 SQL 进行复制,很可能会得出结论,鉴于数据来自 SQL,而不是来自“用户”,它应该是安全的。有效地将他们的应用程序打开到二阶注入。这种危险的东西,“用户提供的输入”应该从这个通用建议中删除。
0赞 Amadan 10/27/2022
是的,我的意思是代码中不固有的任何输入。