gpt4 book ai didi

Java:用户提供where子句:如何防止SQL注入(inject)?

转载 作者:行者123 更新时间:2023-12-01 21:13:05 25 4
gpt4 key购买 nike

我们目前正在开发一项功能,其中一部分是允许用户为简单的 select 语句定义一个 where 子句,这样他就可以通过 GUI 限制他想要获得的结果。

表名可能不同,但它只是一个“select * from TABLE_NAME”(我知道,这是一个糟糕的主意,但客户就是国王)。由于这为 SQL 注入(inject)提供了无限的可能性,我一直在寻找可行的方法,至少防止最广泛使用的 SQL 注入(inject)技术,但在过去的几天里我找不到很多信息。大多数提示都是基于这样的假设,即用户只提供查询的参数,这可以通过PreparedStatements 来解决。但就我而言,它们几乎毫无用处。

我目前正在考虑两种方法,我可能会将它们结合起来以获得最佳效果,但我不知道是否有更好的方法来防止注入(inject)以及如何准确地实现它(也许存在开源工具或框架)。我想分析一下文本

  1. 根据广泛使用的 SQL 注入(inject)技术,定义用户输入不得包含的内容。
  2. 定义用户输入的内容。

对于1.我想创建一个实用程序类,其中包含检查不同SQL注入(inject)情况的方法。我可以使用正则表达式来识别模式。

对于2.我认为使用正则表达式或XText框架来定义DSL,因此只有当用户输入与定义的规则匹配时才接受用户输入。我还可以提取列名来检查它们是否确实存在于当前的 TABLE_NAME 中。但在这种情况下,它将迫使我们只允许对查询进行某种限制(即 rownum<=100 不起作用,或者需要特殊处理)。

如果您能为我推荐任何更好的技术、工具或方法,我将非常感激,因为正如我所提到的,关于此主题的信息并不多。

提前谢谢您!

最佳答案

您正在构建一个 SQL 注入(inject)应用程序

您可以做两件事:

  1. 限制数据库用户可以执行的查询类型。例如,不要授予更新权限。

  2. 将 where 子句限制为仅匹配一些简单的条件,例如a 子句必须匹配 t.col=value。然后使用简单的解析器将所有输入与您的规则进行比较

注入(inject)技术有多种,可能很难全部掌握。

关于Java:用户提供where子句:如何防止SQL注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40812591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com