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. ashx接收前台传来的数据

    前台js: $(function () { $.ajax({ url: "/TestAshx/GetJson.ashx", type: "post", data ...

  2. Serilog 源码解析——解析字符串模板

    大家好啊,上一篇中我们谈到 Serilog 是如何决定日志记录的目的地的,那么从这篇开始,我们着重于 Serilog 是向 Sinks 中记录什么的,这个大功能比较复杂,我尝试再将其再拆分成几个小块方 ...

  3. gitlab - 解决添加webhook提示Url is blocked: Requests to the local network are not allowed的问题

    问题背景 给项目添加 webhook 保存之后报错了 解决方案 进入 admin  area 进入 settings-network 保存设置后,重新进入项目并设置 webhook 保存即可成功

  4. HTML 5 <input> multiple 属性

    <form action="demo_form.asp" method="get"> Select images: <input type=& ...

  5. CMake编译OpenCV4.0时opencv_ffmpeg.dll等下载失败的解决思路总结

    一.Configure会报一些红色的警告信息,比如: 1 CMake Warning at cmake/OpenCVDownload.cmake:193 (message): 2 FFMPEG: Do ...

  6. Python_scrapyRedis零散

    1. # Redis 1.解压,配环境变量 2.win上设置自启动 redis-server --service-install D:\redis\redis.windows.conf --logle ...

  7. 数据结构实训——哈夫曼(Huffman)编/译码器

    题目4.哈夫曼(Huffman)编/译码器(限1人完成) [问题描述] 利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本.但是,这要求在发送端通过一个编码系统对待传数据预先 ...

  8. 光棍节程序员闯关秀writeup

    答题链接https://1111.segmentfault.com/ 第一关 首先当然是右键查看源码啊 点击链接进入下一关 第二关 还是老样子,右键查看源码 这个key是要放在URL链接里敲回车的 第 ...

  9. pip install 一个本地包时提示error: Microsoft Visual C++ 14.0 is required.

    错误如下: error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Too ...

  10. 关于C# Span的一些实践

    Span这个东西出来很久了,居然因为5.0又火起来了.   相关知识 在大多数情况下,C#开发时,我们只使用托管内存.而实际上,C#为我们提供了三种类型的内存: 堆栈内存 - 最快速的内存,能够做到极 ...