HttpOnly是微软公司的Internet Explorer 6 SP1引入的一项新特性。这个特性为cookie提供了一个新属性,用以阻止客户端脚本访问Cookie,至今已经称为一个标准,几乎所有的浏览器都会支持HttpOnly。
下面示例显示了HTTP响应标头中HttpOnly使用的语法:

Set-Cookie: <name>=<value>[; <Max-Age>=<age>]
`[; expires=<date>][; domain=<domain_name>]
[; path=<some_path>][; secure][; HttpOnly]

如果HTTP响应标头包含HttpOnly,则无法通过客户端脚本访问Cookie;因此,即使系统存在跨站脚本攻击,并且用户不小心访问了利用此缺陷的链接,浏览器也不会将Cookie泄露给第三方。
如果支持HttpOnly的浏览器检测到包含HttpOnly标志的Cookie,并且客户端脚本代码尝试读取Cookie,则浏览器将返回一个空字符串作为结果,以阻止XSS代码将数据发送到攻击者的网站,从而导致攻击失败。

使用 Java 设置 HttpOnly:
从采用 Java Servlet 3.0 技术的 Java Enterprise Edition 6 (JEE6) 开始,就可以在 cookie 上以编程方式设置 HttpOnly 标志。JEE6、JEE7 都可以通过isHttpOnly方法设置HttpOnly :

cookie.setHttpOnly(true);

此外,从 JEE 6 开始,HttpOnly 通过以下配置,去设置HttpOnly:

<session-config><cookie-config><http-only>true</http-only></cookie-config>
</session-config>

对于JEE 6之前的Java Enterprise Edition 版本,常见的解决方法是:SET-COOKIE,使用会话cookie值覆盖HTTP响应标头,该值显式附加HttpOnly标志:

String sessionid = request.getSession().getId();
// be careful overwriting: JSESSIONID may have been set with other flags
response.setHeader("SET-COOKIE", "JSESSIONID=" + sessionid + "; HttpOnly");

在这种情况下,尽管对HttpOnly 标志合适,但不鼓励覆盖,因为 JSESSIONID 可能已设置为其他标志。更好的解决方法是处理先前设置的标志或使用ESAPI#Java_EE库,我们可以编写一个 servlet 过滤器,如下所示:SecurityWrapperResponse

public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest httpServletRequest = (HttpServletRequest) request;HttpServletResponse httpServletResponse = (HttpServletResponse) response;// if errors exist then create a sanitized cookie header and continueSecurityWrapperResponse securityWrapperResponse = new SecurityWrapperResponse(httpServletResponse, "sanitize");Cookie[] cookies = httpServletRequest.getCookies();if (cookies != null) {for (int i = 0; i < cookies.length; i++) {Cookie cookie = cookies[i];if (cookie != null) {// ESAPI.securityConfiguration().getHttpSessionIdName() returns JSESSIONID by default configurationif (ESAPI.securityConfiguration().getHttpSessionIdName().equals(cookie.getName())) {securityWrapperResponse.addCookie(cookie);}}}}filterChain.doFilter(request, response);
}

一些实现JEE5的Web应用程序服务器和实现Java Servlet 2.5(JEE 5 的一部分)的servlet 容器也允许创建HttpOnly会话cookie:
Tomcat 6在context.xml设置的Context属性useHttpOnly 如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/myWebApplicationPath" useHttpOnly="true">
JBoss 5.0.1和JBOSS EAP 5.0.1在 server <myJBossServerInstance> \deploy\jbossweb.sar\context.xml 设置SessionCookie标签 5如下:
<Context cookies="true" crossContext="true"><SessionCookie secure="true" httpOnly="true" />

IBM Websphere为会话 cookie 提供 HTTPOnly 作为配置选项,使用 .NET 设置 HttpOnly,在 .NET 2.0 中,还可以通过 HttpCookie 对象为所有自定义应用程序 cookie 设置 HttpOnly。

<httpCookies httpOnlyCookies="true" …>

或以编程方式
C# 代码:

HttpCookie myCookie = new HttpCookie("myCookie");
myCookie.HttpOnly = true;
Response.AppendCookie(myCookie);

VB.NET 代码:

Dim myCookie As HttpCookie = new HttpCookie("myCookie")
myCookie.HttpOnly = True
Response.AppendCookie(myCookie)

但是,在.NET 1.1 中,必须手动执行此操作:

Response.Cookies[cookie].Path += ";HttpOnly";

使用 Python 设置 HttpOnly:
要在 Cherrypy 会话中使用 HTTP-Only cookie,只需在配置文件中添加以下行:

 tools.sessions.httponly = True 如果使用 SLL,还可以避免中间人攻击:tools.sessions.secure = True

使用 PHP 设置 HttpOnly:
PHP 从 5.2.0 开始支持设置 HttpOnly 标志,对于由 PHP 管理的会话 cookie,通过在php.ini中设置HttpOnly:

session.cookie_httponly = True

或通过函数:

void session_set_cookie_params  ( int $lifetime  [, string $path  [, string $domain[, bool $secure= false  [, bool $httponly= false  ]]]] )

对于应用程序 cookie, setcookie() 中的最后一个参数设置 HttpOnly :

bool setcookie  ( string $name  [, string $value  [, int $expire= 0  [, string $path[, string $domain  [, bool $secure= false  [, bool $httponly= false  ]]]]]] )

Web 应用程序防火墙:
如果代码更改不可行,可以使用 Web 应用程序防火墙将 HttpOnly 添加到会话 cookie:

Mod_security - 使用 SecRule 和 Header
ESAPI WAF 9 使用add-http-only-flag

web渗透测试----33、HttpOnly相关推荐

  1. web渗透测试实战-SQLMAP

    一.实验项目名称 web渗透测试实战-SQLMAP 二.实验目的及要求 熟悉SQL注入漏洞原理 熟悉SQLMAP工具使用. 1.获取数据库信息:数据库漏洞.数据库名.数据库版本等 python sql ...

  2. Kali Linux Web 渗透测试— 第十二课-websploit

    Kali Linux Web 渗透测试- 第十二课-websploit 文/玄魂 目录 Kali Linux Web 渗透测试- 第十二课-websploit..................... ...

  3. 轻量级Web渗透测试工具jSQL

    轻量级Web渗透测试工具jSQL jSQL是Kali集成的一款轻量级的Web渗透测试工具.最初该工具主要实施SQL注入,后来增加更多的功能,扩展形成一个综合性的Web渗透测试工具.Kali提供的版本较 ...

  4. kali linux 2.0 web 渗透测试 电子书

    原创 2017-05-31 玄魂工作室 玄魂工作室 打起精神,重新开启订阅号的原创文章写作工作,但是需要点时间,请耐心等待. 求资料的同学,没有及时回复的,请再次留言,我会尽快处理.今天分享两本电子书 ...

  5. Kali Linux Web 渗透测试视频教程—第十一课-扫描、sql注入、上传绕过

    Kali Linux Web 渗透测试视频教程-第十一课-扫描.sql注入.上传绕过 文/玄魂 原文链接:http://www.xuanhun521.com/Blog/2014/10/25/kali- ...

  6. Web渗透测试常规套路

    注:文章首发自合天智汇微信公众平台 0x01:本篇文章旨在给小白白们做一次有关web渗透的科普,其中涉及到的套路.工具可能在如今XX狗.XX盾当道的社会已不再适用,但是其中涉及的思想永远不会过时,其中 ...

  7. 软件测试:web渗透测试怎样入门!讲透了...

    一.简介 1.web渗透测试概述 渗透测试:模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法. web渗透测试:只针对web应用的渗透测试 2.常见web安全漏洞 1.输入输出验证不充分 ...

  8. 什么是Web渗透测试

    什么是Web渗透测试 渗透测试( Penetration Test)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节.渗透测试能够直观的让管理人员知道 ...

  9. kali Linux Web 渗透测试视频教程— 第六课 网络扫描-nmap与zmap

    Kali Linux Web 渗透测试视频教程- 第六课 网络扫描-nmap与zmap 文/玄魂 目录 Kali Linux Web 渗透测试视频教程- 第六课 网络扫描-nmap与zmap. 1 N ...

最新文章

  1. eclipse中更改配置使得switch语句不出错
  2. MySQl Got a packet bigger than ' max_allowed_packet' bytes
  3. maven-compiler-plugin 插件详解
  4. Python GUI界面编程初步 01 - GUI库的特点和选择
  5. ajax error的用法,JQuery ajaxError()用法及代码示例
  6. CAN笔记(10) 错误种类和输出
  7. OpenCV检验物体尺寸
  8. 【Zookeeper】源码分析之请求处理链(四)之FinalRequestProcessor
  9. Javascript中this、prototype、constructor的理解
  10. Windows下ab压力测试工具的模拟表单提交使用
  11. java调用海康人脸识别机5603的sdk的使用总结(三)
  12. Flask--网页微信登陆示例
  13. 【CTF整理】电子取证之Easy_dump(18护网杯)
  14. 目录遍历(Directory traversal)
  15. EgretInspector谷歌浏览器扩展
  16. 合同和协议的区别_合同和协议有什么区别?
  17. 【SpringCloud】ZuulFilter过滤器
  18. 微信公众号关键词自动回复文件设置教程
  19. Linux拷贝命令cp的用法
  20. 插件推荐:json解析—Gson以及GsonFormat插件的运用

热门文章

  1. 西绪福斯黑洞(123数字黑洞)——java实现
  2. 启用计算机时出现了,Win7由于启动计算机时出现了页面文件配置问题怎么解决...
  3. 模拟亚马逊、淘宝等浏览记录(历史记录)功能(访问集合存储的数据)
  4. 适合自己的书只能靠自己找
  5. 爱贝妈妈:孕期服务APP开发案例分析
  6. Ctsc2012 Cheat
  7. matlab mnist 代码,MNIST手写字 Matlab程序,包含BP和CNN程序
  8. 有奖活动丨这是一个不一样的感恩节
  9. Arduino UNO驱动micro SD卡读写模块
  10. 「即得宝」正式上线:专属珠宝首饰行业的3D协同、渲染云平台