对于一个SSO的ticket生成的安全性问题的点评
我今年近期的工作中作为系统架构师身份,对一个现有系统的框架从架构设计的伸缩性和安全性等方面进行了评估,发现了以下安全性问题。
它的现系统的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));}}