允许用户为 ndb.Query() 提供参数是否危险?

Is it dangerous to allow user to give arguments to ndb.Query()?

我正在写一个搜索工具,我要做的其中一件事就是让用户搜索ndb 对象。

让用户选择 ndb.Query() 函数的参数是否危险?它可以用来修改或删除数据吗?

由于我可以提供 kind 参数,结果集将仅限于某些类型。另外,写一个小的 parser/validator 也有助于安全。我只是想确保我不会在这里做任何太愚蠢的事情。如果有人有遵循的语法,那就太棒了。

ndb.Query 构造函数的参数不能修改或删除数据。如果出现错误,它们很容易使您的服务器实例崩溃,或者提供对您可能不希望该用户看到的数据的访问权限,例如通过不希望的 namespace 设置——但这是最糟糕的情况。

尽管如此,我会考虑让构造函数不受阻碍并使用显式 filter 和可能的 order 调用来让用户间接自定义查询——它们受到更高的限制,我怀疑这些是你的查询自定义的关键点,对吧?

而且,通过将此类调用包装到适当的 try/except 块中以提供对用户错误的准确诊断,更容易避免崩溃(无论是恶意的还是意外的)...