作为Java开发人员,我将参与一个Web项目。所以我试图了解网络安全的不同方面。
现在我来到了DoS攻击主题,我试图弄清楚我作为Java开发人员能做什么/应该做什么。或者可能是系统管理员的工作。
我首先想到的是以某种方式实现功能,因此单个请求不会占用太多时间和资源。例如,对处理数据的数量设置一些限制。但我不确定这是否适用于所有情况。
由于许多要求,我是否应该为DoS做任何照顾?
任何建议将不胜感激。 非常感谢提前!
答案 0 :(得分:4)
首先,您无法阻止DoS攻击。
您所能做的就是让您的代码变得合理(开发人员),并使您的架构更加健壮(SysAdmin)。这是一项共同努力。
开发人员应该尽量减少资源使用,而不仅仅是针对DoS攻击。
开发人员应该使用缓存来保护数据库。如果每个请求都需要查阅国家列表,那么每次从数据库中请求该列表都不是好的做法。
开发人员应确保错误请求尽快失败。例如。在您确认其帐号确实存在之前,请不要查阅国家/地区列表。
开发人员应采用REST等方法:单独处理每个请求,而不是将Sessions维护在内存中。这可以阻止你的内存使用在攻击期间飙升。您不希望内存问题以及您的网络泛滥!
开发人员应该使他们的应用程序可扩展。同样,REST在这里有所帮助,因为您不必将内容存储在内存中。如果您可以一次运行十个应用程序实例,每个实例处理一部分请求,您将在DoS攻击中持续更长时间(并且可能会为您的用户提供更流畅的网站体验)。
SysAdmins应提供负载平衡,故障转移等框架来管理此可伸缩性。他们还将管理实例的硬件。您还可以选择根据需要自动添加更多实例,这意味着自动服务器创建和部署变得非常重要。使用VM而不是物理盒可以帮助解决这个问题。
SysAdmins可以设置防火墙和代理,这样,当攻击发生时,他们可以保持您的REAL流量通过并停止攻击流量。他们可以通过可疑的IP范围过滤流量,阻止“可疑的”请求,将流量水平限制在温和的流量等等。
总的来说,您可以将DoS视为“大量流量”。如果您的应用程序代码和体系结构无法应对来自“常规用户”的不断增加的流量,那么无论如何,无论DoS攻击如何,您都将注定失败。当Facebook受到DoS威胁时,我记得有人指出“每天都是Facebook的DDoS攻击......”。但它的开发和结构是以它应对的方式进行的。
答案 1 :(得分:3)
DoS攻击通常是IT的关注点。如果您正在开发Web应用程序,通常它位于前端控制器(apache,nginx等)之后,它会将请求转发到您的应用程序容器(Tomcat,Rails等等)。前端控制器通常/总是有逻辑来处理这个问题
如果您是应用程序开发人员,那么请专注于XSS攻击(http://en.wikipedia.org/wiki/Cross-site_scripting),因为这完全在应用程序开发人员的责任范围内
答案 2 :(得分:2)
我认为这主要是系统管理员关注的问题,但这并不意味着开发人员不应采取措施来避免它。
由于DoS攻击通常是关于使用请求阻止系统崩溃以使其无法处理实际请求(拒绝服务),wikipedia有关于DoS预防的说法:
防御拒绝服务攻击通常涉及使用攻击检测,流量分类和响应工具的组合,旨在阻止他们识别为非法的流量并允许他们识别为合法的流量。
在我看来,这些是系统管理员任务,因为他们应该配置防火墙,路由器,交换机等。