我正在编写搜索工具,而我要做的一件事就是让用户搜索ndb对象。
让用户选择ndb.Query()
函数的参数是危险的吗?它可以用来修改或删除数据吗?
由于我可以提供kind
参数,因此结果集将仅限于某些类型。此外,编写一个小的解析器/验证器也将有助于安全性。我只是想确保我在这里做任何太愚蠢的事情。如果有人的话,那么遵循的语法就会很棒。
答案 0 :(得分:3)
ndb.Query
构造函数的参数不能修改或删除数据。如果错误,他们可能很容易崩溃您的服务器实例,或者提供对您可能不希望该用户看到的数据的访问权限,例如,通过不受欢迎的namespace
设置 - 但这是关于最糟糕的
尽管如此,我还是考虑让构造函数不受阻碍,并使用显式filter
和order
调用让用户间接自定义查询 - 它们受到更高限制,我怀疑这些是你的无论如何,查询自定义的关键点,对吧?
并且,通过将此类调用包装到适当的try
/ except
块中以提供对用户错误的准确诊断,可以更轻松地避免崩溃(无论是恶意的还是意外的)......