【问题标题】:How restrict Sequel ruby to allow SELECT statement only fetch method?如何限制 Sequel ruby​​ 以允许 SELECT 语句仅获取方法?
【发布时间】:2018-01-24 08:52:34
【问题描述】:

我让我的用户在我正在构建的应用程序中执行 sql 查询。他们可以输入数据库连接字符串(mysq、pg 和其他支持的 rdbms) 有没有办法只在这样的获取方法上允许 SELECT 语句

   client = Sequel.connect "mysql2://user:pass@hostname/some_db"
   client.fetch("SELECT * FROM sample_table").all

并禁止以下行为

   client.fetch("DROP DATABASE some_db").all
   client.fetch("TRUNCATE some_table").all
   client.fetch("ALTER some_table").all

我还可以使用 sequel gem 获取每个表列的表和数据类型吗?

【问题讨论】:

  • 解析查询并确定它是选择查询还是其他什么?是的,这是可能的。

标签: ruby sequel


【解决方案1】:

这听起来很危险。很难针对所有情况正确清理输入。 想想过程、动态地制作 SQL、连接语句、PLSQL、大写/小写、SQL 变体、清理程序中的错误……

而且您永远不应低估恶意用户的创造力。

最好在数据库级别处理此问题并创建具有适当访问权限的只读用户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多