2016-12-09 17 views
2

我只是在玩谷歌应用程序引擎,webapp2和python;我只是建立一个小玩具应用程序的乐趣。 一个小方面的说明,使用ndb谷歌应用程序引擎数据存储。'secret_key'在webapp2框架中代表什么?

随着构建一个小型的Web应用程序,来会议。

我正在阅读有关会话的webapp2文档以及本网站上有关如何设置会话的最受欢迎的主题。我没有得到关于这个过程的是这个配置中的一小段代码。

config = {} 
config['webapp2_extras.sessions'] = { 
'secret_key': 'my-super-secret-key', 
} 

我对web开发很新颖。然而,使用这个相同的框架构建其他更小的应用程序,我做了以下工作来构建一些安全的散列式Cookie。

user_key = user_key.id() 
user_cookie = self.request.cookies.get('user_cookie', None) 

self.response.headers.add_header('Set-Cookie','user=%s|%s' % (user_cookie, hash_string(user_cookie))) 
self.write('Thank you for sigining up! And, welcome %s' % user.name) 

难道这就是上面的配置代码的第一位,努力实现? 换句话说这是什么秘密钥匙?

另外,可以说我想设置'会话'cookie到用户ID。 请问下面的代码是否是正确的方法?

self.session[name] = user_key.id() 
session_info = self.session.get(name) 

谢谢。

回答

0

secret_key使用由服务器当你调用self.request.cookies.get('user_cookie', None)你正在阅读的cookie数据进行数字签名。

cookies随着数字签名不断从客户端传送到服务器。当客户端向服务器提供每个请求的cookie值时,都会使用服务器提供的数字签名进行处理。服务器每次签署当前cookie值时,如果客户端传入的签名与当前服务器值不匹配,服务器就知道cookie的参数已被篡改。这防止恶意客户试图模仿另一个用户或以其他方式执行未经授权的操作。

该方案仅适用于服务器只知道密钥的情况,否则任何客户端也可以签署服务器可以接受的cookie。因此secret_key

webapp2中的默认签名算法是HMAC-SHA1

而且,很快,当我看着通过实例化会话设置cookie,它是一个非常长的字符串

这是该服务器使用,如果你是好奇验证cookie中the code。你会注意到cookie是base64编码的json文档。

现在我想,secret_key的值可以是任何字符串,你希望它是正确的?

当他们从RFC 2104阐明在此security thread的20个或更多随机选择的字节的任何字符串HMAC-SHA1应该做的。

而且,可以说,我想在“会议”的cookie设置用户ID

我想,这大概是example你正在寻找。

+0

完美,我正在寻找的概念性解释。现在我想,'secret_key'的值可以是任何你想要的字符串,对吗?另外,很快,当我通过实例化会话查看cookie集时,它是一个非常长的字符串。任何想法,所有这些角色来自哪里?可能与“秘密会话”有关。再次感谢。 – Bryan