【问题标题】:Allow user to enter SQL select statement in web application disabling updates允许用户在 Web 应用程序中输入 SQL 选择语句以禁用更新
【发布时间】:2015-02-06 13:15:40
【问题描述】:

我需要允许用户在我的 Web 应用程序中输入 SQL 选择语句;这些选择语句将用于在自定义下拉列表中生成选项。

所以我在用户界面上有一个字段,用户可以在其中输入选择;如何禁止用户输入插入/更新/删除?我可以检查第一个语句单词是 select 但是他们可以在 UI 上输入多个语句,用分号分隔。

【问题讨论】:

  • 您使用的是什么 Web 应用程序框架?什么编程语言?一般来说,您总是可以将字符串按; 拆分,并检查每个元素是否包含关键字update
  • 谢谢,这是一个 Java+AngulaJS 网络应用程序。语句可能包含带分号的字符串。
  • 你用的是什么数据库?
  • 旁观者的问题:你不能在你用来连接数据库的任何东西中使用参数化查询吗?
  • 数据库是 Sybase IQ

标签: sql web sql-injection


【解决方案1】:

我会做以下事情:

  • 在您的数据库中创建一个用户,该用户仅被授予对您希望该用户可访问的表的 SELECT 权限。

  • 在您的服务器中,使用上面的只读用户使用单独的数据源来处理客户端发出的查询。

【讨论】:

  • 这是解决这个问题的唯一明智的方法
【解决方案2】:

相信我,有恶意的用户会找到绕过检查并注入 SQL 的方法。 (特别是如果您使用的是 MS-SQL Server。)

所以,不要这样做。

编写一个合适的用户界面,无论它需要多么复杂,并确保用户输入的字符串绝对不会在 SQL 查询中以非引号和非转义结束。

【讨论】:

    【解决方案3】:

    以用户键入field1, field2 from table2 where this = that 等内容的方式构建您的 UI。在您的编程代码前面加上单词 select。

    【讨论】:

    • 我不能这样做,因为我正在使用 codemirror 来自动完成表格/列
    【解决方案4】:

    您可以使用Connection.setReadonly(true) 方法来启用只读事务。但只有当用户输入是可信的并且我们需要防止意外更改数据时,我才会使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-08
      • 2023-04-02
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      • 2019-02-19
      • 1970-01-01
      • 2011-03-13
      相关资源
      最近更新 更多