相关文章推荐
玉树临风的汤圆  ·  防止 ASP.NET ...·  1 月前    · 
不羁的山羊  ·  java解析任意层的json数据(递归解析) ...·  1 年前    · 
朝气蓬勃的油条  ·  FormData如何向后端传递数组 - 简书·  2 年前    · 
风度翩翩的柿子  ·  Apex REST Callouts ...·  2 年前    · 
爽快的伤痕  ·  Running CUDA kernel ...·  2 年前    · 
留胡子的水煮鱼  ·  视频中的硬字幕、软字幕和外挂字幕,怎么分别? ...·  2 年前    · 
Code  ›  安全开发:Spring Boot 打开 HttpOnly 和 Secure 属性_springboot httponly_邢永志的博客
spring框架 curl localhost cookie
https://blog.csdn.net/sinat_34524528/article/details/117678563
慷慨的松球
2 年前
    • 〇、导语
    • 一、什么是 Cookie 的 `HttpOnly`、 `Secure` 属性,为什么要设置
    • 二、实践
      • 2.1 HttpOnly 设置方法
      • 2.2 Secure 设置方法
    • 三、总结
    • 四、参考

    应用上线,需要为 Cookie 设置 HttpOnly 和 Secure 属性以修复安全问题。

    一、什么是 Cookie 的 HttpOnly 、 Secure 属性,为什么要设置

    根据 Microsoft Developer Network , HttpOnly 是包含在 Set-Cookie HTTP 响应标头中的附加标志。可以防范 XSS攻击 1

    Secure 属性是应用程序服务器在 HTTP 响应中向用户发送新 cookie 时可以设置的一个选项。安全属性的目的是防止 cookie 因明文传输 cookie 而被未授权方观察到。 2

    2.1 HttpOnly 设置方法

    配置 默认值 说明
    server.servlet.session.cookie.http-only true 是否对会话 cookie 使用 "HttpOnly"cookie。
    server.session.cookie.secure false 是否总是将会话 cookie 标记为安全。
    D:\learn\learn-java\spring-boot-high-concurrency>curl http://localhost:8080/stuff -v
    *   Trying ::1...
    * TCP_NODELAY set
    * Connected to localhost (::1) port 8080 (#0)
    > GET /stuff HTTP/1.1
    > Host: localhost:8080
    > User-Agent: curl/7.55.1
    > Accept: */*
    < HTTP/1.1 200
    < Set-Cookie: JSESSIONID=5F5E7204DB4806E498DBCEE16EE505BB; Path=/; HttpOnly
    < Content-Type: application/json
    < Transfer-Encoding: chunked
    < Date: Mon, 07 Jun 2021 17:10:22 GMT
    {"a":0}* Connection #0 to host localhost left intact
    
    • server.servlet.session.cookie.http-only=false
    D:\learn\learn-java\spring-boot-high-concurrency>curl http://localhost:8080/stuff -v
    *   Trying ::1...
    * TCP_NODELAY set
    * Connected to localhost (::1) port 8080 (#0)
    > GET /stuff HTTP/1.1
    > Host: localhost:8080
    > User-Agent: curl/7.55.1
    > Accept: */*
    < HTTP/1.1 200
    < Set-Cookie: JSESSIONID=9C4848DB7F3ED02FE5D1B67D823A1338; Path=/
    < Content-Type: application/json
    < Transfer-Encoding: chunked
    < Date: Mon, 07 Jun 2021 17:12:59 GMT
    {"a":0}* Connection #0 to host localhost left intact
    
    • server.servlet.session.cookie.http-only=true
    D:\learn\learn-java\spring-boot-high-concurrency>curl http://localhost:8080/stuff -v
    *   Trying ::1...
    * TCP_NODELAY set
    * Connected to localhost (::1) port 8080 (#0)
    > GET /stuff HTTP/1.1
    > Host: localhost:8080
    > User-Agent: curl/7.55.1
    > Accept: */*
    < HTTP/1.1 200
    < Set-Cookie: JSESSIONID=55167E90255588C69C8C8F790D0EB2AA; Path=/; HttpOnly
    < Content-Type: application/json
    < Transfer-Encoding: chunked
    < Date: Mon, 07 Jun 2021 17:13:31 GMT
    {"a":0}* Connection #0 to host localhost left intact
    

    2.2 Secure 设置方法

    配置默认值说明
    server.session.cookie.securefalse是否总是将会话 cookie 标记为安全。

    设置 Secure

    In application.properties set the following property:
    server.servlet.session.cookie.secure=true
    … or in older versions (before ~2018):
    server.session.cookie.secure=true

    D:\learn\learn-java\spring-boot-high-concurrency>curl http://localhost:8080/stuff -v
    *   Trying ::1...
    * TCP_NODELAY set
    * Connected to localhost (::1) port 8080 (#0)
    > GET /stuff HTTP/1.1
    > Host: localhost:8080
    > User-Agent: curl/7.55.1
    > Accept: */*
    < HTTP/1.1 200
    < Set-Cookie: JSESSIONID=4D2F08B1E76EC8A49C766343BCCB5287; Path=/; HttpOnly
    < Content-Type: application/json
    < Transfer-Encoding: chunked
    < Date: Mon, 07 Jun 2021 17:25:04 GMT
    {"a":0}* Connection #0 to host localhost left intact
    
    • server.servlet.session.cookie.secure=true
    D:\learn\learn-java\spring-boot-high-concurrency>curl http://localhost:8080/stuff -v
    *   Trying ::1...
    * TCP_NODELAY set
    * Connected to localhost (::1) port 8080 (#0)
    > GET /stuff HTTP/1.1
    > Host: localhost:8080
    > User-Agent: curl/7.55.1
    > Accept: */*
    < HTTP/1.1 200
    < Set-Cookie: JSESSIONID=FA9734CC373FFEF7E56AB679D70CAF82; Path=/; Secure; HttpOnly
    < Content-Type: application/json
    < Transfer-Encoding: chunked
    < Date: Mon, 07 Jun 2021 17:25:18 GMT
    {"a":0}* Connection #0 to host localhost left intact
    
    • server.servlet.session.cookie.secure=false
    D:\learn\learn-java\spring-boot-high-concurrency>curl http://localhost:8080/stuff -v
    *   Trying ::1...
    * TCP_NODELAY set
    * Connected to localhost (::1) port 8080 (#0)
    > GET /stuff HTTP/1.1
    > Host: localhost:8080
    > User-Agent: curl/7.55.1
    > Accept: */*
    < HTTP/1.1 200
    < Set-Cookie: JSESSIONID=BCE553C92FAA26406DB27DF5AB352645; Path=/; HttpOnly
    < Content-Type: application/json
    < Transfer-Encoding: chunked
    < Date: Mon, 07 Jun 2021 17:25:43 GMT
    {"a":0}* Connection #0 to host localhost left intact
    
    配置默认值说明3
    server.servlet.session.cookie.http-onlytrue是否对会话 cookie 使用 "HttpOnly"cookie。
    server.session.cookie.securefalse是否总是将会话 cookie 标记为安全。
    1. OWASP HttpOnly
      https://owasp.org/www-community/HttpOnly
      OWASP HTTPOnly Flag Set
      https://owasp.org/www-community/HttpOnly
      OWASP Secure Flag set
      https://owasp.org/www-community/controls/SecureCookieAttribute
      how to set cookies as secure flag in spring boot
      https://stackoverflow.com/questions/47989617/how-to-set-cookies-as-secure-flag-in-spring-boot ↩︎

    2. OWASP Secure Cookie Attribute
      https://owasp.org/www-community/controls/SecureCookieAttribute
      MDN: HTTP 响应头 Set-Cookie 属性
      https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Set-Cookie ↩︎

    3. Sping Boot 配置属性 Server properties
      https://prop.springboot.io/#/11.Server ↩︎

    应用上线,需要修复安全问题,需要为 Cookie 设置 “HttpOnly” 和 “Secure” 属性。HttpOnly 设置方法配置默认值说明server.servlet.session.cookie.http-onlytrue是否对会话 cookie 使用 "HttpOnly"cookie。默认D:\learn\learn-java\spring-boot-high-concurrency&gt;curl http://localhost:8080/stuff
    一、属性说明: 1 secure属性 当设置为true时,表示创建的 Cookie 会被以安全的形式向服务器传输,也就是只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该信息,所以不会被窃取到Cookie 的具体内容。 2 HttpOnly属性 如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。 对于以上两个属性, 首先,secure属性是防止信息在传递的过程中被监听捕获后信息泄漏,HttpOnly属性的目的是防止程序获取cookie后进行攻击。 其次,GlassFish2.x支持的是servlet2.5,而servlet2.5不支持Session Cookie的"HttpOnly"属性。不过使用Filter做一定的处理可以简单的实现HttpOnly属性。GlashFish3.0(支持servlet3.0)默认开启Session Cookie的HttpOnly属性。 也就是说两个属性,并不能解决cookie在本机出现的信息泄漏的问题(FireFox的插件FireBug能直接看到cookie的相关信息)。 项目架构环境:jsp+servlet+applet
    环境:操作系统window10,gradle 版本:gradle-6.8.3,IDE:IntelliJ IDEA 2019.3.4 x64,springboot版本2.5.5 在实际运用开发中,我们有时候只需要使用spingboot的配置化以及注解特性,并不需要它的http网络。可以在springboot核心配置中去除该功能,springboot支持两种核心配置文件类型,.yml和 .properties,这两种文件只是书写格式不同而已,没有孰优孰劣,按照个人喜好自己定义就是。...
    HTTP Cookie(也称为web Cookie、浏览器Cookie)是服务器存储在用户浏览器中的一小块信息。服务器在返回浏览器请求的响应时设置cookies。浏览器存储cookies,并将它们与下一个请求一起发送回同一服务器。Cookie通常用于会话管理、用户跟踪和存储用户首选。Cookies帮助服务器跨多个请求记住客户机。如果没有cookies,服务器将把每个请求都当作一个新的客户机来处理。 1 Reading HTTP Cookie Spring框架提供@CookieValue注释来获取任何http
    可以在application.properties文件内部application.yml,文件内部或命令行开关中指定各种属性。本附录提供了常用Spring Boot属性的列表以及对使用它们的基础类的引用。 属性贡献可以来自类路径上的其他jar文件,因此您不应将此视为详尽的列表。此外,您可以定义自己的属性。 此示例文件仅供参考。千万不能复制和粘贴的全部内容到应用程序中。相反,...
    Spring Boot - Cookies | Xing's Bloghttps://xinghua24.github.io/SpringBoot/Spring-Boot-Cookies/ 让我们学习如何在 Spring Boot 应用程序中使用 cookie。 什么是 HTTP Cookie HTTPcookie(Web cookie,浏览器 cookie)是服务器发送到用户 Web 浏览器的一小段数据。浏览器可以存储它并将其与以后的请求一起发送回同一服务器。通常,它用于判断两个请求是否来自同.
 
推荐文章
玉树临风的汤圆  ·  防止 ASP.NET 核心中的跨網站偽造要求 (XSRF/CSRF) 攻擊 | Microsoft Learn
1 月前
不羁的山羊  ·  java解析任意层的json数据(递归解析) 原
1 年前
朝气蓬勃的油条  ·  FormData如何向后端传递数组 - 简书
2 年前
风度翩翩的柿子  ·  Apex REST Callouts Unit | Salesforce Trailhead
2 年前
爽快的伤痕  ·  Running CUDA kernel on distributed memory with MPI - Stack Overflow
2 年前
留胡子的水煮鱼  ·  视频中的硬字幕、软字幕和外挂字幕,怎么分别? - 知乎
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号