Cookies的特征

  • 前端数据的存储
  • 后端通过http头设置
  • 请求时通过http头传给后端
  • 前端可读写
  • 遵守同源策略

    if(results.length){let user = result[0];//登录成功,设置cookiectx.cookies.set('userId'. user.id, {httpOnly: false,sameSite: 'strict'})}

Cookie不能覆盖 相当于追加

Cookies的特征

  • 域名
  • 有效期
  • 路径
  • http-only
  • secure

用ID+签名:

var crypt = {};
const KEY = 'FSDKLJ@#$24SFD';crypt.cryptUserId = function(userId) {var crypto = require('crypto');var sign = crypto.createHmac('sha256', KEY);sign.update(userId + ' ');return sign.digest('hex')'
}
modules.exports = crypt;
ctx.cookies.set('userId', crypt.cryptUserId(userId), {httpOnly: false,sameSite: 'strict'
)

签名不可逆
通过生成签名再通过计算ID和签名结合产生的正确的签名进行对比 看看是否是本人。

var userId = ctx.cookies.get('userId');
var sign = ctx.cookies.get('sign');
var correctSign = crypt.cryptUserId(userId);
if(correctSign !== sign) {throw new Error('报告, 有人入侵');
}

SessionId

随机的字符串,相当于一把钥匙,登录派发一个id

var session = {};
var cache = {};
session.set = function (userId, obj) {var sessionId = Math.random();if(!cache[sessionId]) {cache[sessionId] = {};}cache[sessionId].content = obj;return sessionId;
}session.get = function(userId) {return cache[uid] && cache[sessionId].content;
}module.exports = session;
const session = require('../tools/session');var sessionId = session.set(user.id, {userId: user.id
})ctx.cookies.set('sessionId', sessionId, {httpOnly: true,sameSite: 'strict'
})
var sessionId = ctx.cookies.get('sessionId');
var sessionObj = session.get(sessionId);
if(!sessionObj||!session.userId) {throw new Error('session不存在');
}
var userId = sessionObj.userId;

Cookies和Xss的关系

  • xss可能偷取Cookies(document.cookie可能被偷取)
  • http-only的Cookie不会被偷

Cookies和CSRF的关系

  • CSRF利用了用户Cookies
  • 攻击站点无法读写Cookies
  • 最好能阻止第三方使用Cookies
var crypto = require('crypto');var KEY = 'sfdjkljl23423%@#$@#';
var cipher = crypto.createCipher('des', KEY);
var text = cipher.update('hello word', 'utf-8', 'hex');
text += cipher.final('hex');console.log('text');var decipher = crypto.createDecipher('des', KEY);
var originalText = decipher.update(text, 'hex', 'utf-8');
orginalText += decipher.final('utf-8');console.log(originalText);

Cookies-安全策略

  • 签名防篡改
  • 私有变换(加密)
  • http-only(防止xss)
  • secure(只有https才行secure)
  • same-site

Cookies的作用

  • 存储个性化设置
  • 存储未登录时用户唯一标识
  • 存储已登录用户的凭证
  • 存储其他业务数据

Cookies-登录用户凭证

  • 前端提交用户名和密码
  • 后端验证用户名和密码
  • 后端通过HTTP头设置用户凭证
  • 后续访问时后端先验证用户凭证

【前端安全】Cookies相关推荐

  1. MVC中前端获取Cookies值

    在ASP.NET中要将Controller中的Cookie值传递给View显示出来,下面介绍其步骤: Step1:在后台创建Cookie Response.Cookies["username ...

  2. java禁止js获取cookie_JS里面如何防止浏览器COOKIES溢出

    在项目中,前端的Cookies往往存一些用户的登录信息和AutoSuggest(基础信息)的东西. 如国家简写,Currency的Code等. 但是Cookies的空间是比较小的,多个用户登录一个系统 ...

  3. 如何获取cookies

    前端自己操作的cookies 获取 js function GetCookie(){var key = "";var getCookie = document.cookie.rep ...

  4. SSO(Single Sign On):原理与使用

    1. 为什么需要SSO 分布式中有很多微服务,某些服务需要用户登录完成才能进行操作,但是每个微服务独立,这样就会访问每个微服务都需要重新登录一次,SSO只要在SSO微服务登录,就可以一次登录,处处使用 ...

  5. 应用宝-ysdk-米大师 对接道具直购服务器端下单模式 java服务端开发日志

    用于接收回调请求的linux服务器证书配置: 回调服务器配置分三种,前两种是当服务部署在腾讯云上时的配置方式,第三种为服务部署在自己服务器上是的配置方式: hosting应用on CVM(即应用部署在 ...

  6. 前端需要了解的 Cookies 和 WebStorage

    Cookies 和 WebStorage 为什么需要客户端存储 记录用户登录状态,当用户下次访问时不必重新登录 存储一些用户对应用的自定义偏好设置,例如主题色.表格每页默认显示条数等 一些广告商需要通 ...

  7. cookies丢失 同域名_后端设置Cookie前端跨域获取丢失问题(基于springboot实现)

    1.跨域问题说明:后端域名为A.abc.com,前端域名为B.abc.com. 2.后端设置一个cookie发送给前台,domain应该是setDomain("abc.com"), ...

  8. java 前端基础知识_【计算机·知识】关于前端的计算机基础知识

    原标题:[计算机·知识]关于前端的计算机基础知识 作为一个刚刚入门的程序猿,你是否对专业知识有足够的了解?今天新闻君带你走进前端的世界. 前端的语言接触起来相对于后端的语言要容易不少,但前端的语言也有 ...

  9. 何崚谈阿里巴巴前端性能优化最佳实践

    转载:http://www.infoq.com/cn/interviews/hl-alibaba-front-end-performance-optimization 大家好,我现在在阿里巴巴园区采访 ...

最新文章

  1. Linux与云计算——第二阶段 第五章:存储Storage服务器架设—分布式存储GlusterFS基础...
  2. mysql中 group_concat长度限制
  3. android .so文件详解以及兼容性
  4. 2011计算机2级,全国计算机等级考试四合一过关训练:2级C语言程序设计(2011版)...
  5. Android之Fatal Exception: org.greenrobot.greendao.DaoException: Could not init DAOConfig
  6. 数据可视化【二】HTML+CSS+SVG+D3
  7. 英特尔cpu发布时间表_英特尔10nm芯片开始大规模出货,先进制程时间表浮出水面...
  8. oracle 自动表分析,其实 Oracle 直方图自动统计算法存在这些缺陷!
  9. 如何正确在Facebook投放产品广告?
  10. PHP图片验证码制作(上)
  11. 计算机组成原理第五版(白中英)第三章多层次存储器 习题
  12. 计算机二级C语言选择题怎么做?要注意些什么?(易错点难点总结笔记)
  13. 关于升级短信源码开发接入SMPP通道
  14. 互联网周刊:深度分析云计算
  15. 【openstack一键安装与部署】
  16. [附源码]java毕业设计网络身份认证技术及方法
  17. 蹭个热度:我只希望孩子心中有爱,眼里有光……
  18. 神经网络系统理论与实践,神经网络系统理论基础
  19. 普元软件推动企业应用架构转型互联网
  20. cad中lisp文件给恶作剧_[软件心得]我用的CAD,LISP加载文件

热门文章

  1. @JSONField的作用
  2. 深度学习(2)--小总结(指数加权平均值,偏差修正,momentum梯度下降,学习率衰减,batch归一化与BN层)
  3. 痘痘消失,美丽再现!
  4. 圣经中学习罗马数字的人_做个罗马人
  5. Letcode.罗马数字转整数
  6. ss-panel config.php,sspanelv3魔改版邮件设置指南及常用配置(示例代码)
  7. ET为什么使用非阻塞IO
  8. Form 表单提交的几种方式
  9. SSM框架的流程及优点
  10. Java中的SSM框架指的什么?有哪些优点?