Vaadin和Eclipse RAP/RWT是Web应用程序框架 - 据我所知 - 类似的架构。我的问题是,使用Vaadin或RAP构建的应用程序是否容易发生拒绝服务攻击?我目前正在评估框架,并希望确保这不是一个问题。
这是我的推理:
使用Vaadin或RAP,您不构建HTML输出,而是构建类似于Swing / SWT应用程序的Widget树(在RAP的情况下,它是SWT)。框架在浏览器中将窗口小部件树呈现为HTML,并将用户交互发送回服务器,其中应用程序根据事件通知。事件将传递给先前已在窗口小部件上注册的侦听器对象。
因此,窗口小部件树必须保留在某种用户会话中,当然会消耗一些内存。
如果应用程序是公共的(即不在登录页面后面),那么似乎这种应用程序可能存在拒绝服务攻击: 只需向应用登录页面发送请求,并可能伪造第一个响应。对于任何此类请求,框架将构建一个新的窗口小部件树,它将在服务器上存活一段时间,直到会话到期。因此,服务器内存应该很快就会充满纠结的用户会话。
或者这些框架是否针对这种情况发明了保护措施? 感谢。
答案 0 :(得分:2)
框架不能保护您免受DoS攻击。
Vaadin内置了一些防止攻击的功能,但这些功能当然取决于您对应用程序进行编码的方式。
关于vaadin安全性的网络研讨会很长: https://vaadin.com/de/blog/-/blogs/vaadin-application-security-webinar
Vaadin对客户端< - >服务器流量进行了一些验证 防止XSS和其他攻击。
但是当你做一些特别的事情时,你可以为这种攻击敞开大门。
至于你描述的情景:
初始的vaadin会话在服务器上占用一些内存(就像任何服务器上的所有其他会话一样)
此内存占用量有多大,取决于小部件的初始数量以及为此加载内存的内容。 (数据库连接等)
通常,当您拥有一个非常轻量级的登录页面时,这不是问题
但如果您显示大型表格和许多其他奇特的东西,那么您将需要有足够的内存来处理请求数量。 (这同样适用于所有其他http服务器/应用程序,它们也需要内存)
如果请求数量超过服务器容量,任何Web服务都可以在DoS攻击中降低
修改强>
由于Andrés回答的好处,我想提出我的问题。
首先,当然我同意,如果你把一个应用程序放在登录墙后面 然后DOS威胁不是那么大。至少你可以识别攻击用户。登录页面本身就可以 是轻量级的,甚至不能用Vaadin / RAP实现。 由于Vaadin / RAP应用程序最有可能用于RIA样式的Intranet设置,因此DOS方案不会失效 它们在这些设置中的使用。
但至少两个框架本身都暴露了没有登录互联网的演示页面: 见http://www.eclipse.org/rap/demos/和http://demo.vaadin.com/dashboard/ 这些不是简单的页面,可能会使用相当多的内存。
我关注的是这种情况,一个非访问限制的网页: 一旦这些框架响应了请求,他们必须在相当长的一段时间内为该请求保留服务器端内存 (比如说HTTP会话的经典30分钟,至少在分钟范围内)。 或者以不同的方式表达,如果应用程序在一段时间内保留每个初始用户请求的内存,那么它将是 容易受到DOS攻击。
将此与旧式往返Web应用程序进行对比,该应用程序不需要用户识别。 决定返回内容所需的所有信息都包含在请求中(路径,参数,http方法,...), 所以无状态服务器可能。 如果用户与此类应用程序交互,则应用程序仍可以自由地在客户端上存储会话持久性数据 (购物车内容以饼干等形式)。