这种SQL构造是否易于SQL注入



注意:任何SQL后端都可以用于示例(Oracle、SQL Server、MySQL、Postgres(,不过对于我的示例,我使用MySQL进行测试。


我想知道以下结构是否易于SQL注入:

SELECT
field1,
field2,
%s
FROM
tbl

用户可以在那里输入原始字符串。我可以允许错误的输入,但我想看看用户是否可以用它做任何有害的事情,前提是我删除了某些字符,比如;。因此,如果用户尝试这样做:

SQL % ('DROP TABLE users; ')

SQL只会变成无效的SQL,但不一定是恶意的:

SELECT
field1,
field2,
DROP TABLE users
FROM
tbl

但是,如果一个天才用户能够在这里编写任何字符串,那么上面的内容对恶意SQL注入是安全的吗?如果不是,那么这里有什么示例字符串可以用来这样做?

您的案例的解决方案是永远不要使用来自后端层之外的字符串来组装SQL语句。因此,使用存储在后端内部的字符串执行此操作。

例如,如果用户可以在UI中选择20列,则接收1到20之间的数字,然后可以创建一个IF/ELSE序列,该序列将为每个数字附加相应的列。

这样,来自外部的参数就不会在SQL语句中进行汇编,而是用于汇编SQL查询。

最新更新