如何使Web服务报告过载?

时间:2012-08-16 15:36:20

标签: java web-services weblogic

我正在创建一个Web服务,它实现一个接受输入参数并将它们存储在数据库中的函数。 (代码使用Java编写,使用NetBeans IDE编写,部署在WebLogic服务器上。)类似这样的内容:

@WebService
class DataSaver {
    void saveData( ...data... ) {
        ...
    }
}

它已经完成,似乎工作正常,所以现在我担心安全:

如果有太多客户端同时连接(或者某人会在我的网站上发生拒绝服务攻击)会发生什么情况,那么服务器将无法正确处理所有请求?

1)我更希望服务器/应用程序不会崩溃。在超载的情况下,有什么机制可以发送请求?它们是默认启用的吗?如果没有,我该如何打开它们?

2)由于Web服务功能没有返回值(我希望保留其现在的代码,如果可能的话),客户端可以分辨已处理和未处理的请求仅限HTTP错误代码。因此,我希望解决方案在发生过载时返回HTTP错误代码。

我对Web服务和性能调优不是很熟悉(我更像是理论程序员;算法和东西),所以我甚至不知道该寻找什么。在Java中解决这个问题似乎为时已晚 - 当消息到达我的代码时,XML请求已被解析。我希望服务器配置中的一些参数能够处理这个问题。但我没有成功通过谷歌或阅读WebLogic手册找到它。也许我使用了错误的关键字,或者我对如何处理这个问题有一个完全错误的想法...这就是为什么部分答案也可能非常有用。

2 个答案:

答案 0 :(得分:0)

如果你想防御DOS攻击,那么你可以获得软件/硬件来做到这一点。

如果你想在代码中执行它,那么你可以编写自己的javax.servlet.Filter。您可以简单地保留活动请求的数量,并使用HTTP 502或您需要的任何内容进行回复。

答案 1 :(得分:0)

作为一般规则:不要编码,使用。它适用于DoS攻击预防,维基百科有一个很好的Prevention and response checklist列表:

  • 防火墙配置
  • 切换配置
  • 路由器配置
  • 应用程序前端硬件
  • 基于IPS的预防
  • 基于DDS的防御系统
  • Blackholing and sinkholing
  • 清洁管道

DoS预防是一个必须由安全专业人员解决的难题(并且您不是来自您所说的)。

如果您独自为少数客户创建一个小型WebService,您甚至不必考虑防止DoS攻击,因为您不太可能遇到此类攻击。

如果DoS预防是强制性的,并且有充分的理由,那么请问安全专业人员,因为您必须考虑以下类型的DoS攻击:

  • ICMP flood
  • SYN flood
  • 泪滴攻击
  • 低速率拒绝服务攻击
  • 点对点攻击
  • 饥饿袭击中资源利用的不对称性
  • 永久拒绝服务攻击
  • 应用程序级别泛滥
  • 核弹
  • R-U型死然而?
  • 分布式攻击
  • 反射/欺骗攻击
  • 无意的拒绝服务
  • 拒绝服务等级II

现在,如果您希望合法用户能够知道服务运行正常还是失败,只需使用Web服务器的经典行为:如果有太多合法用户同时连接,那么您的代码将以异常失败。然后,您的servlet服务器将以503 HTTP error code响应。此代码将告诉您的用户出现问题。