前天,我发布在博客园上的某知名电商网站的Cookie漏洞引发园友们的热议,学到了很多知识,现在整理一下其中比较激烈的技术讨论。谁对谁错每个人自己心中都有一把称,很多时候都是我无法说服你,你也无法说服我。

论题1:

网友:https是安全的,在传输过程对cookie等数据进行了有效的加密,所以https站下的Cookie也是安全的;

我:https下的cookie在传输过是安全的,但在客户端上是不安全的,使用客户端的有用户还有黑客;

我的论据:假设在某网站A下,我登录了自己的账号,打开浏览器cookie时发现有一条是这样 user = batsing ,然后我会想我把 user 这个cookie的值改成了别人的用户名是不是直接就可以登录了别人的账号呢?如果服务端程序是直接根据这个cookie值就认为是这个用户的话,那么这样的做法是很可行的。

我的建议:无论有没有使用SSL,Cookie值都一定要经过高强度难破解的加密算法进行处理。

论题2:

网友:哈希算法用在加密领域是可以信赖的

我:哈希算法用在加密领域是不可信赖的

我的论据:1、哈希算法产生的密文具有明显的特征,为黑客破解指明的方向。哈希算法产生的密文全为数字加纯小写字母(或纯大写),MD5为32位,SHA1为40位,SHA-256为64位,SHA-512为128位。2、哈希算法已经有大量的彩虹表和数据库作为破解工具,破解难度大大减少,其安全性值得质疑。

我的建议:所有的密文都要使用没有明显特征,不易被破解的算法进行加密处理,推荐使用AES加密算法(修正:加上与哈希结合)。PS:我以前不知道有AES算法的时候,是混合使用了SHA1、字符串截取和Base64处理的,弄成一眼看上去也不好破解的样子(同时包含数字、大小写还可能有符号←_←)。

总结:

1、Cookie是可以安全使用的;

2、现在几乎每个月都会有几起安全问题被曝光,我们程序员更要提高安全意识;

相关安全议题:

一、注册/登录表单的密码安全

方案1、使用SSL,使表单信息在传输过程中为密文状态,被截获时仍然难以破解利用;

方案2、使用安全控件,比如银行的网页和一些大型电商的网页,在客户端加密了再传输;

方案3、使用JS加密密码,到服务端再解密,但由于JS是可见的,加密算法也是可见的,所以JS文件本身也需要进行加密压缩让其难以阅读;(此非良策)

  对于JS文件的压缩加密,网上有很多网站提供这样的功能,另外还发现一个有趣的更厉害的“加密”JS的方法,有兴趣的可以点这里>>  (备用链接>>);

二、字符串加密

(这里过于笼统又争议较多,所以我现在把它拆分开来)

2-1、数据库密码加密:

方案1、很多网站在用的多重哈希加密;(大多数网友认可,但我个人不推荐)

方案2、哈希加密与AES加密结合;(本来是想单纯AES加密的,园友@xmodygetz评论说单纯AES加密服务器被攻破密钥泄露时会导致密码被破解,所以我在这里作了修正,谢谢这位园友指正)

方案3、现有加密函数加上自己编的一些字符处理方法组合;

2-2、cookie加密(注意cookie和session的区别及用途)

cookie要在服务端生成,不要在前端用js生成,一般都要能在服务端还原出原文,所以加密是可逆的。

方案一、AES;

方案二、自己编的一些函数;

2-3、表单中的密码js加密

我的方案:生成登录页面时后台生成一个随机码密钥给前端表单并用session记录,前端Js加密时使用该随机码作为密钥加密表单,提交密钥和密文给服务端,服务端审核随机码和解密密文。由于密文、密钥和加密方法js都是可截获的,所以此并非良策。

三、Cookie记录用户应包含和验证的原始信息

1、用户ID√  用于识别用户身份的标识

2、浏览器信息√  用于阻止部分黑客电脑浏览器直接窃用手机Cookie

3、IP地址ㄨ PC可以用但手机不能用,手机IP经常会变

4、时间戳 ? 用途要看具体算法。如果Cookie密文无法还原出原文的时间戳那么就无法校验时间戳的有效性;如果可以还原,那么此cookie就可以在后台判定在规定时间内有效(注意这里的有效期与平时说的cookie有效期不一样,平时说的有效期是过期会被浏览器清走,而这里的是被窃走的cookie在超过一定时间后就不被后台程序认同)

5、有没有办法获取和使用更独立的信息,最好是与设备绑定的。比如MAC地址,比如手机的序列码。

6、cookie一般网站可以使用,提高用户方便性。但因其有较大被窃取的风险,所以与金钱直接相关的网站/页面建议不使用cookie。

如何让别人把cookie复制走了也无法登录,这个还没有想到比较好的解决方案,求指教。

四、关于Session的安全

1、中间人把sessionid的cookie窃走可以是可以直接登录的;

2、用户在网页内 注销登录/安全退出 之后( 后台处理是PHP的session_destroy() ),那个sessionid也跟着失效了,所以这种情况下那个sessionid的时效很短,留给黑客的利用时间也很少;

3、如果用户不是在网站上退出而是直接关闭浏览器的话,那个sessionid不会失效,黑客利用那个sessionid的cookie还是一直有效的,直到达到服务器设定的session有效期;

4、可以让浏览器在关闭页面时主动向服务器申请关闭session,但是又判断不了这个页面是不是用户打开该网站的唯一 一个页面,会造成用户关闭一个标签页就直接退出登录了,除非那个浏览器一次只能打开一个页面,比如微信内置的浏览器;

5、很多手机用户可能有看完但不关闭网页一直挂着的习惯,所以只能等到了服务器设定的session有效期到期才会退出或自动重新登录(用户cookie)而注销sessionid;

6、所以目前来说session的安全只能依赖于传输路径的安全和服务器设定的session有效期;

--2015-11-16续--

五、Cookie的 HttpOnly 和 HTTPS属性

HttpOnly属性是指该Cookie只能通过服务端访问,浏览器JS不能访问,可以有效减少XSS攻击的身份窃取。所以一般情况下,业务Cookie都应该设置为HttpOnly。

HTTPS属性是指该Cookie只有在https情况下才能使用,所以如果你的网站使用了SSL,那么也应该设置这个属性以提高安全性。

相关链接:

1、HTTPS详细介绍

2、MD5/SHA等简单破解网站

3、常用各类哈希加密网站

安全或不安全最终的体现或许只是一行代码,背后的博弈才是“冰山模型”的水下部分

转载于:https://www.cnblogs.com/batsing/p/4878832.html

后记:Cookie安全大辩论总结相关推荐

  1. WKWebView之cookie请求

    贴上代码: #import "MJWebVC.h"//Libs #import <WebKit/WebKit.h>@interface MJWebVC ()<WK ...

  2. 利用python爬虫(part15)--cookie模拟登陆

    学习笔记 文章目录 cookie模拟登陆 获取cookie 爬取我的简介 cookie模拟登陆 有的时候,我们想要抓取一个网站,但是需要先登录才能访问它,如果不输入用户名和密码,我们就会一直停留在登录 ...

  3. qq空间登陆 cookie_把这篇 Session、Cookie、Token看完,和面试官随便谈人生

    先看大纲: Cookie 和 Session HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录:Session 和 Cookie ...

  4. qq空间登陆 cookie_看完这篇 Session、Cookie、Token,和面试官扯皮就没问题了||CSDN博文精选...

    作者:程序员cxuan Cookie 和 Session HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录:Session 和 ...

  5. 接收Cookie总结

    0x01 前言 最近总结了一下自己接收cookie的方法,和大家分享一下.来源于平时的积累和良师益友的分享. 0x02 进入正题 一:通过XSS平台接收cookie. 这个相信每个人都用过,是大家接收 ...

  6. cookie注入分析和动画教程

    cookies的注入方法和原理 现在很多网站都采用了通用防注入程序,那么对于这种网站,我门是否就束手无策了呢?答案是否定的,因为我们可以采用cookie 注入的方法,而很多通用防注入程序对这种注入方式 ...

  7. HTTP 协议入门 — (TCP/IP协议族、通信传输流、URI 与 URL 的区别、Cookie 状态管理、HTTP 支持的方法、状态码类别、HTTP 首部字段)

    TCP/IP协议族 在介绍 HTTP 协议之前,我们先对 TCP/IP 协议族有个大概的了解,TCP/IP 协议从上到下主要分为应用层.传输层.网络层和数据链路层,各层的主要功能如下表所示: 协议层 ...

  8. cookie 免密登录_python

    我们都知道 HTTP 是无状态的,用户每次打开 web 页面时,服务器都打开新的会话,而且服务器也不会自动维护客户的上下文信息,那么服务器是怎么识别用户的呢? 这就是本文今天要讲解的内容.当服务端需要 ...

  9. 你想了解的Cookie和Session就在这~

    目录 1.会话的概念 2.保存会话的两种技术 3.Cookie 4.Session(重点) 1.会话的概念 我们知道session的意思就是会话,Cookie和Session 是两种会话技术,我们首先 ...

最新文章

  1. Java学习笔记07--日期操作类
  2. 高中数学与计算机程序
  3. matlab aviobj,MATLAB AVI 视频读取处理
  4. pycharm 快捷键2
  5. OpenAirInterface中的哈希表hashtable实现
  6. 【简报】帮助开发人员在线了解CSS Filter特性的工具 - CSS FilterLab
  7. 彻底删除linux mbr,如何删除mbr分区表(超详细介绍Linux管理分区技巧)
  8. ABAQUS计算不收敛问题,排查方法和解决方案都在这儿了
  9. 模2除法怎么计算,模2除法最简单的理解
  10. 【小猿說】以小刀会“的成败论当今创业成败
  11. 基于STM32的AD9854模块调试总结
  12. 天猫总裁靖捷详解新零售:传统商圈平均增长超50%
  13. Redis之时间轮机制(五)
  14. 攻防世界xff和refereer
  15. ANSYS Workbench远端位移边界条件的解析
  16. 主从博弈论文中关于均衡解证明的写作总结
  17. 微软苏州校招1月3日在线编程题1——constellations
  18. 你手上有50万,你会干什么?
  19. 从flv文件中提取h264码流(使用av_bsf_send_packet和av_bsf_receive_packet)
  20. Leetcode练习题:复杂数据结构

热门文章

  1. Linux C++线程池
  2. OO第四单元博客作业
  3. 如何统计网站用户的停留时间?
  4. 路飞学城Python-Day182
  5. Hive动态分区 参数配置及语法
  6. windows 7(32/64位)GHO安装指南(序篇)~
  7. HRBUST 1909——理工门外的树——————【离线处理,差分前缀和】
  8. iPhone开发【一】从HelloWorld開始
  9. HTML5编程实战之二:用动画的形式切换图片
  10. asp.net C# 直接读取或访问其它网站的URL示例