cookie和session的工作原理及Python爬虫伪造cookie的可行性

Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)

 

Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。

 

简单理解cookie和session和cookie就是一个字典,只是一个储存在服务器、一个存储在客户端,拿验证用户是否登陆来说:

 

方法一:一个客户端存储cookie = {“session_id”: 'adxgfsxzafas' }、服务器储存session={'adxgfsxzafas':“login”},当用户访问这个网站,后台读取cookie里面的session_ID ,然后在自己的session里面读取对应id,发现该用户已经登录,那就不需要用户在登陆。

 

这种方法的好处是所有的敏感信息都在后台,非常安全,坏处是增加了session存储的开销。

 

方法二:在用户登陆后设置cookie={“name”:“abc”, “UUID“:后台分配的用户微信id,可以是根据密码生成的},这种方式下,当用户登陆读取用户名和id,然后根据后台算法验证是否为登陆用户,这种方法不需要session。

 

 

再看tornado里面的cookie对象:

cookie和session的工作原理及Python爬虫伪造cookie的可行性

 

cookie和session的工作原理及Python爬虫伪造cookie的可行性

 

在继承RequestHandler对象后,self参数具有以下方法:

set_cookie(name, value, domain=None, expires=None, path='/', expires_days=None)
self.set_header("Set-Cookie", "n5=v5; expires=Fri, 11 Nov 2016 15:59:59 GMT; Path=/") 
两种方式设置cookie

get_cookie(name, default=None)
获取cookie

clear_cookie(name, path='/', domain=None)
删除名为name,并同时匹配domain和path的cookie。

clear_all_cookies(path='/', domain=None)
删除同时匹配domain和path的所有cookie。

 

到此我们应该明白后端的session和cookie操作本质是对字典中键值对的操作,那我们回到正题在Python爬虫中是否可以伪造cookie。

 

在明白cookie作用原理后我们要清楚伪造一个cookie首先要弄清楚他的生成原理:cookie是后台生成的一个值,这个值可能和用户名相关可能和密码相关,他的伪造难度是很大的,举几个例子:

  • 对密码区md5然后在截取部分结果字符串再取MD5返回客户端

  • 直接对密码使用RSA或者AES、DES、EDS3等加密并且**在后端,很难**

  • 不涉及密码直接用用户名生成一个UUID然后记录到session里面,在返回客户端,即使伪造了UUID但是没有在session里面注册,也无法使用

 

通过上面三种假设,伪造cookie的难度是显而易见的,所以即使是现在也只是使用正常登陆后获取的cookie伪造的请求。

 

如果说一个网站的cookie可以伪造并且可以通过验证,那么这种网站的安全性还到不了爬虫使用cookie登陆的地步,这必定也是没有价值的网站。

 

------------------------------

 

ID:Python之战

 

|作|者|公(zhong)号:python之战 

 

专注Python,专注于网络爬虫、RPA的学习-践行-总结

 

喜欢研究技术瓶颈并分享,欢迎围观,共同学习。

 

独学而无友,则孤陋而寡闻!

 

---------------------------