跳到主要内容

安全最佳实践

信息

在身份验证和授权、数据验证以及 SSL 和 HTTPS 方面的最佳实践。

身份验证和授权

Hilla 允许选择要使用的身份验证和授权框架,而不是捆绑任何特定的一个。 Hilla 与 Java 生态系统中最常用的安全解决方案完全兼容,包括但不限于 Spring Security、JAAS 和 Apache Shiro。 Hilla Spring 插件为开发者提供了帮助,以便集成到这些框架的安全机制中。

由于 Hilla 是一个服务器端框架,凭证处理始终在服务器上进行,远离任何可能的攻击表面。 凭证永远不会传输到客户端,除非开发者明确这样做。

通常,建议开发者对来自客户端的每个调用进行双重检查用户身份和访问权限。 这可以通过例如 Spring Security 和基于角色的视图认证进行自动化。 这些框架通常无法自动化的是基于数据的访问权限,如限制对特定实体的访问。

举例来说,如果服务器在 URL 请求参数(例如:User{yourapp.com}/users/4/edit)中接收到一个要显示的对象的 ID,那么这个 ID 可以被攻击者自由改变。 应用程序需要意识到这一点,并检查当前登录的用户是否有权访问这个实体。 这是所有 UI 框架的共性,不特指 Hilla。

数据验证

在 Hilla 应用程序中,数据绑定 API 支持在服务器上进行数据验证,这不能通过客户端攻击来绕过。 Vaadin 组件确实支持客户端验证,以提高应用程序的响应性。 然而,开发者应该意识到,这些应该纯粹出于方便使用,因为它们在浏览器中很容易被规避。

与其他 Web 应用程序一样,来自客户端的数据一旦到达服务器就应该始终进行验证。 仅依赖客户端验证是不安全的。 Hilla 为此目的提供了一套预创建的服务器端验证器。 此外,开发者可以自由地使用任何 Java API 来验证数据,包括连接到外部服务。 Hilla 还与 Java 的 Bean Validation(JSR-303) 标准集成。

来自数据存储(如数据库)的数据并插入为 HTML 到 DOM 元素(例如,通过设置元素的 innerHTML 或在组件标题中使用 HTML 模式)也应该被转义。

端点

默认情况下,一个端点需要请求被认证。 建议使用更严格的访问控制,如 @RolesAllowed()。 较不严格的访问控制,如 @AnonymousAllowed,应谨慎使用。 请参阅 配置安全性 以获取更多信息。

SSL 和 HTTPS

Vaadin 始终建议开发者设置安全的服务器端点,并且所有通信都只在 HTTPS 下运行。 Hilla 与 HTTPS 开箱即用,开发者在他们的应用程序代码中没有任何需要配置的。 请参阅你的 servlet 容器的文档,了解如何在你的服务器上设置 HTTPS。