为什么CherryPy会话不需要密钥?

时间:2011-07-16 17:28:27

标签: python pylons web-frameworks cherrypy

我注意到cherrypy会话不需要密钥配置。相反,Pylons会话确实:http://docs.pylonsproject.org/projects/pylons_framework/dev/sessions.html

如果我使用会话记住用户身份验证,我会担心安全问题。

任何人都可以解释为什么cherrypy session不需要密钥?或者是否有任何建议我应该如何确保使用会话记住用户登录?

1 个答案:

答案 0 :(得分:18)

基本上有两种不同的方式来维护会话状态:在服务器上或在客户端上。

使用服务器端方法,您可以将会话数据保存在服务器上的文件,数据库或内存中,并为其分配ID。然后将此会话ID发送到客户端并通常存储在cookie中(尽管它们也可以嵌入到URL中)。然后,对于每个请求,Web应用程序将读取并使用客户端的会话ID,以从会话数据存储在服务器上的任何位置加载会话数据。这样,客户端永远不会访问任何会话数据,也不能篡改它,但缺点是您必须通过恶意客户端使用陈旧的会话ID来防止会话劫持。这是当今大多数Web框架和应用程序使用的模型。

另一种方法是将会话数据完全存储在cookie内的客户端。这种方法的缺点是客户端可以看到和篡改数据,因此您必须注意正确签名和加密数据以防止篡改。这是有一个好秘密密钥发挥作用的地方。好处是你也不必担心会话劫持。

Pylons使用Beaker会话,可以将其配置为完全存储会话数据on the client side。这就是你需要一个秘密密钥的原因。

CherryPy仅在服务器上存储会话数据,然后向用户发送带有会话ID的cookie,因此客户端永远不会看到会话数据并且无法篡改它。您可以将其配置为使用文件或仅将所有内容保存在内存中。您甚至可以挂钩并使用数据库来存储会话数据。

就个人而言,我更喜欢CherryPy使用的方法,因为它与大多数网络使用的方法相同。它更容易保护,您可以轻松地与服务器上运行的其他应用程序共享会话数据,而无需担心加密或密钥。