做网站难免要面对安全性的问题,诸如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. C/C++ 开源库及示例代码

    C/C++ 开源库及示例代码 Table of Contents 说明 1 综合性的库 2 数据结构 & 算法 2.1 容器 2.1.1 标准容器 2.1.2 Lockfree 的容器 2.1 ...

  2. eclipse 导入Android项目时报告 Invalid Project Description

    现象描述: 1.新建Android项目XX2.删除Android项目XX3.使用Existing Android Code Into Workspace(EACIW)导入Android项目XX,报错: ...

  3. android屏幕适配详解

    android屏幕适配详解 官方地址:http://developer.android.com/guide/practices/screens_support.html 一.关于布局适配建议 1.不要 ...

  4. KK的新书《必然》对未来科技趋势的预言

    是他第一次在<失控>中提示我们--  要用生物学而不是机械学的角度看待这个世界.  是他第一次在<科技想要什么>提示我们--  科技本身就是一个生命体.  而在新书<必然 ...

  5. attitude

    刚看到一段挺有趣的游戏,分享一下. 如果 令 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 分别等于 1 2 3 4 5 6 7 8 9 10 ...

  6. 4种字符串匹配算法:KMP(下)

    回顾:4种字符串匹配算法:BS朴素 Rabin-karp(上) 4种字符串匹配算法:有限自动机(中) 1.图解 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R ...

  7. poj 2505 A multiplication game(博弈)

    A multiplication game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5622   Accepted: ...

  8. JavaScript高级程序设计7.pdf

    function类型 每个函数都是function类型的实例,函数是对象,函数名是指向对象的指针 function sum(num1,num2) { return num1+num2; } //等价于 ...

  9. [git] git 分支管理和工作流程

    分支管理 列举本地分支.下面的 * 是 HEAD 所指向的分支,标识当前工作目录所用的分支.其他分支隐藏在 git 仓库中,通过 git checkout 命令才能访问和修改. $ git branc ...

  10. 【题解】警位安排( 树形 DP)

    [题目描述]一个重要的基地被分成了 n 个连通的区域 , 出于某种原因 , 这个基地以某一个区域为核心,呈一树形分布.在每个区域里安排警卫的费用是不同的,而每个区域的警卫都可以望见其相邻的区域 .如果 ...