允许用户在禁用更新的 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)方法启用只读事务。但只有当用户输入是可信的并且我们需要防止意外更改数据时,我才会使用它。
我需要允许用户在我的网络应用程序中输入 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)方法启用只读事务。但只有当用户输入是可信的并且我们需要防止意外更改数据时,我才会使用它。