| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> cookie setSecure详解 -> 正文阅读 |
|
[JavaScript知识库]cookie setSecure详解 |
1. 前言? ? ? ?最近项目用Sparrow Health System检测漏洞,发现存在一个setSecure安全漏洞问题,于是网上搜索了一下,这里记录一下。 2. 问题? ? ? 在cas中或其他web开发中,会碰到安全cookie的概念,因为CAS中TGT是存放在安全cookie中的。下面是安全cookie 的理解:
???? 在setSecure(true); 的情况下,只有https才传递到服务器端。http是不会传递的。 ? ??setSecure(true)意味着"指示浏览器仅通过 HTTPS 连接传回 cookie。这可以确保 cookie ID 是安全的,且仅用于使用 HTTPS 的网站。如果启用此功能,则 HTTP 上的会话 Cookie 将不再起作用。" ??? j2ee servlet的接口中也定义了Cookie对象,也有其方法setSecue(false); ?? 关于setSecure的问题,在http连接下:?
??? 原理:服务器端的Cookie对象是java中的对象,请不要和浏览器端的cookie文件混淆了。服务器端的Cookie对象是方便java程序员包装一个浏览器端的cookie文件。一旦包装好,就放到response对象中,在转换成http头文件。在传递到浏览器端。这时就会在浏览器的临时文件中创建一个cookie文件。? ??? 总结如下:cookie的secure值为true时,在http中是无效的;在https中才有效 3. Cookie设置? ? ? ? 实际上,Servlet提供的 如果我们想要设置一个Cookie,例如,记录用户选择的语言,可以编写一个
? ? ? ? 创建一个新Cookie时,除了指定名称和值以外,通常需要设置 ? ? ? ? 如果访问的是https网页,还需要调用 ? ? ? ? 因此,务必注意:浏览器在请求某个URL时,是否携带指定的Cookie,取决于Cookie是否满足以下所有要求:
我们可以在浏览器看到服务器发送的Cookie: ? ? ? ?如果我们要读取Cookie,例如,在
可见,读取Cookie主要依靠遍历 ? 4. setSecure测试下面我自己再实验一下: 4.1 http访问测试我自己的电脑用的Tomcat,首先,把cookie-secure的值设为false,创建一个session: 1 public void service(HttpServletRequest request, HttpServletResponse response) {
2 // 创建cookie
3 Cookie cookie = new Cookie("key", "value");
4 // 关键地方:cookie设为false
5 cookie.setSecure(false);
6 response.addCookie(cookie);
7 // 从request中取得cookie,并输出
8 Cookie[] cookies = request.getCookies();
9 for (Cookie c : cookies) {
10 System.out.println(c.getValue());
11 }
12 RequestDispatcher dispatcher = request
13 .getRequestDispatcher("index.jsp");
14 try {
15 dispatcher.forward(request, response);
16 } catch (ServletException e) {
17 e.printStackTrace();
18 } catch (IOException e) {
19 e.printStackTrace();
20 }
21 }
好,我们访问一下这个地址:http://localhost:8080/servlet/index.do 用Fiddler来看一下客户端发出的信息: 好,我们再访问一下前面的地址: ? ? ? ?这个时候我们可以看到客户端发出的cookie里面,有key=value,说明客户端把cookie发给了服务器端。 4.2 https访问测试? ? ? ?那如果我们在服务器端设置cookie.setSecure(true)呢? 先上代码: 1 public void service(HttpServletRequest request, HttpServletResponse response) {
2 // 创建cookie
3 Cookie cookie = new Cookie("key", "value");
4 // 关键地方:cookie设为false
5 cookie.setSecure(true);
6 response.addCookie(cookie);
7 // 从request中取得cookie,并输出
8 Cookie[] cookies = request.getCookies();
9 if (cookies != null) {
10 for (Cookie c : cookies) {
11 System.out.println(c.getValue());
12 }
13 }
14 RequestDispatcher dispatcher = request
15 .getRequestDispatcher("index.jsp");
16 try {
17 dispatcher.forward(request, response);
18 } catch (ServletException e) {
19 e.printStackTrace();
20 } catch (IOException e) {
21 e.printStackTrace();
22 }
23 }
第一次http访问: 这是request的信息。 服务器的返回信息如下: 我们可以看到服务器发给客户端的信息中有这么一行:Set-Cookie:key=value;?Secure 多了一个Secure。 第二次http访问: 我们发现key=value这个cookie已经没有了。 第三次https访问: 那我们用https协议头来试着访问一下看看: 我们看到key=value又发给了服务器端了。 5. 另外? ? ? cookie中的数据通常会包含用户的隐私数据,首先要保证数据的保密性,其次要保证数据不能被伪造或者篡改,基于这两点,我们通常需要对cookie内容进行加密,加密方式一般使用对称加密(单密钥,如DES)或非对称加密(一对密钥,如RSA),密钥需要保存在服务器端一个安全的地方,这样,别人不知道密钥时,无法对数据进行解密,也无法伪造或篡改数据。 ? ? ? ?另外,像上文提到的,重要的cookie数据需要设置成HttpOnly的,避免跨站脚本获取你的cookie,保证了cookie在浏览器端的安全性。 ? ? ? ?还有我们可以设置cookie只作用于安全的协议(https),JavaEE中可以通过Cookie类的setSecure(boolean flag)来设置,设置后,该cookie只会在https下发送,而不会再http下发送,保证了cookie在服务器端的安全性, 6. 例子
参考cookie setSecure详解_wangyunpeng0319的博客-CSDN博客_cookie.setsecure |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 5:08:07- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |