99.session,跨站伪造以及多种编码方式

一.session对象

1.在Django框架中提供了一个在服务端保存用户相关信息的session对象。


Session:在计算机网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。有关使用 Session 对象的详细信息,请参阅“ASP 应用程序”部分的“管理会话”。注意 会话状态仅在支持 cookie 的浏览器中保留。


2.session与cookie的区别
session的底层是基于cookie技术来实现的,在早器保存会话状态一直用的cookie,cookie是保存在客户端的明文键值对,但这样直接保存重要信息是不安全的,后来衍生了session,session是加密后的cookie键值,加密后的值即使被人截取,也无法获取到密码等敏感信息,避免了重要资源信息泄露。当用户打开浏览器,去访问服务器的时候,服务器会为每个用户的浏览器创建一个会话对象(session对象),并且为每个session对象创建一个Jsessionid号。当session对象创建成功后,会以cookie的方式将这个Jsessionid号回写给浏览器,当用户再次进行访问服务器时,及带了具有Jsessionid号的cookie数据来一起访问服务器,服务器通过不同session的 Jsessionid号来找出与其相关联的session对象,通过不同的session对象来为不同的用户服务。

99.session,跨站伪造以及多种编码方式_第1张图片
image

二.服务器记住用户的三种方式

1.希望服务器记住用户的方式有以下三种:
1.URL重写 http://www.baidu.com/?uid=xxxxxx


2.隐藏域(隐式表单域)




3.浏览器本地存储
(1)cookie:是浏览器中的临时的文件可以保存键值对中
其中的数据,在发起HTTP请求是会自动加载在请求头中。其实就是用户的跟踪。

99.session,跨站伪造以及多种编码方式_第2张图片
cookie.jpg

(2window.LocalStorage/wingow.sessionStorage


cookie和session两者的关系:

request.session--->服务器内存中的一个对象
cookie--->用户浏览器临时文件-—->cookie中保存了session的ID


三.跨站请求的伪造。


99.session,跨站伪造以及多种编码方式_第3张图片
跨站请求伪造和post令牌.jpg

四.Base64编码


se64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。

为解决此问题,可采用一种用于URL的改进Base64编码,它在末尾填充'='号,并将标准Base64中的“+”和“/”分别改成了“-”和“_”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象[标识符]格式。

另有一种用于[正则表达式]它将“+”和“/”改成了“!”和“-”,因为“+”,“*”以及前面在IRCu中用到的“[”和“]”在正则表达式中都可能具有特殊含义。

此外还有一些变种,它们将“+/”改为“-”或“.”(用作编程语言中的标识符名称)或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name)。

Base64要求把每三个8Bit的字节转换为四个6Bit的字节(38 = 46 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。

规则

关于这个编码的规则:

①.把3个字节变成4个字节。

②每76个字符加一个换行符。

③.最后的结束符也要处理。


五.python中Base64编码。


(1)python中有一个模块base64
导入模块:
from base64 import b64encode,b64decode。

(2)base64encode(二进制的数据)----可以把二进制的数据转为base64的形式。


六.js中编码base64 的方式


(1)window.btoa(二进制的数据) -----编码成base64
(2)window.atob()-----解码


七.百分号编码


(1)urllib 库
----支持这种编码方式。
from urllib.parse import quote ,unquote
(2)编码------quote(中文字符或空格)
(3)解码-------unquote("二进制")还原成中文字符。


八.加密解密,编码解码,摘要签名指纹。


加密解密 rsa/aes
编码解码 base64/百分号编码
摘要签名指纹 md5 shal sha256 sha512


你可能感兴趣的:(99.session,跨站伪造以及多种编码方式)