Docs

Documentation versions (currently viewingVaadin 24)
Documentation translations (currently viewingChinese)

本页面为官方文档(见 http://vaadin.com/docs)的机器翻译版本,可能包含错误、不准确或表述不当之处。Vaadin 不保证或声明译文的准确性、可靠性或时效性。

安全最佳实践

认证与授权、数据验证、以及 SSL 和 HTTPS 的最佳实践。

身份验证与授权

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 时,应当谨慎。 详情参阅 配置安全

SSL 和 HTTPS

Vaadin 建议开发人员始终配置安全的服务器端点,并完全使用 HTTPS 进行通信。 Hilla 无需额外配置即可支持 HTTPS,开发人员无需在应用程序代码中做任何特别设置。 请参见服务器容器的文档,了解如何在服务器端设置 HTTPS。