使用烧瓶,我试图验证一个 cookie 没有被篡改。现在,如果我更改 cookie 值,它只会引发错误,但我想检查代码 is_valid(session['user_id']) 并重定向/重置,否则。
#pocoo 中的某个人说:
- 实际上,您可以调用 SecureCookie.unserialize 并捕获异常
- 啊,它默默地失败了
- 看起来你必须尝试反序列化它并检查你是否从中得到一个空对象
谁能进一步解释这段代码会是什么样子?
看看https://github.com/mitsuhiko/werkzeug/blob/master/werkzeug/contrib/securecookie.py#L265
safe_str_cmp(client_hash, mac.digest())
正在执行如果 cookie 已被篡改则应该失败的检查。
根据您想要捕捉的内容,您可以跳入不同的地方。你可以做
data = request.cookies.get("session")
cookie = werkzeug.contrib.securecookie.SecureCookie.unserialize(data, secret_key)
如果存在data
且不cookie
包含任何数据,则反序列化失败。许多原因之一是safe_str_cmp()
(被调用unserialize()
)返回 False。