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设计一个电商网站(十一)—— 最后的准备
阅读目录 前言 准备 实现 结语 一.前言 最近实在太忙,上周停更了一周.按流程一步一步走到现在,到达了整个下单流程的最后一公里——结算页的处理.从整个流程来看,这里需要用户填写的信息是最多的,那么 ...
随机推荐
- vueshengmingzhouqi
首先,每个Vue实例在被创建之前都要经过一系列的初始化过程,这个过程就是vue的生命周期.首先看一张图吧~这是官方文档上的图片相信大家一定都会很熟悉: 可以看到在vue一整个的生命周期中会有很多钩子函 ...
- 下划线hover下动态出现技巧
酷炫的动画效果往往更能吸引眼球,下面我将分享纯CSS中,hover的时候出现下划线动态飞入的技巧. 1.下划线从左侧飞入: div::before{ content:""; wid ...
- GC 机制
1. 为什么需要垃圾回收? 因为内存是有限的,在不断的分配内存空间而不回收的话内存迟早都会被消耗完,所以垃圾回收是必须的. 2. 触发GC 的条件: 1.GC在优先级最低的线程中运行,一般在应用程序空 ...
- linux shell 搭建本地yum 源,通过IOS镜像 Centeros6,7还有redhat
Centeros: 准备工作: 将系统镜像放到 /opt 下 脚本: #!/bin/bash mkdir /mnt/cdrom mount -o loop /opt/*.ios;# 此处改为你的系统镜 ...
- 如何用纯 CSS 创作炫酷的同心矩形旋转动画
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/bMvbRp 可交互视频教 ...
- POJ 3468 A Simple Problem with Integers (线段树多点更新模板)
题意: 给定一个区间, 每个区间有一个初值, 然后给出Q个操作, C a b c是给[a,b]中每个数加上c, Q a b 是查询[a,b]的和 代码: #include <cstdio> ...
- 自动化测试-selenium IDE使用
selenium IDE结合浏览器提供脚本的录制,回放以及编辑脚本功能,以及元素的定位,可以使用selenium IDE将录制的脚本生成相应的带单元测试框架的自动化测试脚本. selenium具有录制 ...
- [Istio]Kubernetes集群部署Istio 1.0
大部分内容都是可以根据https://istio.io/docs/setup/kubernetes/quick-start/来处理的,这里主要谈部署时一些细节的问题 首先,当我们按照 istio 官方 ...
- HDU 3911 区间合并求最大长度的问题
http://vjudge.net/problem/viewProblem.action?id=21557 题目大意: 每进行一次颜色改变都可以把一段区间内的黑石头变成白石头,白石头变成黑石头,最后问 ...
- 小米自动砸蛋机器js代码
02 //地址:http://static.xiaomi.cn/515 03 //@author:liuzh 04 //@url:http://blog.csdn.net/isea533 05 var ...