我正在创建一个Web服务,它实现一个接受输入参数并将它们存储在数据库中的函数。 (代码使用Java编写,使用NetBeans IDE编写,部署在WebLogic服务器上。)类似这样的内容:
@WebService
class DataSaver {
void saveData( ...data... ) {
...
}
}
它已经完成,似乎工作正常,所以现在我担心安全:
如果有太多客户端同时连接(或者某人会在我的网站上发生拒绝服务攻击)会发生什么情况,那么服务器将无法正确处理所有请求?
1)我更希望服务器/应用程序不会崩溃。在超载的情况下,有什么机制可以发送请求?它们是默认启用的吗?如果没有,我该如何打开它们?
2)由于Web服务功能没有返回值(我希望保留其现在的代码,如果可能的话),客户端可以分辨已处理和未处理的请求仅限HTTP错误代码。因此,我希望解决方案在发生过载时返回HTTP错误代码。
我对Web服务和性能调优不是很熟悉(我更像是理论程序员;算法和东西),所以我甚至不知道该寻找什么。在Java中解决这个问题似乎为时已晚 - 当消息到达我的代码时,XML请求已被解析。我希望服务器配置中的一些参数能够处理这个问题。但我没有成功通过谷歌或阅读WebLogic手册找到它。也许我使用了错误的关键字,或者我对如何处理这个问题有一个完全错误的想法...这就是为什么部分答案也可能非常有用。
答案 0 :(得分:0)
如果你想防御DOS攻击,那么你可以获得软件/硬件来做到这一点。
如果你想在代码中执行它,那么你可以编写自己的javax.servlet.Filter。您可以简单地保留活动请求的数量,并使用HTTP 502或您需要的任何内容进行回复。
答案 1 :(得分:0)
作为一般规则:不要编码,使用。它适用于DoS攻击预防,维基百科有一个很好的Prevention and response checklist列表:
DoS预防是一个必须由安全专业人员解决的难题(并且您不是来自您所说的)。
如果您独自为少数客户创建一个小型WebService,您甚至不必考虑防止DoS攻击,因为您不太可能遇到此类攻击。
如果DoS预防是强制性的,并且有充分的理由,那么请问安全专业人员,因为您必须考虑以下类型的DoS攻击:
现在,如果您希望合法用户能够知道服务运行正常还是失败,只需使用Web服务器的经典行为:如果有太多合法用户同时连接,那么您的代码将以异常失败。然后,您的servlet服务器将以503 HTTP error code响应。此代码将告诉您的用户出现问题。