WWW服务依赖于Http协议实现,Http是无状态的协议,所以为了在各个会话之间传递信息,就需要使用Cookie来标记访问者的状态,以便服务器端识别用户信息。

  Cookie分为内存Cookie和硬盘Cookie,内存Cookie储存在浏览器内存中,关闭浏览器则消失。如果是想要利用保存在内存中的Cookie,需要获取到用户Cookie+用户浏览器未关闭。如果是硬盘Cookie,则该Cookie是一段时间有效的(有的时候我们登录网站会出现保持登录状态的选项,即保存在硬盘中),这类Cookie获取到后在其有效期内都是可以进行受害者用户身份登录的,进而实现入侵。

  Cookie由变量名与值组成,其属性里有标准的cookie变量,也有用户自定义的属性。Cookie保存在浏览器的document对象中,对于存在XSS漏洞的网站,入侵者可以插入简单的XSS语句执行任意的JS脚本,以XSS攻击的手段获取网站其余用户的Cookie。

  Cookie是通过http response header种到浏览器的,设置Cookie的语法为:

Set-Cookie:=[;=][;expiress=][;domain=][;path=][;secure][;httponly]

  Cookie各个参数详细内容:

  • Set-Cookie:http响应头,向客户端发送Cookie。

  • Name=value:每个Cookie必须包含的内容。

  • Expires=date:EXpires确定了Cookie的有效终止日期,可选。如果缺省,则Cookie不保存在硬盘中,只保存在浏览器内存中。

  • Domain=domain-name:确定了哪些inernet域中的web服务器可读取浏览器储存的Cookie,缺省为该web服务器域名。

  • Path=path:定义了web服务器哪些路径下的页面可获取服务器发送的Cookie。

  • Secure:在cookie中标记该变量,表明只有为https通信协议时,浏览器才向服务器提交Cookie。

  • Httponly:禁止javascript读取,如果cookie中的一个参数带有httponly,则这个参数将不能被javascript获取;httponly可以防止xss会话劫持攻击。

  想要获取到用户的Cookie,攻击者通常是利用网站的XSS漏洞进行用户Cookie的窃取,跨站脚本简称xss(cross-site scripting),利用方式主要是借助网站本身设计不严谨,导致执行用户提交的恶意js脚本,对网站自身造成危害。xss漏洞是web渗透测试中最常见而又使用最灵活的一个漏洞。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。

  有的网站考虑到这个问题,所以采用浏览器绑定技术,例如将Cookie和浏览器的User-agent进行绑定,一旦发现绑定不匹配则认为Cookie失效,但是这种方法存在很大的弊端,因为当入侵者获取到Cookie的同时也能获取到用户的User-agent;另一种防止XSS获取用户Cookie的方式是将Cookie和Remote-addr相绑定(即与IP绑定),但是这样的弊端是可能会带来极差的用户体验,如家里的ADSL拨号上网就是每次拨号连接更换一个IP地址。

  所以HttpOnly就应运而生了 ️

  HttpOnly最早由微软提出,并在IE6 中实现,至今已经逐渐成为一个标准,各大浏览器都支持此标准。具体含义就是,如果某个Cookie带有HttpOnly属性,那么这一条Cookie将被禁止读取,也就是说,JavaScript读取不到此条Cookie,不过在用户与服务端交互的时候,HttpRequest包中仍然会带上这个Cookie信息,即用户与服务端的正常交互不受影响。

  HttpOnly的设置过程十分简单,而且效果明显。可以看到在上面的Cookie的参数里面存在:

Httponly:禁止javascript读取,如果cookie中的一个参数带有httponly,则这个参数将不能被javascript获取;httponly可以防止xss会话劫持攻击。

  该参数如其名,就是设置HttpOnly的。

  但需要注意的是,所有需要设置Cookie的地方,都要给关键的Cookie添加上HttpOnly,若有遗漏的话就会功亏一篑。

  另外,HttpOnly不是万能的,添加了HttpOnly不等于解决了XSS问题,它有助于缓解XSS攻击,但它并不能解决XSS漏洞的问题,也就是使用了HttpOnly只是在一定程度上抵御XSS盗取Cookie的行为,另外HttpOnly也不能防止入侵者做AJAX提交。严格来说HttpOnly并不是为了对抗XSS,它解决的是XSS后的Cookie劫持问题,但是XSS攻击带来的不仅仅是Cookie劫持问题,还有窃取用户信息,模拟身份登录,操作用户账户等一系列问题。所以除了HttpOnly之外还需要其他的对抗解决方案。

  安全是一个整体,网络安全没有银弹,最好的应对方式是抓住当下,脚踏实地,所有妄想一步解决所有问题的都是耍流氓

  参考链接:

https://juejin.im/post/5bac9e21f265da0afe62ec1b

https://www.biaodianfu.com/http-only-cookie-xss.html

https://blog.lsqy.space/2017/08/25/170825%E6%B5%85%E8%B0%88XSS%E6%BC%8F%E6%B4%9E%E6%94%BB%E5%87%BB%E4%B8%8E%E9%98%B2%E5%BE%A1/

XSS漏洞防御之HttpOnly的更多相关文章

  1. Atitit. Xss 漏洞的原理and应用xss木马

    Atitit. Xss 漏洞的原理and应用xss木马 1. XSS漏洞1 2. XSS的用途2 2.1. 盗取cookie2 2.2. 刷新流量 刷分3 2.3. DOS 窃取隐私”.“假冒身份”. ...

  2. XSS漏洞学习笔记

    XSS漏洞学习 简介 xss漏洞,英文名为cross site scripting. xss最大的特点就是能注入恶意的代码到用户浏览器的网页上,从而达到劫持用户会话的目的. 说白了就是想尽办法让你加载 ...

  3. 解决反射型XSS漏洞攻击

    对于程序员来说安全防御,无非从两个方面考虑,要么前端要么后台. 一.首先从前端考虑过滤一些非法字符. 前端的主控js中,在<textarea> 输入框标签中,找到点击发送按钮后,追加到聊天 ...

  4. 一个xss漏洞到内网漫游【送多年心血打造的大礼包啦!】

    i春秋作家:jasonx 原文来自:一个xss漏洞到内网漫游[送多年心血打造的大礼包啦!] 前言 渗透过程中,有时候遇某些网站,明明检测到有xss漏洞,但是盲打以后,收到的cookie还是不能登录后台 ...

  5. 从零学习安全测试,从XSS漏洞攻击和防御开始

    WeTest 导读 本篇包含了XSS漏洞攻击及防御详细介绍,包括漏洞基础.XSS基础.编码基础.XSS Payload.XSS攻击防御. 第一部分:漏洞攻防基础知识   XSS属于漏洞攻防,我们要研究 ...

  6. XSS漏洞之加载远程js文件

    这次在对一个系统渗透测试过程中,发现一个XSS漏洞,可弹窗,并且没有httponly 但是在尝试加载远程js文件的时候发现,script标签被过滤掉了,准确的说应该是服务器后端在识别到输入内容有< ...

  7. XSS漏洞基础

    什么是XSS? XSS全程Cross-site scripting,跨站脚本攻击.恶意攻击者往Web页面里插入html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用 ...

  8. XSS漏洞的渗透利用另类玩法

    XSS漏洞的渗透利用另类玩法 2017-08-08 18:20程序设计/微软/手机 作者:色豹 i春秋社区 今天就来讲一下大家都熟悉的 xss漏洞的渗透利用.相信大家对xss已经很熟悉了,但是很多安全 ...

  9. 浅谈xss漏洞

    0x00 xss漏洞简介 XSS漏洞是Web应用程序中最常见的漏洞之一.如果您的站点没有预防XSS漏洞的固定方法, 那么很可能就存在XSS漏洞. 跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Scr ...

随机推荐

  1. MobaXterm 连接 VirtualBox 6 虚拟机中的 CentOS 7

    1 运行环境 本机系统:Windows 7 虚拟机软件:Oracle VM VirtualBox 6 虚拟机系统:CentOS 7 MobaXterm(安装在本机上) 2 MobaXterm - 远端 ...

  2. hibernate3.6-联合主键注解以及openSession和getCurrentSession区别

    [联合主键]>>>>配置方式:xml:    1. Student中单独创建StudentPk主键实体类 2. 配置: <composite-id name=" ...

  3. nginx&http 第三章 ngx 1-http ngx_http_wait_request_handler

    对于活跃的 HTTP 连接,在执行连接建立回调函数 ngx_http_init_connection 的过程中会执行 ngx_http_wait_request_handler 回调函数, 负责 HT ...

  4. UNP——第四章,TCP套接字编程

    1.socket 函数 首先被调用的函数,用于选择通信协议. socket调用成功后,得到的套接字为主动套接字CLOSED状态. PF 和 AF 的关系 PF的是协议族,AF是地址族,理论上一个PF包 ...

  5. rgw配置删除快速回收对象

    前言 做rgw测试的时候,经常会有删除文件的操作,而用默认的参数的时候,rgw是通过gc回收机制来处理删除对象的,这个对于生产环境是有好处的,把删除对业务系统的压力分摊到不同的时间点,但是测试的时候, ...

  6. Flink处理函数实战之二:ProcessFunction类

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  7. Spring第三天,详解Bean的生命周期,学会后让面试官无话可说!

    点击下方链接回顾往期 不要再说不会Spring了!Spring第一天,学会进大厂! Spring第二天,你必须知道容器注册组件的几种方式!学废它吊打面试官! 今天讲解Spring中Bean的生命周期. ...

  8. PHP 使用gd库压缩图片并生成新图片返回全路径

    使用gd库前,先检查是否开启了gd库 phpinfo(); 如果在php配置信息里找到了gd库,那么就是开启了,没开启的自行百度如何开启php gd库 既然开启了gd库,那么直接再php里写入以下代码 ...

  9. ABBYY FineReader 14如何查看PDF文档

    使用 ABBYY FineReader,您可以轻松查看和编辑任何类型的 PDF文档,就像是一款功能强大的PDF编辑转换器,不仅如此,它还能够允许您复制其中的文本.图片和表格.本文我们来看看如何从&qu ...

  10. CDR中调和工具的使用方法

    CDR中的调和工具也是一个神奇的工具,和AI中的混合工具类似,可以做出很多好看的形状,下面先看下他的基本操作方法. 要了解CorelDRAW平面设计软件中的cdr调和工具怎么用,首先要知道调和工具的作 ...