备注:对于示例(Oracle、Server、MySQL、Postgres)来说,任何SQL后端都是可以的,不过对于我的示例,我将使用MySQL进行测试。
我想知道下面的构造是否容易使用SQL注入:
SELECT
field1,
field2,
%s
FROM
tbl用户可以在那里输入一个原始字符串。我很好地允许错误的输入,但我想看看用户是否可以对此做任何有害的事情,只要我删除某些字符,如;。因此,如果用户试图执行:
SQL % ('DROP TABLE users; ')SQL只会变成无效的sql,但不一定是恶意的:
SELECT
field1,
field2,
DROP TABLE users
FROM
tbl但是,如果有一个天才用户能够在这里组合任何字符串,那么上面的代码对恶意SQL注入是否安全?如果没有,那么这里的示例字符串会被用来这样做吗?
发布于 2021-12-05 23:37:37
对于您的情况,解决方案是永远不要用来自后端层外部的字符串来组装SQL语句。因此,使用存储在后端中的字符串执行此操作。
例如,如果用户可以在UI中选择20列,则从1到20接收一个数字,然后您可以创建一个IF/ELSE序列,该序列将为每个数字追加相应的列。
这样,来自外部的参数就不会在SQL语句中组装,而是将用于组装SQL查询。
https://stackoverflow.com/questions/70239459
复制相似问题