使用 Order by 准备好的语句来防止 SQL 注入 java

2023-12-12

我有一个关于 where 条件、order by 和 limit 的查询。我正在使用准备好的语句来设置 where 条件和限制。目前我正在使用字符串追加来排序,这会导致 SQL 注入漏洞。

我不能像这样使用设置字符串来排序order by ? ?如果我这样做,SQL Order 功能将无法工作。

查询示例:

SELECT siteid, technology, address, state, status FROM archive  LEFT OUTER 
JOIN mappings ON siteid = child_site_id order by siteid asc limit ? offset ?


SELECT siteid, technology, address, state, status FROM archive  LEFT OUTER 
JOIN mappings ON siteid = child_site_id order by siteid asc limit 10 offset 0

我可以通过任何其他方式来避免 SQL 注入。


准备语句设置方法仅适用于数据库表列值(WHERE子句值SELECT & DELETESQL 语句还包括要更新或插入的列值UPDATE & INSERT声明)。

因此,这意味着以下常见的 SQL 部分,如列名、表模式、表名、ORDER BY、GROUP BY、分页(LIMIT、OFFSET、FETCH FIRST 等)不能通过问号符号进行参数化(? ) of java.sql.PreparedStatement

直接将用户输入的值附加到查询将导致安全缺陷,唯一的出路是检查列表中的输入值有效值对于 SQL 的这些部分。

例如您期望什么表名?特定表应该采用什么模式? ,特定表中存在哪些列? ,页码是整数吗?,LIMIT 值是整数吗?列名称后的值ORDER BY子句应该只是ASC or DESC没有别的什么等等。

您可以动态填充这些有效值,也可以在系统中进行硬编码。

如果传递了无效值,那么我们要么不执行查询(并将其记录为错误),要么用有用的默认值替换无效值并执行查询。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Order by 准备好的语句来防止 SQL 注入 java 的相关文章

随机推荐