ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-装饰HashMap添加随机性以防止(D)DoS

2019-11-01 22:31:00  阅读:231  来源: 互联网

标签:hashmap denial-of-service java php


顺便说一下,这里的解决方法是重新使用所有现有的HashMap(例如ConcurrentHashMap等),而不是完全重新发明轮子.使用随机哈希函数的语言(如Perl)可以防止这种攻击.

鉴于最近在多个hashmap实现中使用已知缺陷的DDoS(具有破坏性)(已知会影响Java Web服务器,但也影响PHP和其他),Apache Tomcat刚刚以补丁的形式发布了一个“修复程序”,允许放置限制POST请求中允许的最大参数数量(将Tomcat修补为6.0.35或7.0.23 btw).

(D)DoS显然基本上是基于这样的事实,即可以对字符串进行精心设计,使它们在散列时发生冲突,并且许多Web服务器“愚蠢地”将键/值参数放入(断开)散列图中.

我想知道是否有可能在HashMap {String,String}周围编写装饰器,以便向每个String添加一个随机值(从受攻击的角度来看是随机的),就像这样:

... get( String s ) {
    return wrappedBrokenMap.get( s + crunch(s );
}

... put( String key, String value ) {


  wrappedBrokenMap.put( s + crunch(s), value );
}

这将是crunch(…)的一个实现(这只是一个示例,重点是:攻击者不知道实现):

private static final int MY_MAGICAL_NUMBER = 0x42BABE;  // attacker doesn't know that number

private static String crunch( String s ) {
    return s.length + "" + MY_MAGICAL_NUMBER;
}

如果对于任何String,紧急情况都返回了攻击者无法猜测的可复制String,那么DDoS攻击已被有效阻止了吗?

那行得通吗?

解决方法:

If for any String s crunch(s) returns a reproducible String that the attacker cannot guess, the DDoS attack has effectively been prevented right?

基本上,这是在对密码哈希加盐时执行的操作(尽管出于稍微不同的原因).它不能完全防止碰撞攻击(如果您具有将任意长度的输入映射到固定长度的输出的哈希函数,则哈希值始终会发生冲突),但是使用秘密盐会使此类攻击更加困难.

一个快速的’肮脏的实现可能看起来像这样:

public class SaltedHashMap<V> {
    private final Map<String, V> map = new HashMap<>();
    private final String salt;
    public SaltedHashMap(String salt) {
        this.salt = salt;
    }
    public V get(String key){
        return map.get(key + salt);
    }
    public void put(String key, V value) {
        map.put(key + salt, value);
    }
}

以Web服务器为例,我们可以使用SecureRandom为每个传入请求随机分配一个新的盐,这意味着即使您设法为一个请求找出了产生冲突的输入,对于其他请求也不大可能起作用要求.

标签:hashmap,denial-of-service,java,php
来源: https://codeday.me/bug/20191101/1986887.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有