Cookie防伪造防修改 电商课题:cookie防篡改
主要防止非法用户修改cookie信息,以及cookie的超时时间
传统cookie存储,Cookie(name, value),value很容易就被篡改。
防修改cookie存储,Cookie(name, value+“&&”+ signToken+“&&”+saveTime+“&&”+maxTime)
signToken :签名密钥 由md5(value+saveTime+maxTime+”自定义密钥“)生成
saveTime:cookie创建时间
maxTime:cookie超时时间
设置Cookie
public static void put(HttpServletResponse response, String key, String value, int maxTime) {
String pwdKey = "white_yu"; //自定义密钥
String saveTime = System.currentTimeMillis() + "";
String signToken = md5(pwdKey, saveTime, maxTime + "", value);
String cookieValue = signToken + "&&" + saveTime + "&&" + maxTime
+ "&&" + value;
Cookie cookie = new Cookie(key,cookieValue);
cookie.setMaxAge(maxTime);
response.addCookie(cookie);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
获取Cookie
public static String getCookie(String cookieValue) {
String pwdKey = "white_yu"; //自定义密钥
if (StringUtils.isNotBlank(cookieValue)) {
String cookieStrings[] = cookieValue.split("&&");
if (null != cookieStrings && 4 == cookieStrings.length) {
String signToken = cookieStrings[0];
String saveTime = cookieStrings[1];
String maxTime = cookieStrings[2];
String value = cookieStrings[3];
String sign = md5(pwdKey, saveTime, maxTime, value);
// 保证 cookie 不被人为修改
if (sign.equals(signToken)) {
long stime = Long.parseLong(saveTime);
long maxtime = Long.parseLong(maxTime) * 1000;
// 查看是否过时
if ((stime + maxtime) - System.currentTimeMillis() > 0) {
return value;
}
}
}
}
return null;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
2)WebSphere LTPA 生成原理
- 用户信息,格式为u:user\:<RealmName>/<UserDN>,如:u:user\:VGOLiveRealm/CN=squallzhong,O=VGOLive Technology
- 过期时间
- 签名信息,如:
u:user\:VGOLiveRealm/CN=squallzhong,O=VGOLive Technology%1301558320666%Cy2CAeru5kEElGj0hrvYsKW2ZVsvvcu6Un573aeX55OO4G3EMYWc0e/ZbqDp1z7MS+dLzniuUH4sYWCMpnKdm7ZGabwmV+WcraBl+y+yzwcl722gHVMOnDZAW7U3jEay9Tk2yG4yXkMWU+617xndpVxke2jtS5wIyVVM3q7UDPw=
3)WebSphere LTPA Cookie 的解析
以下代码为解析从 WebSphere 或 Domino 发送过来的 LTPAToken Cookie。以Java为例:
01…02 // LTPA 3DES 密钥03 String ltpa3DESKey = "7dH4i81YepbVe+gF9XVUzE4C1Ca5g6A4Q69OFobJV9g=";04 // LTPA 密钥密码05 String ltpaPassword = "Passw0rd";06 try {07 // 第一步,获得加密key08 byte[] secretKey = getSecretKey(ltpa3DESKey, ltpaPassword);09 // 第二步,使用加密key解密ltpa Cookie10 String ltpaPlaintext = new String(decryptLtpaToken(tokenCipher,11 secretKey));12 displayTokenData(ltpaPlaintext);13 } catch (Exception e) {14 System.out.println("Caught inner: " + e);15 }16…17 //获得安全Key18 private static byte[] getSecretKey(String ltpa3DESKey, String password)19 throws Exception {20 // 使用SHA获得key密码的hash值21 MessageDigest md = MessageDigest.getInstance("SHA");22 md.update(password.getBytes());23 byte[] hash3DES = new byte[24];24 System.arraycopy(md.digest(), 0, hash3DES, 0, 20);25 // 使用0替换后4个字节26 Arrays.fill(hash3DES, 20, 24, (byte) 0);27 // BASE64解码 ltpa3DESKey28 byte[] decode3DES = Base64.decodeBase64(ltpa3DESKey.getBytes());29 // 使用key密码hash值解密已Base64解码的ltpa3DESKey30 return decrypt(decode3DES, hash3DES);31 }32 //解密LtpaToken33 public static byte[] decryptLtpaToken(String encryptedLtpaToken, byte[] key)34 throws Exception {35 // Base64解码LTPAToken36 final byte[] ltpaByteArray = Base64.decodeBase64(encryptedLtpaToken37 .getBytes());38 // 使用key解密已Base64解码的LTPAToken39 return decrypt(ltpaByteArray, key);40 }41 // DESede/ECB/PKC5Padding解方法42 public static byte[] decrypt(byte[] ciphertext, byte[] key)43 throws Exception {44 final Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");45 final KeySpec keySpec = new DESedeKeySpec(key);46 final Key secretKey = SecretKeyFactory.getInstance("TripleDES")47 .generateSecret(keySpec);48 cipher.init(Cipher.DECRYPT_MODE, secretKey);49 return cipher.doFinal(ciphertext);50 }51…解析出来的LTPAToken信息以%分隔。
Cookie防伪造防修改 电商课题:cookie防篡改的更多相关文章
- SpringBoot微服务电商项目开发实战 --- api接口安全算法、AOP切面及防SQL注入实现
上一篇主要讲了整个项目的子模块及第三方依赖的版本号统一管理维护,数据库对接及缓存(Redis)接入,今天我来说说过滤器配置及拦截设置.接口安全处理.AOP切面实现等.作为电商项目,不仅要求考虑高并发带 ...
- [.NET] 一步步打造一个简单的 MVC 电商网站 - BooksStore(四)
一步步打造一个简单的 MVC 电商网站 - BooksStore(四) 本系列的 GitHub地址:https://github.com/liqingwen2015/Wen.BooksStore &l ...
- 电商安全无小事,如何有效地抵御 CSRF 攻击?
现在,我们绝大多数人都会在网上购物买东西.但是很多人都不清楚的是,很多电商网站会存在安全漏洞.比如乌云就通报过,国内很多家公司的网站都存在 CSRF 漏洞.如果某个网站存在这种安全漏洞的话,那么我们在 ...
- Java生鲜电商平台-商家支付系统与对账系统架构实战
Java生鲜电商平台-商家支付系统与对账系统架构实战 说明:关于生鲜电商平台,支付系统是连接消费者.商家(或平台)和金融机构的桥梁,管理支付数据,调用第三方支付平台接口,记录支付信息(对应订单号,支付 ...
- 架构设计 | 基于电商交易流程,图解TCC事务分段提交
本文源码:GitHub·点这里 || GitEE·点这里 一.场景案例简介 1.场景描述 分布式事务在业务系统中是十分常见的,最经典的场景就是电商架构中的交易业务,如图: 客户端通过请求订单服务,执行 ...
- Java生鲜电商平台-API接口设计之token、timestamp、sign 具体架构与实现(APP/小程序,传输安全)
Java生鲜电商平台-API接口设计之token.timestamp.sign 具体设计与实现 说明:在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(防窃 ...
- .NET Core/.NET5/.NET6 开源项目汇总7:电商项目
系列目录 [已更新最新开发文章,点击查看详细] 谈起.NET/.NET Core的企业级实战案例,电商项目是典型代表.其中高负载.高并发.高可用性等问题是考核.NET技术性能的重要指标.下面整 ...
- Linux-某电商网站流量劫持案例分析与思考
[前言] 自腾讯与京东建立了战略合作关系之后,笔者网上购物就首选京东了.某天在家里访问京东首页的时候突然吃惊地发现浏览器突然跳到了第三方网站再回到京东,心里第一个反应就是中木马了. 竟然有这样的事,一 ...
- 如何一步一步用DDD设计一个电商网站(十一)—— 最后的准备
阅读目录 前言 准备 实现 结语 一.前言 最近实在太忙,上周停更了一周.按流程一步一步走到现在,到达了整个下单流程的最后一公里——结算页的处理.从整个流程来看,这里需要用户填写的信息是最多的,那么 ...
随机推荐
- SQL Server 删除表的默认值约束
首先查出字段的默认值约束名称,然后根据默认值约束名称删除默认值约束 ) select @constraintName = b.name from syscolumns a,sysobjects b w ...
- 前段开发 react native tab功能
import React, { Component } from 'react'; import { StyleSheet, Text, View, Image, } from 'react-nati ...
- canvas使用自定义字体没有效果
字体样式没有显示主要是因为字体还没有加载完成~ css @font-face { font-family: myFont; src: local('sen.ttf'), url("sen.t ...
- nginx 获取真实ip
使用阿里云SLB,无法获取真实ip问题 官方给出的是如下用法,需要安装模块,大体上是没有错的,但是比较模糊,实际操作中可能会踩坑,所以参考学习即可,不必照搬.(那个http_realip_module ...
- JavaScript中函数的定义
JavaScript中函数的定义 制作人:全心全意 在JavaScript中,函数是由关键字function.函数名加一组参数以及置于大括号中需要执行的一段代码定义的.定义函数的基本语法格式如下: f ...
- Mac 配置 php-fpm
Mac 自带 php-fpm,在终端执行 php-fpm,会报如下错误: ERROR: failed to open configuration file '/private/etc/php-fpm. ...
- crontab 和 supervisor
crontab linux系统自带的工具,可以做定时任务,最小间隔是1分钟 配置crontab 命令 如果是以root用户编辑的,那么最后运行也是以root用户运行脚本文件 crontab -e 命令 ...
- day23 01 类的命名空间
day23 01 类的命名空间 一.初识面向对象复习 定义类: class 函数:方法 动态属性 变量:类属性 静态属性 过程: (1)_init_方法:初始化:def _init_(self,参数 ...
- 【问题探索日志】python 函数优化
# 事情是这样的,我写的一个程序帧率上不去. 然后发现了一个疑似有问题的地方,如下 def around(x,y): around_dict = {(i,j) for i in range(-1,2) ...
- 【C#】【数据结构】006-栈:链栈
C#数据结构:链栈 1.自定义链栈结构: 链栈节点类 using System.Collections; using System.Collections.Generic; using UnityEn ...