HTTP与会话管理
1、Content-Type
发送值得MIME类型,可通过HTML的form元素设置。默认为application/x-www-form-urlencoded。格式为“名称=值”的组合通过&相连,名称和值都经过百分号编码。
2、百分号编码
中文和特殊符号等不能直接用于URL,需要经过百分号编码才能用于URL。
百分号编码将字符以字节为单位转换成%xx形式。中文“德”进行UTF-8编码,可得到E5 BE B3字节列,百分号编码后即为%E5%BE%B3。
根据百分号编码规则,空格应为%20,但在application/x-www-form-urlencoded的情况下,空格则被特殊处理成+号。
3、Referer
当前页面的链接来源页面。
form元素发送的请求、a元素生成的链接或img元素的图像等也会产生referer头信息。
4、GET和POST的使用区别
*GET方法仅用于查阅(获取资源)
*GET方法被认为没有副作用(副作用是指,除了获取资源内容以外的qi它操作。)
*发送敏感数据时应使用POST方法
GET方法使用的是URL后紧跟查询字符串的形式来传递参数,由于浏览器和服务器能够处理的URL长度是有限的,所以当传递的信息量很大时,使用POST方法更安全。
GET方法存在如下风险:
URL中指定的参数经由Referer泄露;
URL中指定的参数残留在访问日志中(Access Log)。
5、Hidden、cookie、session
在认证和授权信息这样需谨防被用户自己更改的信息,应当保存在会话变量中。
除此以外的信息,则首先应考虑能否保存在hidden参数中。
在登录前的状态下,由于不存在与认证和授权相关的信息,因此,原则上要避免使用会话变量,而是应该使用hidden参数,来防止信息泄露。
6、HTTP认证功能
Basic认证、NTLM认证、Digest认证等。
Basic认证:
此认证下,当浏览器请求一个需要认证的网页时,服务器会先向浏览器返回“401 Unauthorized(未认证)”状态码。浏览器收到状态码后,会显示要求输入ID和密码的画面,然后再将输入的ID和密码t添加到请求信息中,再次向服务器发送。
Basic认证大多通过设置Web服务器来实现,也通过编写代码实现。
Authorization头信息:Basic后面的字符串内容,由ID和密码以冒号像个组成的字符串、在经过Base64编码后的结果。
认证成功一次以后,再向请求的目录发送请求时,浏览器会自动附带Authorization消息头。认证对话框只在最初的时候显示一次,每次请求时都会发送ID和密码,认证状态没有被保存在任何地方。Basic认证是无状态的,不存在注销的概念。
7、认证与授权
认证:通过一些方法手段来确认操作者确实是其本人。
授权:授予已经通过认证的用户一些权限。
8、Cookie与会话管理
会话管理:记忆应用程序状态的功能。
通过Set-Cookie响应头信息,服务器向浏览器下达记住此cookie值的指示。
记住此Cookie值得浏览器,再向相同网站发送请求时,就会同时发送此Cookie值,
Cookie可以设置有效期限,没有设置有效期限的Cookie会在浏览器被关闭之前一直有效。
会话ID需满足如下需求:
1.会话ID不能被第三方推测;
2.会话ID不能被第三方劫持;
3.会话ID不能向第三方泄露。
要点:使用开发工具提供的会话管理机制。
会话固定攻击:攻击者劫持正规用户的会话ID来进行攻击的手法。修复方法为正常用户验证成功后,重新分配会话ID。
要点:认证后改变会话ID。
会话ID泄露的原因:
1.发型Cookie时的属性制定有问题
2.会话ID在网络上被监听
3.通过跨站脚本漏洞等应用中的安全隐患被泄露
4.由于PHP或浏览器等平台存在安全隐患被泄露
5.会话ID保存在URL中的情况,会通过referer消息头泄露
要点:原则上不设置Cookie的Domain属性。未指定Domain属性的Cookief发送范围最小,最安全。
Domian:扩展匹配,xxx.com的cookie可以被发送至aaa.xxx.com,bbb.xxx.com。
Secure:仅在SSL传输的情况下能够被发送给服务器。
HttpOnly:防止JavaScript窃取Cookie信息。
附录:
百分号编码属于URL(URI)的规范,application/x-www-form-urlencoded属于HTML的规范,存在细微差别。