1.什么是HttpOnly?

如果您在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,具体一点的介绍请google进行搜索

2.javaEE的API是否支持?

目前sun公司还没有公布相关的API,但PHP、C#均有实现。搞javaEE的兄弟们比较郁闷了,别急下文有变通实现

3.HttpOnly的设置样例

javaEE

1
2
response.setHeader("Set-Cookie", "cookiename=value;
Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly");

具体参数的含义再次不做阐述,设置完毕后通过js脚本是读不到该cookie的,但使用如下方式可以读取

1
Cookie cookies[]=request.getCookies();

C#

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

VB.NET

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

但是在 .NET 1.1 ,中您需要手动添加

1
Response.Cookies[cookie].Path += ";HTTPOnly";

PHP4

1
header("Set-Cookie: hidden=value; httpOnly");

PHP5

1
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);

最后一个参数为HttpOnly属性

----------------------------------------------------------------------------------

webBrowser

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Runtime.InteropServices;
  6.  
  7. namespace WindowsFormsApplication1
  8. {
  9. /// <summary>
  10. /// WinInet.dll wrapper
  11. /// </summary>
  12. internal static class CookieReader
  13. {
  14.  
  15. private const int INTERNET_COOKIE_HTTPONLY = 0x00002000;
  16.  
  17. [DllImport("wininet.dll", SetLastError = true)]
  18. private static extern bool InternetGetCookieEx(
  19. string url,
  20. string cookieName,
  21. StringBuilder cookieData,
  22. ref int size,
  23. int flags,
  24. IntPtr pReserved);
  25. public static string GetCookie(string url)
  26. {
  27. int size = 512;
  28. StringBuilder sb = new StringBuilder(size);
  29. if (!InternetGetCookieEx(url, null, sb, ref size, INTERNET_COOKIE_HTTPONLY, IntPtr.Zero))
  30. {
  31. if (size < 0)
  32. {
  33. return null;
  34. }
  35. sb = new StringBuilder(size);
  36. if (!InternetGetCookieEx(url, null, sb, ref size, INTERNET_COOKIE_HTTPONLY, IntPtr.Zero))
  37. {
  38. return null;
  39. }
  40. }
  41. return sb.ToString();
  42. }
  43. }
  44. }

  

********************************************************************************************************************************************************

  1. using System;
  2. using System.ComponentModel;
  3. using System.Net;
  4. using System.Runtime.InteropServices;
  5. using System.Security;
  6. using System.Security.Permissions;
  7. using System.Text;
  8.  
  9. namespace CookieHandler
  10. {
  11.     internal sealed class INativeMethods
  12.     {
  13.         #region enums
  14.  
  15.         public enum ErrorFlags
  16.         {
  17.             ERROR_INSUFFICIENT_BUFFER = 122,
  18.             ERROR_INVALID_PARAMETER = 87,
  19.             ERROR_NO_MORE_ITEMS = 259
  20.         }
  21.  
  22.         public enum InternetFlags
  23.         {
  24.             INTERNET_COOKIE_HTTPONLY = 8192, //Requires IE 8 or higher     
  25.             INTERNET_COOKIE_THIRD_PARTY = 131072,
  26.             INTERNET_FLAG_RESTRICTED_ZONE = 16
  27.         }
  28.  
  29.         #endregion
  30.  
  31.         #region DLL Imports
  32.  
  33.         [SuppressUnmanagedCodeSecurity, SecurityCritical, DllImport("wininet.dll", EntryPoint = "InternetGetCookieExW", CharSet = CharSet.Unicode, SetLastError = true, ExactSpelling = true)]
  34.         internal static extern bool InternetGetCookieEx([In] string Url, [In] string cookieName, [Out] StringBuilder cookieData, [In, Out] ref uint pchCookieData, uint flags, IntPtr reserved);
  35.  
  36.         #endregion
  37.     }
  38. }

  

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Net;
  5. using System.Runtime.InteropServices;
  6. using System.Security;
  7. using System.Security.Permissions;
  8. using System.Text;
  9.  
  10. namespace CookieHandler
  11. {
  12.     /// <SUMMARY></SUMMARY>
  13.     /// 取得WebBrowser的完整Cookie。
  14.     /// 因为默认的webBrowser1.Document.Cookie取不到HttpOnly的Cookie
  15.     /// IE7不兼容,IE8可以,其它未知
  16.     ///
  17.     public class FullWebBrowserCookie
  18.     {
  19.         public static Dictionary<string, string> GetCookieList(Uri uri, bool throwIfNoCookie)
  20.         {
  21.             Dictionary<string, string> dict = new Dictionary<string, string>();
  22.             string cookie = GetCookieInternal(uri, throwIfNoCookie);
  23.             Console.WriteLine("FullWebBrowserCookie - 所有cookie:" + cookie);
  24.             string[] arrCookie = cookie.Split(';');
  25.             foreach (var item in arrCookie)
  26.             {
  27.                 string[] arr = item.Split('=');
  28.                 string key = arr[0].Trim();
  29.                 string val = "";
  30.                 if (arr.Length >= 2)
  31.                 {
  32.                     val = arr[1].Trim();
  33.                 }
  34.  
  35.                 if (!dict.ContainsKey(key))
  36.                 {
  37.                     dict.Add(key, val);
  38.                 }
  39.             }
  40.             Console.WriteLine("FullWebBrowserCookie - cookie已载入dict,共" + dict.Count.ToString() + "项");
  41.  
  42.             return dict;
  43.         }
  44.  
  45.         public static string GetCookieValue(string key, Uri uri, bool throwIfNoCookie)
  46.         {
  47.             Console.WriteLine("GetCookieValue");
  48.             Dictionary<string, string> dict = GetCookieList(uri, throwIfNoCookie);
  49.  
  50.             if (dict.ContainsKey(key))
  51.             {
  52.                 return dict[key];
  53.             }
  54.             return "";
  55.         }
  56.  
  57.         [SecurityCritical]
  58.         public static string GetCookieInternal(Uri uri, bool throwIfNoCookie)
  59.         {
  60.             Console.WriteLine("GetCookieInternal");
  61.  
  62.             uint pchCookieData = 0;
  63.             string url = UriToString(uri);
  64.             uint flag = (uint)INativeMethods.InternetFlags.INTERNET_COOKIE_HTTPONLY;
  65.  
  66.             //Gets the size of the string builder     
  67.             if (INativeMethods.InternetGetCookieEx(url, null, null, ref pchCookieData, flag, IntPtr.Zero))
  68.             {
  69.                 pchCookieData++;
  70.                 StringBuilder cookieData = new StringBuilder((int)pchCookieData);
  71.  
  72.                 //Read the cookie     
  73.                 if (INativeMethods.InternetGetCookieEx(url, null, cookieData, ref pchCookieData, flag, IntPtr.Zero))
  74.                 {
  75.                     DemandWebPermission(uri);
  76.                     return cookieData.ToString();
  77.                 }
  78.             }
  79.  
  80.             int lastErrorCode = Marshal.GetLastWin32Error();
  81.  
  82.             if (throwIfNoCookie || (lastErrorCode != (int)INativeMethods.ErrorFlags.ERROR_NO_MORE_ITEMS))
  83.             {
  84.                 throw new Win32Exception(lastErrorCode);
  85.             }
  86.  
  87.             return null;
  88.         }
  89.  
  90.         private static void DemandWebPermission(Uri uri)
  91.         {
  92.             string uriString = UriToString(uri);
  93.  
  94.             if (uri.IsFile)
  95.             {
  96.                 string localPath = uri.LocalPath;
  97.                 new FileIOPermission(FileIOPermissionAccess.Read, localPath).Demand();
  98.             }
  99.             else
  100.             {
  101.                 new WebPermission(NetworkAccess.Connect, uriString).Demand();
  102.             }
  103.         }
  104.  
  105.         private static string UriToString(Uri uri)
  106.         {
  107.             if (uri == null)
  108.             {
  109.                 throw new ArgumentNullException("uri");
  110.             }
  111.  
  112.             UriComponents components = (uri.IsAbsoluteUri ? UriComponents.AbsoluteUri : UriComponents.SerializationInfoString);
  113.             return new StringBuilder(uri.GetComponents(components, UriFormat.SafeUnescaped), 2083).ToString();
  114.         }
  115.     }
  116. }

  

Cookie中的HttpOnly的更多相关文章

  1. django-会话 cookie 中缺少HttpOnly 属性-安全加强

    如果django程序扫描到会话 cookie 中缺少 HttpOnly 属性问题,需要如何进行安全加强? https://docs.djangoproject.com/en/2.2/ref/setti ...

  2. 会话cookie中缺少HttpOnly属性 解决

    会话cookie中缺少HttpOnly属性 解决   只需要写一个过滤器即可 1 package com.neusoft.streamone.framework.security.filter; 2 ...

  3. Cookie中的HttpOnly详解

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt377 1.什么是HttpOnly? 如果您在cookie中设置了HttpOn ...

  4. Cookie中的httponly的属性和作用

    1.什么是HttpOnly? 如果cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,窃取cookie内容,这样就增加了cookie的安 ...

  5. Cookie中设置了 HttpOnly,Secure 属性,有效的防止XSS攻击,X-Frame-Options 响应头避免点击劫持

    属性介绍: 1) secure属性当设置为true时,表示创建的 Cookie 会被以安全的形式向服务器传输(ssl),即 只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证, 如果是 HT ...

  6. Cookie中存放数据l加密解密的算法

    public class CookieUtil { /** * * @param response HttpServletResponse类型的响应 * @param cookie 要设置httpOn ...

  7. Appscan漏洞 之 加密会话(SSL)Cookie 中缺少 Secure 属性

    近期 Appscan扫描出漏洞 加密会话(SSL)Cookie 中缺少 Secure 属性,已做修复,现进行总结如下: 1.1.攻击原理 任何以明文形式发送到服务器的 cookie.会话令牌或用户凭证 ...

  8. .NET跨平台之旅:ASP.NET Core从传统ASP.NET的Cookie中读取用户登录信息

    在解决了asp.net core中访问memcached缓存的问题后,我们开始大踏步地向.net core进军——将更多站点向asp.net core迁移,在迁移涉及获取用户登录信息的站点时,我们遇到 ...

  9. js获取cookie中存储的值

    最近看了试卷题目发现自己会的十分的匮乏, 第一题就把自己难住了,知道有这个东西,但是实际上没有操作过. ========================================= cookie ...

随机推荐

  1. hdoj - 1864 最大报销额

    Problem Description 现有一笔经费可以报销一定额度的发票.允许报销的发票类型包括买图书(A类).文具(B类).差旅(C类),要求每张发票的总额不得超过1000元,每张发票上,单项物品 ...

  2. Python面向对象编程核心思想

    原文地址https://blog.csdn.net/weixin_42134789/article/details/80194788 https://blog.csdn.net/happyjxt/ar ...

  3. SQLServer replace函数

    declare @name char(1000) --注意:char(10)为10位,要是位数小了会让数据出错 set @name='ssssfcfgghdghdfcccs' select repla ...

  4. Java基础 变量名的开头可以使用$

        JDK :OpenJDK-11      OS :CentOS 7.6.1810      IDE :Eclipse 2019‑03 typesetting :Markdown   code ...

  5. [转]c++多线程编程之pthread线程深入理解

    多线程编程之pthread线程深入理解         Pthread是 POSIX threads 的简称,是POSIX的线程标准.           前几篇博客已经能给你初步的多线程概念.在进一 ...

  6. ISO/IEC 9899:2011 附录C——顺序点

    附录C——顺序点 1.以下是在5.1.2.3中所描述的顺序点(sequence point): ——在一个函数调用中的函数指示符(function designator)和实际参数的计算,与实际调用之 ...

  7. python2中的unicode()函数在python3中会报错:

    python2中的unicode()函数在python3中会报错:NameError: name 'unicode' is not defined There is no such name in P ...

  8. Eclipse新项目检出后报错第一步:导入lib中的jar包【我】

    新检出项目报错,第一步,先看项目 web-info下的 lib目录里的包是不是都添加到项目构建中了,可以全选先添加到项目构建中,看项目是否还在报错.

  9. 【Linux】数据流重定向

    数据流重定向(redirect)就是将某个命令执行后应该要出现在屏幕上的数据,给它传输到其他的地方,例如文件或设备(打印机之类的).这玩意在Linux的命令行模式下很重要,尤其是想要将某些数据存储下来 ...

  10. ThinkPHP5最新URL访问:PATH_INFO和兼容模式

    https://www.jianshu.com/p/c43fb5817ae1 http://tp5.com/index.php?s=USER/manger_user/add&n=2000&am ...