python解析laravel cookie

最近在学习 fastapi,刚好有一个爬虫项目需要我开发。公司之前的技术栈是 php,线上的老项目都是 laravel 写的,laravel 的性能懂的都懂,实在是有点不忍直视,但是开发速度确实很快。

fastapi 算是 python 框架里比较好的,可以自动生成 swagger 文档,用起来也是非常方便。

laravel 的 cookie 解析起来还是有点复杂的,当然这也是 laravel 比较安全的一个保障。

现在要用 fastapi 跟 laravel 共存,为前端提供接口的话,有两种方案

  • laravel 做一层代理,通过了鉴权再调用一下 python 项目,相当于做了一层代理
  • 用 python 实现一套处理 laravel cookie 的解析方案

前面也说到 php 整体性能偏差,做一层代理的话性能消耗会更高,所以直接 pass 掉,选择自己实现一套解析。

技术详解

image.png

laravel使用了比较多的安全策略,这也是laravel性能较差的一些原因,每次cookie解析都要使用aes-256-cbc加密解密,cpu的消耗也是比较明显的。

搞清楚了解析流程就比较简单了,后续就是用python实现一套相同的流程

session 默认的序列化为 serialization,可以通过在配置文件 config/session.php 增加 'serialization' => "json" 设置序列化为 json 模式,方便跨语言解析,当然 serialization 方法也比较简单,如果无法更改为 json,也可以自己实现,或者使用第三方包。

开发

首先实现一个 aes-256-cbc 解密算法

def _unpad(s):
    return s[: -s[-1]]
    
    
def aes256cbc_decrypt(key, iv, ciphertext):
    # 解码密文
    key = base64.b64decode(key)
    iv = base64.b64decode(iv)
    ciphertext = base64.b64decode(ciphertext)

    # 创建AES解密器
    cipher = AES.new(key, AES.MODE_CBC, iv)

    # 解密密文
    decrypted_text = cipher.decrypt(ciphertext)

    # 去除填充
    decrypted_text = _unpad(decrypted_text)

    # 返回解密结果
    return decrypted_text.decode("utf-8")

实现一个 laravel cookie 解析方法

def laravel_decrypt(laravel_cookie) -> str:
    if not laravel_cookie or laravel_cookie == "":
        return ""
    laravel_config = Setting.Laravel
    # 测试
    session_obj = decode_cookie_str(laravel_cookie)

    iv = session_obj["iv"].encode()

    return aes256cbc_decrypt(laravel_config.key, iv, session_obj["value"])

新版 laravel 增加了一个 cookie key 的 hmac hash,用 | 分割开前面是 key 的 hash值,后面是 Session ID

  1. 获取到了 Session ID ,就可以获取到 session 中存储的具体值,如果值中存在 login_web_59ba36addc2b2f9401580f014c7f58ea4e30989d 的 key,说明用户已经登陆,此 key 的值即为用户 ID。
  2. 如果 Session ID 不存在,需要尝试从 cookie 中获取 remember_web_59ba36addc2b2f9401580f014c7f58ea4e30989d,如果存在,使用相同的解析方法解析开来,可以获取到用户 ID,remember_token,encryped_password 三个字,根据用户 ID 尝试从数据库获取用户信息,然后对比 remember_token 和 encryped_password 的值,如果相同,说明用户应该存在登陆态,刷新登陆态到 Session 中。

总结

以上就是 python 解析 laravel cookie 的大部分内容,后面就可以愉快地使用 python 做开发了,这套方案整体安全性还是比较高的,也可以看到 app_key 这个变量的巨大作用,千万不要泄露了。

---------------------------END---------------------------

题外话

当下这个大数据时代不掌握一门编程语言怎么跟的上脚本呢?当下最火的编程语言Python前景一片光明!如果你也想跟上时代提升自己那么请看一下.

在这里插入图片描述

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。


👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述
👉 CSDN大礼包:gift::[全网最全《Python学习资料》免费赠送:free:!](https://blog.csdn.net/weixin_68789096/article/details/132275547?spm=1001.2014.3001.5502) (安全链接,放心点击)

若有侵权,请联系删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值