cookie使用说明和安全性问题

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: cookie使用说明和安全性问题

1.测试代码

创建两个Severlet使用cookie就行存储数据

MyServlet1:

public class MyServlet1 extends HttpServlet {
  @Override
  protected void service(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    //设置请求编码格式
    req.setCharacterEncoding("utf-8");
    //设置响应编码格式
    resp.setContentType("text/html;charset=utf-8");
    //获取请求信息
    String a=req.getParameter("a");
    String b=req.getParameter("b");
    //处理请求信息
    System.out.println(a+":"+b);
    //响应处理结果
      //创建Cookie数据
        Cookie c=new Cookie("b", b);
      //响应Cookie数据
        resp.addCookie(c);
      //直接响应
      resp.getWriter().write("我是MyServlet1,处理完毕");
      //请求转发
      //重定向
  }
}

MyServlet2:

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyServlet2 extends HttpServlet {
  @Override
  protected void service(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    //设置请求编码格式
    req.setCharacterEncoding("utf-8");
    //设置响应编码格式
    resp.setContentType("text/html;charset=utf-8");
    //获取请求信息
      //String b=req.getParameter("b");
      String bc=null; 
      //获取Cookie数据
      Cookie[] cookies = req.getCookies();
      for(Cookie ck:cookies){
        if("b".equals(ck.getName())){
          bc=ck.getValue();
        }
      }
      String c=req.getParameter("c");
    //处理请求信息
    System.out.println(bc+":"+c);
    //响应处理结果
      //直接响应
      resp.getWriter().write("我是MyServlet2,处理完毕");
      //请求转发
      //重定向
  }
}

2.可以看出b是共享数据,我们用先测试1

相应头中接收到数据

之后对MySeverlet2进行只对c数据赋值

3.控制台得到数据

cookie安全性问题

什么是cookie

指某些网站为了辨别用户身份、进行session跟踪而存储在用户本地终端上的数据(通常经过加密)。(注:此定义来自百度百科)

cookie对于登录的效果

排除用户手动删除浏览器cookie以及cookie未过期的情况下,用户如果在某网站登录过一次,下次访问这个网站,用户不需要输入用户名和密码就可以进入网站。

cookie的生命周期

创建cookie的时候,会给cookie指定一个值:Expire,它就是指定cookie的有效期,也就是cookie的生命周期,超出设置的这个生命周期,cookie就会被清除。如果给这个值Expire设置为0或者负值,那么这样的设置就是在关闭浏览器时,就会清除cookie,这种方式更加安全。

为什么cookie不安全

最大的原因是因为它存储在浏览器端(用户本地),一些别有用心的人能够通过浏览器截获cookie(脚本、利用工具抓取等)。

cookie不安全的表现形式

cookie欺骗

但这时就会去考虑了,既然如此,为何不加密呢?加密后就算拿到cookie不是也没有用么?关键问题就在这里了,一些别有用心的人不需要知道这个cookie的具体含义,只需要将这个cookie向服务器提交(模拟身份验证),身份验证通过之后,就可以冒充被窃取cookie对应用户来访问网站,甚至获取到用户的隐私信息,对于用户的隐私造成非常严重的危害,这种方式就叫做cookie欺骗。

cookie截获

cookie以纯文本的形式在浏览器和服务器之间传递,在web通信时极容易被非法用户截获和利用。非法用户截获cookie后,在cookie的有效时间内重新发放给服务器,那么这个非法用户就拥有了这个合法用户的所有权限。

Flash的内部代码隐患

Flash中有一个getURL()函数,Flash利用它自动打开指定的页面。那么这个就意味着,你在观看Flash动画时,在Flash的内部可以悄无声息的打开一个极小的不易发现的包含特殊操作的页面,可以是木马,可以向远端输入当前cookie或者用户信息,这是非常危险的,由于这个是Flash内部的操作,所以网站无法禁止,要想避免,尽量打开本地防火墙以及访问正规网站。

如何解决cookie安全性问题

第一步:设置cookie有效期不要过长,合适即可

第二步:设置HttpOnly属性为true

可以防止js脚本读取cookie信息,有效的防止XSS攻击。

第三步:设置复杂的cookie,加密cookie

(1)cookie的key使用uuid,随机生成; (2)cookie的value可以使用复杂组合,比如:用户名+当前时间+cookie有效时间+随机数。 这样可以尽可能使得加密后的cookie更难解密,也是保护了cookie中的信息。

第四步:用户第一次登录时,保存ip+cookie加密后的token

每次请求,都去将当前cookie和ip组合起来加密后的token与保存的token作对比,只有完全对应才能验证成功。

第五步:session和cookie同时使用

sessionId虽然放在cookie中,但是相对的session更安全,可以将相对重要的信息存入session。


第六步:如果网站支持https,尽可能使用https

如果网站支持https,那么可以为cookie设置Secure属性为true,它的意思是,cookie只能使用https协议发送给服务器,而https比http更加安全。

目录
相关文章
|
数据安全/隐私保护 安全 搜索推荐
了解cookie和cookie的安全性
一、什么是cookie? 打开你的Documents and Settings文件夹,进去以后,随便打开一个用户来看看,是不是有一个文件夹叫“Cookies”,里面装着一堆.txt文件?那么,这个Cookies到底是个什么东东呢? Cookie的英文原意是“甜饼”,但这里所讲的“Cookie”可不是糕点哦,它只是一个保存在客户机中的简单的文本文件,这个文件与特定的Web文档关联在一起,保存了该客户机访问这个Web文档时的信息,当客户机再次访问这个Web文档时这些信息可供该文档使用。
932 0
|
Web App开发 安全 算法
|
存储 网络安全 Go
在 Go 语言中增强 Cookie 的安全性
本文讲的是在 Go 语言中增强 Cookie 的安全性,在我开始学习 Go 语言时已经有一些 Web 开发经验了,但是并没有直接操作 Cookie 的经验。我之前做过 Rails 开发,当我不得不需要在 Rails 中读写 Cookie 时,并不需要自己去实现各种安全措施。
1251 0
|
PHP JavaScript 内存技术
|
11天前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
35 4
|
14天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
1月前
|
缓存 Java Spring
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
文章比较了在Servlet和Spring Boot中获取Cookie、Session和Header的方法,并提供了相应的代码实例,展示了两种方式在实际应用中的异同。
149 3
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
|
26天前
|
存储 安全 数据安全/隐私保护
Cookie 和 Session 的区别及使用 Session 进行身份验证的方法
【10月更文挑战第12天】总之,Cookie 和 Session 各有特点,在不同的场景中发挥着不同的作用。使用 Session 进行身份验证是常见的做法,通过合理的设计和管理,可以确保用户身份的安全和可靠验证。
19 1
|
2月前
|
存储 缓存 数据处理
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
本文介绍了PHP会话控制及Web常用的预定义变量,包括`$_REQUEST`、`$_SERVER`、`$_COOKIE`和`$_SESSION`的用法和示例。涵盖了cookie的创建、使用、删除以及session的工作原理和使用,并通过图书上传的例子演示了session在实际应用中的使用。
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
|
2月前
|
存储 前端开发 Java
JavaWeb基础7——会话技术Cookie&Session
会话技术、Cookie的发送和获取、存活时间、Session钝化与活化、销毁、用户登录注册“记住我”和“验证码”案例
JavaWeb基础7——会话技术Cookie&Session