为什么CherryPy会话不需要密钥?
我注意到,cherrypy 的会话不需要配置一个秘密密钥。而相对来说,Pylons 的会话就需要一个:http://docs.pylonsproject.org/projects/pylons_framework/dev/sessions.html
我有点担心,如果我用会话来记住用户的登录状态,会不会有安全问题。
有没有人能解释一下为什么 cherrypy 的会话不需要秘密密钥?或者有没有什么建议,如何才能安全地使用会话来记住用户的登录?
1 个回答
基本上,有两种不同的方式来保持会话状态:一种是在服务器上,另一种是在客户端。
服务器端的方法是把会话数据保存在文件、数据库或服务器内存中,并给这些数据分配一个ID。这个会话ID会发送给客户端,通常会存储在一个叫做cookie的小文件里(不过也可以放在网址里)。每次请求时,客户端的会话ID会被读取,网页应用程序就会根据这个ID从服务器上取出相应的会话数据。这样,客户端根本无法访问会话数据,也不能篡改它,但缺点是需要防止恶意客户端通过使用过期的会话ID来劫持会话。这种方式是现在大多数网页框架和应用程序使用的。
另一种方法是把会话数据完全存储在客户端的cookie里。这个方法的缺点是,客户端可以看到并篡改这些数据,所以你需要确保数据经过正确的签名和加密,以防被篡改。这时候就需要一个好的密钥。好处是你不需要担心会话劫持的问题。
Pylons使用Beaker会话,可以配置为完全在客户端存储会话数据。这就是为什么你需要一个密钥的原因。
CherryPy只在服务器上存储会话数据,然后给用户发送一个包含会话ID的cookie,这样客户端就看不到会话数据,也不能篡改它。你可以配置它使用文件存储,或者把所有数据都保存在内存中。你甚至可以接入数据库来存储会话数据。
就个人而言,我更喜欢CherryPy使用的方法,因为这是大多数网页使用的方式。这种方法更容易保护,而且你可以轻松地与在服务器上运行的其他应用程序共享会话数据,而不必担心加密或密钥的问题。