经典Web安全缺陷(Cookie设置无效)

来源:互联网 发布:数据库bms是什么意思 编辑:程序博客网 时间:2024/05/29 07:05

1、概念:
HTTP是一种无状态协议,它通过请求/响应的方式在服务器端和客户端进行响应。请求直接没有联系,所以当从一个页面跳转到另外一个页面的时候,信息无法传递,所以服务器端就得做个记号,将某中存储信息存储在浏览器中。即Cookie就是服务器经常采用的给客户打标记的来记录状态信息的一种方法。
Cookie可以用来存储数据库信息,个性化页面的设置,帮助在线页面取得和保持客户相关信息。它大大的扩展基于Web客户/服务器的应用能力。
2、在Web应用中,Cookie很容易成为安全问题的一部分。在实际的应用场景中,Cookie被用来做得最多的一件事是保持身份认证的服务端状态。这种保持可能是基于会话(Session)的,也可能是持久性的。不管是哪一种,身份认证Cookie中包含的服务端票据(Ticket)一旦泻露,那么服务端将很难区分带有此票据的用户请求是来自于真实的用户还是来自于恶意的攻击者。在实际案例中,造成Cookie泻露最多的途径,是通过跨站脚本漏洞。攻击者可以通过一小段JavaScript代码,偷窃到代表用户身份的重要的Cookie标示。避免此问题的首要秘诀是尽所有的可能,给你的Cookie加上HttpOnly的标签。
浏览器在选择发送那些本地Cookie到本次请求的服务端时,有一系列的比较和甄别。这些甄别中最重要的是域(Domain)和路径(Path)的吻合。Domain形如.abc.com 的Cookie,会被发送给所有abc.com在80端口上的字域请求。
在一个大型的Web站点中,往往有很多应用,生存在不同的子域名或路径下。这些应用之间由于共享一个域名,所以往往可能会彼此有操作对方应用Cookie的能力。在实际设计工作中,最重要的一个安全原则就是:最小化授权。这就意为着你需要将自己的Cookie可被访问的范围降至最低。
Cookie另外一个不太常被用到的属性就是Secure。这种属性启用时,浏览器仅仅会在HTTPS请求中向服务端发送Cookie内容。如果应用中有一项非常敏感的业务,比如登录或者付款,需要使用HTTPS来保证内容的传输安全;二在用户成功获得授权之后,获得的客户端身份Cookie如果没有设置为Secure,那么有很多会被非HTTPS页面中拿到,从而造成重要的身份泻露。所以,在Web站点中,如果使用了SSL,那么你需要仔细检查在SSL的请求中返回的Cookie值,是否指定了Secure属性。
除此之外,还值得特别指出的是,一些Web应用除了自己的程序代码中生成的Cookie,往往还会从其他途径生成一些Cookie。
几乎每个站点都离不开Cookie,但Cookie的使用貌似简单,二很容易被人轻视,崇信审视应用中的Cookie代码,几乎只需要很小的代价就可以获得巨大的安全收益。

0 0