做网站难免要面对安全性的问题,诸如sql注入拉,cookie冒名拉,等等,sql注入算是老生常谈,翻翻旧账有不少优秀的帖子在说明这个问题,所以我们来说说Session冒名顶替的风险以及应对的办法。 首先要说Session冒名顶替,就得说说Session的原理。Session是一个在服务器端保持会话的机制,其实在Http协议里并没有规定 Session这个东西,所以他的实现方式就有点千奇百怪,不同的Web框架下Session的实现机制都是不一样的。但是原理都是大同小异的,这里普遍应用的机制是通过Cookie来存储一个会话的票据(也就是SessionID),服务端在cookie里取得SessionID后就去存储 Session的后端(可以是进程里,数据库,或者其他任何可以存储数据的东西,包括文件)去获取这个会话的数据。 我们用一个抓包工具来获取一段数据看看,如下:    GET /w3/global/j/global.js HTTP/1.1  Accept: */*   Referer: http://www.jiayuan.com/login/index.Php?pre_url=/usercp  Accept-Language: zh-cn  Accept-Encoding: gzip, deflate   User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52)  Host: images.jiayuan.com  Connection: Keep-Alive   Cookie: SESSION_HASH=aa200d999de428f8e84ad56f4fc0afb9ac88fb78; stadate1=25727411;  myloc=53%7C5301; myage=24; mysex=m; myuid=25727411; myincome=30; last_login_time=1277561249; new_msg=0; pop_1268278480=1277575662747; pop_time=1277561290653   标红字的地方就是SessionID了,当然asp.NET有一种Cookieless的机制,是把这个ID放在url里传递。 这里就有一个问题,这个ID在非SSL的环境下提交是明文的,所以如果这个ID被窃取,然后就可以冒名顶替别人的身份了(注:大多数框架的设计中 Session一旦被创建后,SessionID的值就固定了,不会变)。 这涉及到Web开发中的一个说法,就是客户端的任何输入都是不可信的,所以Cookie作为在客户端保留的数据,在没有防篡改机制的保护下,其内容也是不可信任的。一旦信任了这样的数据,就会存在一个安全上的隐患。  那么如何来防范呢,这里我们需要实现cookie防篡改的功能。Cookie防篡改功能的原理很简单。假设我有一个值要写入Cookie  key="user_name" value="alexander"  如果需要防止这个值被篡改成其他的值是不可能的,因为cookie已经写到了客户端,别人可以随意的改,服务器是没办法阻止的,但是我们可以用防篡改的机制来让服务器知道cookie的值被篡改过。所以在向客户端发送cookie的时候就不能原样发回去了,我们在Cookie的值后面跟上一段防篡改的验证串,整个作为一个整体发送到客户端。所以客户端得到的cookie可能就是这个样子: user_name=alexander|ab95ef23cc6daecc475de  用|分割的后面部分就是验证串,也可以叫防篡改验证串。它是这样生成的, DES(cookie的内容+盐值) 也可以用 MD5(cookie内容+密钥)也可以是SHA1(cookie内容+密钥),这里的密钥只有站点本身知道,如果这个都泄漏了那就真完蛋了。这个值在服务器接收到Cookie以后,就可以用Cookie的内容+密钥重新计算一次验证串,和提交上来的做比对,如果是一致的,我们就认为cookie没有被篡改,反之,cookie肯定被篡改过,我们就不要相信这一次提交。如果所有的Cookie都经过防篡改验证,那么也就不用担心SessionID被冒名顶替的事情发生了。  ASP.NET的sessionID我不知道是否有这个机制(汗颜,以前一直没关注过)不过Cookie是没有的,所以大家可以自己动手来增加这个功能,这样对于提高站点的安全性是有非常大的帮助的。

网站如何防Session冒名顶替和cookie防篡改的更多相关文章

  1. XSS,CSRF,Cookie防劫持的处理

    Cookie与sessionHTTP天然是无状态的协议, 为了维持和跟踪用户的状态, 引入了Cookie和Session. Cookie包含了浏览器客户端的用户凭证, 相对较小. Session则维护 ...

  2. Cookie防篡改机制

    一.为什么Cookie需要防篡改 为什么要做Cookie防篡改,一个重要原因是 Cookie中存储有判断当前登陆用户会话信息(Session)的会话票据-SessionID和一些用户信息. 当发起一个 ...

  3. Application对象、Session对象、Cookie对象、Server对象初步认识

    Application对象:记录应用程序参数的对象 用于共享应用程序级信息,即多个用户共享一个Application对象.在第一个用户请求ASP.NET文件时,将启动应用程序并创建Applicatio ...

  4. PHP 实现多网站共享用户SESSION 数据解决方案

    PHP 实现多网站共享用户SESSION 数据解决方案 来源URL:http://blog.csdn.net/dongdongzzcs/article/details/6906613 一.问题起源 稍 ...

  5. 关于requests的session方法保持cookie的问题。

    最近在做爬虫的时候遇到了一个问题,在用requests的session方法保持cookie的时候发现requests不能保持手动构建的cookie.起初以为requests只能自动保持由服务器返回的s ...

  6. Session会话与Cookie简单说明

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  7. cookie和session以及iOS cookie的查取

    Cookie的工作原理 http是无状态的,这是什么意思呢?就是说,在没有cookie之前,你第一次访问这个页面和第二次访问这个页面, 服务器是不知道的,不知道前一次是你.那么问题来了,我怎么登录,登 ...

  8. session共享原理以及PHP 实现多网站共享用户SESSION 数据解决方案

    参考自: http://www.cnblogs.com/qulinke/articles/6003049.html https://segmentfault.com/q/101000000578847 ...

  9. HTML5塔防游戏——《三国塔防》 - Yorhom's Game Box

    h3{ font-size:20px; } HTML5塔防游戏--<三国塔防> 游戏介绍: <三国塔防>是一款基于HTML5和Javascript的2D塔防游戏.游戏中除了塔防 ...

随机推荐

  1. Sitemesh 3 的使用及配置

    1 . Sitemesh 3 简介 Sitemesh 是一个网页布局和修饰的框架,基于 Servlet 中的 Filter,类似于 ASP.NET 中的‘母版页’技术.参考:百度百科,相关类似技术:A ...

  2. 一步一步自定义SpringMVC参数解析器

    随心所欲,自定义参数解析器绑定数据. 题图:from Zoommy 干货 SpringMVC解析器用于解析request请求参数并绑定数据到Controller的入参上. 自定义一个参数解析器需要实现 ...

  3. Learning WCF Chapter 3 Bindings One-Way and Duplex Communication

    One-Way and Duplex Communication A message exchange pattern describes the way messages are sent betw ...

  4. 网络流(费用流)CodeForces 321B:Ciel and Duel

    Fox Ciel is playing a card game with her friend Jiro. Jiro has n cards, each one has two attributes: ...

  5. POI做题记录:第二届POI

    Trees Memory limit: 32 MB Trees occur very often in computer science. As opposed to trees in nature, ...

  6. page-object使用(2)---elements

    elements就是html元素下所有的标签.用page-object你可以找到并定位html页面下绝大多数的元素,这个文章列出了可定位的这些元素,生成的方法,和依据什么关键字来找到这些元素. BUT ...

  7. 增加几个entity framework 的函数 (记录备忘)[转]

    public static class DatabaseExtensions { public static DataTable SqlQueryForDataTatable(this Databas ...

  8. 游戏开发设计模式之状态模式 & 有限状态机 & c#委托事件(unity3d 示例实现)

    命令模式:游戏开发设计模式之命令模式(unity3d 示例实现) 对象池模式:游戏开发设计模式之对象池模式(unity3d 示例实现) 原型模式:游戏开发设计模式之原型模式 & unity3d ...

  9. TMS320VC5509A DSP学习路线(持续更新)

    step 1:芯片的数据手册(data sheet) 参考资料:sprs205k_TMS320VC5509A Fixed-Point Digital Signal Processor Data Man ...

  10. 排序算法简介及其C实现

    排序算法(Sorting Algorithm)是计算机算法的一个组成部分. 排序的目标是将一组数据 (即一个序列) 重新排列,排列后的数据符合从大到小 (或者从小到大) 的次序.这是古老但依然富有挑战 ...