我今年近期的工作中作为系统架构师身份,对一个现有系统的框架从架构设计的伸缩性和安全性等方面进行了评估,发现了以下安全性问题。
它的现系统的ticket的生成是用以下代码生成的:
package com.xxx.sna.server.utils;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.BooleanUtils;
public class TicketBuilder {
private static final String ENCRYPT_KEY = "!@$%6*He(8HJ79dsFGKD";
/**
* 取得随机密钥
*
* @return
*/
private static final String getEncryptKey() {
return ENCRYPT_KEY;
}
/**
* 生成Ticket
*
* @param account
* @return
*/
public static final String generateTicket(String account) {
return DigestUtils.md5Hex(account + getEncryptKey());
}
/**
* 匹配Ticket
*
* @return
*/
public static final boolean match(String account, String ticket) {
return generateTicket(account).equals(ticket);
}
public static void main(String[] args) {
// System.out.println(TicketBuilder.generateTicket("roymax"));
// System.out.println(TicketBuilder.match("roymax",
// generateTicket("roymax")));
System.out.println(BooleanUtils.toInteger(true));
System.out.println(BooleanUtils.toInteger(false));
}
}
大家有没发现什么问题呢?
下面是我发现问题后对此的相关对话记录:
Wooce 2009-03-09 18:31:12
我觉得SNA的cookie里没有跟具体会话有关的信息, 就是说,只要登录一次,这次登录的cookie完全可以用来伪造为下次登录使用?
XXX 2009-03-09 18:33:39
嗯,用到cookie是有一点安全隐患
Wooce 2009-03-09 18:35:26
只要cookie里是能保存每次登录都不同的session id, 那么,既能解决我下午所说的问题, 又能保证比较好的安全性, 对不对?
XXX 2009-03-09 18:37:23
我查一下代码,现在保存的sna_ticket值应该是每次登录都不同才对
Wooce 2009-03-09 18:38:25
不是啊。
public static final String generateTicket(String account) {
return DigestUtils.md5Hex(account + getEncryptKey());
}
Wooce 2009-03-09 18:38:56
getEnryptKey()又返回每次都一样的:
private static final String ENCRYPT_KEY = "!@$%6*He(8HJ79dsFGKD"
Wooce 2009-03-09 18:39:17
所以, sna_ticket值每次登录都会是一样的,:)
XXX 2009-03-09 18:39:17
嗯,知道了~~~~~~呵呵,这代码改过
XXX 2009-03-09 18:40:06
是的,只要每次登录的值不同就可以
Wooce 2009-03-09 18:43:43
+系统当前时间+user id+随机串,然后再加密, 就保证每次和每个用户都不同了, 就可以完全把sna_ticket当session id用了
分享到:
相关推荐
一个sso的解决方案
SSO单点登陆 ---详细图解 不可多得。 很实用! 不实用不要分。
自己写的一个SSO跨域单点登录Demo,直接使用Eclipse导入即可使用,压缩包中附有自己总结的详细的使用说明和跨域登录原理讲解,感兴趣的朋友可以看一下。
一个用Servlet实现的SSO的demo(一个SSO服务端工程和两个SSO客户端工程),可直接运行。
phpcms_v9.6.6_UTF8手机电脑同时生成html 官方改了后台界面,修复bug 安装文件不检查index.html 安装完删除安装目录 安装删除友情链接、广告数据 添加支持https 后台界面修改 整合ueditor编辑器 ueditor整合上传水印...
spring boot整合spring security 实现SSO单点登陆 完整DEMO. ...2、先后启动SsoServer、sso-resource、sso-client1、sso-client2 3、访问http://sso-taobao:8083/client1/ 或 http://sso-tmall:8084/client2/
Loong SSO(单点登录)开源代码正式发布 rc1.0 Loong SSO是一款用C 写的 SSO服务端,可以运行在 linux(2.6内核) 和 FreeBSD系统上,使用HTTP协议 进行交互. 这款SSO产品,在运行机制上 ...来保证传输数据的安全性和有效性
一个实现SSO方案的构想SSO单点登陆解决方案
16.后台添加复制,可复制一条新的到任何栏目或站点 17.验证码修改 18.修改会员中心头像 19.修改后台缩略图裁切图片 20.修改flash上传,改成html5上传 21.添加头像字段 22.修改头像,重新写入库 23.修复phpcms多处BUG...
SSO的简单实现SSO的简单实现SSO的简单实现
程序流程: SSO系统 ... ... 3) 如果验证通过,则从映射表中取出该用户所有能访问的应用系统,显示在sso登录成功页面。...也就是说,该用户能访问几...4) 用户在 sso登录成功的页面,选择一个链接,请求某一个应用系统的页面;
公司需要做统一的sso单点登录,由于CAS过于重量级和复杂。所以就自己基于springMVC mybatis redis缓存实现了SSO单点登录。mark一下!
sso单点登录sso单点登录sso单点登录sso单点登录
xxl/sso 核心处理包
使用java servlet实现的一个单点登录的例子,(sso)demo,