Docs

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

此页面由官方文档(http://vaadin.com/docs)机器翻译而来。内容可能存在错误、不准确或误述。Vaadin 不对翻译的准确性、可靠性或及时性作任何担保或声明。

常见漏洞

处理 SQL 注入、跨站请求伪造(CSRF)以及 Java 序列化之类的漏洞。

SQL 注入

由于 Hilla 是一个后端无关的 UI 框架,它不直接负责管理后端访问。 相反,具体的后端框架(例如 Spring Data)的选择由开发人员决定。 Hilla 不提供针对 SQL 注入漏洞的缓解措施。 SQL 注入的防范工作需要由后端提供方和开发人员负责。

然而,通过遵循数据校验和转义指南(参见 XSS 部分),以及标准的数据库安全访问实践,可以在 Hilla 应用程序中完全阻止 SQL 注入漏洞。

大多数后端框架都自带处理 SQL 注入问题的方法,我们建议开发人员遵循这些指南。 但若开发人员选择纯 JDBC,就需要自己处理注入风险。 以下是一个纯 JDBC 示例,展示了如何使用来自文本字段的值在预处理语句中防止 SQL 注入:

Source code
ValueChangeView.ts
class ValueChangedView extends LitElement {
  render() {
    return html`
      <vaadin-text-field label="Your name" @value-changed="${this.nameChanged}"></vaadin-text-field>
    `;
  }

  private nameChanged(event: CustomEvent) {
    nameEndpoint.updateName(event.detail.value)
  }
}
NamedEndpoint.java

跨站请求伪造(CSRF / XSRF)

客户端与服务器间所有请求都会包含一个特定于用户会话的 CSRF 令牌。 客户端和服务器之间的所有通信均由 Vaadin 处理,因此您无需手动包含并校验 CSRF 令牌。

CSRF 令牌会在请求主体的 JSON 消息中传递:

Source code
发送到服务器的 xhr 消息:
{"csrfToken":"0bd61cf8-0231-455b-b39a-434f054352c5","rpc":[{"type":"mSync","node":5,"feature":1,"property":"invalid","value":false},{"type":"publishedEventHandler","node":9,"templateEventMethodName":"confirmUpdate","templateEventMethodArgs":[0]}],"syncId":0,"clientId":0}

当 Vaadin 服务请求时,CSRF 令牌会被传递到名为 X-CSRF-Token 的 HTTP 标头中:

Source code
X-CSRF-Token: 0bd61cf8-0231-455b-b39a-434f054352c5

CSRF 令牌机制可在服务器端被覆盖,例如,为了允许使用 Gatling 等工具创建可重复执行的负载测试脚本。 但我们强烈不建议在生产环境中覆盖该机制。

Java 序列化漏洞

程序语言的机制中存在一种普遍的安全问题,即允许执行来自序列化对象的代码。 Java 语言也不能避免这个问题;不完全列举,至少 Java 序列化框架、RMI、JMX 和 JMS 功能受到此问题的影响。

若应用设置了反序列化 Java 对象(比如通过上述库来实现),攻击者可能向系统注入恶意载荷,并使其反序列化成为 Java 对象。 攻击者还可进一步使用特定语言特性(例如反射)执行任意代码。

Vaadin 已经发布了针对此漏洞的 安全警告

该漏洞无法在 Vaadin 中修复。 开发人员需要使用上述安全警告附录中描述的方法来减轻这一风险。