2012-05-25 33 views
1

使用燒瓶,我試圖驗證cookie沒有被篡改。現在,如果我更改cookie值,它只會引發錯誤,但我想檢查代碼is_valid(session ['user_id']),如果不是,則重定向/重置。如何使用Flask驗證cookie的完整性?

有人在#pocoo說:

  • 實際上,你可以調用SecureCookie.unserialize和捕獲異常
  • 啊,它靜靜地失敗
  • 看起來你必須嘗試反序列化,並檢查你是否得到一個空的物體

任何人都可以解釋fu此外代碼會是什麼樣子?

回答

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) 

如果datacookie不包含任何數據,則反序列化失敗。其中很多原因之一是safe_str_cmp()(被稱爲unserialize())返回False。