1

使用烧瓶,我试图验证一个 cookie 没有被篡改。现在,如果我更改 cookie 值,它只会引发错误,但我想检查代码 is_valid(session['user_id']) 并重定向/重置,否则。

#pocoo 中的某个人说:

  • 实际上,您可以调用 SecureCookie.unserialize 并捕获异常
  • 啊,它默默地失败了
  • 看起来你必须尝试反序列化它并检查你是否从中得到一个空对象

谁能进一步解释这段代码会是什么样子?

4

1 回答 1

1

看看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。

于 2012-05-25T16:03:59.853 回答