如何避免登录api中的大数据

时间:2014-11-06 20:25:33

标签: java tomcat authentication spring-security tomcat8

我们正在使用tomcat 8,spring security 4.x并通过POST公开/ login api,这将验证用户的凭据。由于/ login API通常是不安全的,我担心,我们当前的实现可能会发生以下攻击:

  1. 在用户名和密码字段中发送大量输入。 Spring security的UsernamePasswordAuthenticationFilter只是将servlet中的用户名和密码参数复制到一个字符串中。可以提交大量数据并通过内存耗尽导致拒绝攻击。可以将readlistener与servlet 3.1规范一起使用,但如果我可以避免使servlet异步,那将是首选。那么,是否可以简单地查看内容大小的标题? / login的POST通常具有用户名参数,它的值(上限是有界的),密码参数及其值(由业务规则限定的大小)。所以理论上,如果我检查内容大小>某些可配置的大小,我可以拒绝身份验证。这种做法有漏洞吗?

  2. 攻击者可以将内容大小的标头设置为大量,并且只发布小数据。在这种情况下,当tomcat模拟将http体读取为模拟阻塞时,线程可能会被长时间阻塞。当tomcat尝试读取http主体时,有没有办法在tomcat中指定超时?

1 个答案:

答案 0 :(得分:0)

  1. 限制请求的最大大小。您可以限制要接受的请求(<Connector>的{​​{1}}属性)的总标头数,并且可以限制接受的POST正文的总长度(maxHttpHeaderSize'{ {1}}属性)。

  2. 此攻击称为slowloris。 Tomcat的NIO实际上释放了线程的“模拟阻塞”,以避免DOS发生此类攻击。您可以指定超时以帮助缓解slowloris的问题。我会把这作为练习让你阅读Tomcat connector documentation,因为你显然还没有读过它。

  3. 为什么要让<Connector>“API”“不安全”?保护那个坏孩子!