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