1

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

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

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

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

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

2) 由于 Web 服务函数不返回值(如果可能的话,我更愿意保留它的代码,如果可能的话),客户端只能通过 HTTP 错误代码来区分已处理和未处理的请求。因此,我希望解决方案在过载的情况下返回 HTTP 错误代码。

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

4

2 回答 2

0

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

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

于 2012-08-16T15:48:28.227 回答
0

作为一般规则:不要编码,使用。它适用于 DoS 攻击预防,维基百科有一个很好的预防和响应清单

  • 防火墙配置
  • 开关配置
  • 路由器配置
  • 应用前端硬件
  • 基于 IPS 的预防
  • 基于 DDS 的防御系统
  • 黑洞和沉洞
  • 清洁管道

DoS 预防是一个安全专业人士必须解决的难题(而且你不是你所说的那样)。

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

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

  • ICMP 洪水
  • SYN洪水
  • 泪珠攻击
  • 低速率拒绝服务攻击
  • 点对点攻击
  • 饥饿攻击中资源利用的不对称性
  • 永久拒绝服务攻击
  • 应用级洪水
  • 核弹
  • RU-已经死了?
  • 分布式攻击
  • 反射/欺骗攻击
  • 无意拒绝服务
  • 拒绝服务级别 II

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

于 2012-08-16T15:54:47.270 回答