最近在做客户需求,要求提高session的安全性,需要把session的长度从32位提高至64位。主要内容是分析flask_session源码,具体如下。
init文件
1 | class Session(object): |
当我们初始化的时候,可以将session存储至内存、文件、redis、mongo、mysql等各种中间件中。可以对存储的内容进行相关配置,但是很遗憾,没有配置session长度的选项。
先了解下请求到来之前,获取session的方式
请求到来之前通过RequestContex 获取session, 由下图看出,open_session 调用session_interface,而session_interface,是SecureCookieSessionInterface()的对象。
而 SecureCookieSessionInterface(),提供了open,和save的方法,所以,可以使用 RedisSessionInterface 替换 SecureCookieSessionInterface,关键就是在配置文件中设置 session_interface指向哪个类
1 | class RedisSessionInterface(SessionInterface): |
其中 sid的生成方式为sid = self._generate_sid(),故修改长度,仅需要修改_generate_sid方法即可。
参考文献