安全最佳实践
身份验证与授权
Hilla 允许您选择使用任何身份验证和授权框架,而不会绑死某种特定框架。 Hilla 与 Java 生态系统中最广泛使用的安全解决方案完全兼容,包括但不限于 Spring Security、JAAS 和 Apache Shiro。 Hilla Spring 插件包含辅助工具,帮助开发人员将这些框架的安全机制集成到项目中。
由于 Hilla 是一个服务器端框架,身份验证凭据的处理始终发生在服务器端,远离任何可能的攻击表面。 除非开发人员明确这样做,否则凭据永远不会被传输到客户端。
一般来说,建议开发人员对来自客户端的每个调用都仔细检 查用户身份和访问权限。 例如,这可以借助于 Spring Security 和基于视图角色的身份验证进行自动化检查。 但通常这些框架无法自动检查的是基于数据的访问权限,例如限制对特定实体的访问。
例如,如果服务器接收一个要显示的 User 对象 ID,比如在 URL 请求参数中({yourapp.com}/users/4/edit),攻击者可能会自由修改该 ID。
应用程序需要意识到这一点,并检查当前登录用户是否对该实体具有访问权限。
这是所有 UI 框架共有的问题,并不仅限于 Hilla。
数据验证
在 Hilla 应用程序中,数据绑定 API 支持在服务器端进行数据验证,这种验证无法通过客户端攻击绕过。 Vaadin 组件确实支持客户端验证,以提高应用程序的响应性。 但开发人员应了解,这些客户端验证措施仅用于提升用户体验,因为它们很容易在浏览器中被绕过。
与其他 Web 应用程序类似,来自客户端的数据在一到达服务器端时,总是应该进行验证。 仅依赖客户端验证是不安全的。 Hilla 提供了一系列预创建的服务器端验证器用于此目的。 此外,开发人员可自由使用任何 Java API 对数据进行验证,包括连接外部服务。 Hilla 也自带了与 Java Bean Validation(JSR-303)的集成。
同时,从数据存储(如数据库)获取的数据,并在插入 DOM 元素中以 HTML 形式显示时(例如通过给元素设置 innerHTML 或在组件标题中使用 HTML 模式),也应该进行转义处理。
Endpoint
默认情况下,endpoint 要求请求进行认证。
建议使用更严格的访问控制授权,例如使用 @RolesAllowed()。
使用较不严格的访问控制授权,例如 @AnonymousAllowed 时,应当谨慎。
详情参阅 配置安全。