我想使用用户在网络表单中输入的字符串作为键名的一部分:
user_input = self.request.POST.get('foo')
if user_input:
foo = db.get_or_insert(db.Key('Foo', user_input[:100], parent=my_parent))
这样安全吗?或者我应该做一些廉价的编码或哈希?如果是,哪一个?
答案 0 :(得分:3)
只要您不关心恶意用户使用垃圾填满您的数据库,它就是安全的。 get_or_insert
不允许他们覆盖现有条目,只需添加新条目。
确保限制它的长度(在UI和收到它之后),即使你没有对它进行其他验证,所以至少他们不能只是给你疯狂的大键来填满数据库快速或崩溃你的应用程序。
编辑:你刚才评论说你确实知道这是一个合理的关键。在那种情况下,是的,这是安全的。
请记住,用户可能仍然可以根据您提供的内容需要多长时间来确定数据库中已有的密钥,并且您仍需要确保他们已获得授权看到他们要求的任何内容,或将他们限制为少量请求,他们不能只是强力检索链接到你正在生成的密钥的所有信息。