【Web安全】Session防爆破的实现

前置内容:什么是Session爆破 (请参考 http://www.cnblogs.com/phpstudy2015-6/p/6776919.html

session爆破的基本流程如下图所示:
在这里插入图片描述
本文将解决攻击者在第3步中使用暴力破解的方式获取合法的session:

实现思路:
攻击者通过携带不同的session向服务端发送请求以达到获取合法回话。因此可以为服务器端增加一个过滤器来判断某一IP是否存在潜在的攻击行为。

  1. SessionBlastManager类:此类的作用是封装所需的功能性操作
public class SessionBlastManager{
   
	private static final Logger logger = LoggerFactory.getLogger(SessionBlastManager.class);
	private static Map<String,SessionBlastRequest> session_protect_map = new ConcurrentHashMap<>();
	private static Map<String,Long> limited_ip_map = new ConcurrentHashMap<>();
	//判断IP是否被限制访问
	private static boolean hasLimitIp(String remoteAddress){
   
		Long time = limited_ip_map.get(remoteAddress);
		if(time==null){
   
			return false;
		}
		return true;
	}

//检查Session爆破,返回是否需要限制IP地址访问
	public static boolean checkSessionBlastANdLimitIp(String remoteAddress,String sessionId){
   
//判断当前IP是否被限制请求
	if(hasLimitIp(remoteAddress)){
   
		logger.info(remoteAddress + "has be limited");
		return true;
	}
	//判断当前请求的session是否有效
	LoginInfo loginInfo = Constants.sessionId_loginInfo_map.get(sessionId);
	//判断是否存在登陆信息
	if(loginInfo != null){
   
		return false;
	}
	long second = System.currentTimeMillis()/1000;
	if(session_protect_map.get(remoteAddress)== null){
   
		session_protect_map.put(remoteAddress,new 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值