允许用户在禁用更新的 Web 应用程序中输入 SQL select 语句

Allow user to enter SQL select statement in web application disabling updates

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

所以我在 UI 上有一个字段,用户可以在其中输入 select;如何禁止用户输入insert/update/delete?我可以检查第一个语句单词是 select 但是他们可以在 UI 上输入多个语句,用分号分隔。

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

我会做以下事情:

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

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

相信我,怀有恶意的用户会想方设法绕过您的检查并注入 SQL。 (特别是如果您使用的是 MS-SQL 服务器。)

所以,不要这样做。

编写一个合适的用户界面,无论它需要多么复杂,并确保绝对没有用户输入的字符串最终在 SQL 查询中未被引用和未转义。

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