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