2014-11-06 34 views
-2

我们使用tomcat 8,spring security 4.x并通过POST公开了一个/ login api,它将验证用户的凭证。随着/登录API通常是不安全的,我很害怕,就可以与我们的当前实现以下攻击:如何避免登录api中的大数据

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

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

回答

0
  1. 限制请求的最大大小。您可以限制将被接受的请求的总标题(<Connector>maxHttpHeaderSize属性),并且您可以限制接受的POST正文的总长度(<Connector>maxPostSize的属性)。

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

  3. 为什么你会离开你的/login“API”“不安全”?保护那个坏男孩!