会话重放之防御策略、手段

目录

什么是会话重放?

有什么预防手段?

请求添加时间戳或UUID方式实现预防


什么是会话重放?

会话重放是一种攻击方式,攻击者利用先前记录的会话数据来重放或重新发送网络通信流量,以模拟合法用户的身份,从而绕过身份验证或欺骗目标服务器。这种攻击可以被用于窃取数据、执行未授权的操作或者伪造交易等危险行为。

简单说:相同的请求重复请求,假如是一个扣减存款的接口,多次请求的后果....

有什么预防手段?

  1. 使用一次性令牌:在进行敏感操作时,服务器可以为每个请求生成一次性令牌,并将其发送给客户端,客户端必须在下一个请求中包含该令牌。这样一来,即使攻击者拥有了过去的会话数据,也无法再次使用该请求。
  2. 实现单一会话流:为每个用户创建一个唯一标识,并仅处理该标识下的第一个会话请求,拒绝所有相同标识符的重复请求。这可以帮助防止会话挂起或重复请求。
  3. 添加时间戳:在每个请求中添加时间戳,并将其与服务器端时间进行比较,以确保请求没有被重放,并且在规定的时间内发送。
  4. 使用SSL/TLS:使用SSL或TLS加密所有通信可以预防网络层攻击,从而使会话重放攻击更加困难。
  5. 避免使用弱密码,使用更安全的身份验证技术,如多因素身份验证等。
  6. 对输入数据进行有效性检查以防止注入攻击,以确保输入数据是合法的。

请求添加时间戳或UUID方式实现预防

//思路:通过对比每个请求会话中定义(前端定义请求头参数)的时间戳或者UUID来判断该会话是否重复请求过。

/**
 * 防止会话重放拦截器 校验请求ID
 */
@Component
public class UUIDInterceptor extends HandlerInterceptorAdapter {
    private Set<String> processedUUID = new HashSet<>(); // 已处理的UUID列表

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String UUID = request.getHeader("X-Request-ID"); // 从请求头获取UUID
        if (processedUUID.contains(UUID)) { // 如果该UUID已被处理过,则认为是重放攻击
            response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Duplicate request detected");
            return false;
        }
        processedUUID.add(UUID); // 将该UUID添加到已处理列表

        return true; // 继续处理该请求
    }
}

定义拦截器记的注册

/**
 * @Author Jiangfy
 * @Description 防止会话重放拦截器注入
 **/
@Configuration
public class TimestampConfig implements WebMvcConfigurer {
    @Autowired
    private UUIDInterceptor uuidInterceptor; // 注入拦截器对象

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(uuidInterceptor); // 注册拦截器
    }
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值