RTCIceCandidate: address 属性

Baseline 2024
新推出

自 2024 年 5 月以来,此功能已在最新设备和浏览器版本中可用。此功能可能不适用于较旧的设备或浏览器。

RTCIceCandidate 接口的只读 **address** 属性是一个字符串,提供了作为候选源的设备的 IP 地址。如果未另行指定,address 默认值为 null

address 字段的值是从传递给 RTCIceCandidate() 构造函数的 candidateInfo options 对象设置的。你不能在 options 对象中直接指定 address 的值,但如果它的格式正确,它的值会自动从对象的 candidate a-line 中提取。

一个字符串,提供候选来自的 IP 地址。

注意:如果 portnull — 并且 port用户代理 支持 — 将候选传递给 addIceCandidate() 会失败,并抛出 OperationError 异常。

安全注意事项

这里需要注意的是,虽然 WebRTC 不要求 RTCPeerConnection 上的两个对等方知道彼此的真实 IP 地址,但 RTCIceCandidate 上的 address 属性可以暴露比用户预期的更多的关于远程对等方来源的信息。IP 地址可用于推导有关远程设备位置、网络拓扑等方面的信息。它还可以用于 指纹识别目的。

候选 IP 地址总是通过 address 暴露给应用程序,而不怀好意的应用程序可能会潜在地向用户公开该地址。这可能在未经远程对等方同意的情况下发生。

在构建应用程序时,考虑到用户隐私和安全,可以选择将允许的候选限制为仅中继候选。这样做可以防止远程用户的地址被暴露,但会减少可供选择的可用候选池。要做到这一点,请使用符合 RTCPeerConnection.setConfiguration 中描述的 configuration 属性的对象来配置 ICE 代理的 ICE 传输策略,如下所示:

js
const rtcConfig = {
  iceServers: [
    {
      urls: "turn:my-turn.server.ip",
      username: "username",
      credential: "password",
    },
  ],
  iceTransportPolicy: "relay",
};

通过将 iceTransportPolicy 设置为 "relay",任何主机候选(IP 地址是对等方自身 IP 地址的候选)都会从候选池中排除,任何非中继候选也会被排除。

用法说明

考虑这个描述 ICE 候选的 SDP 属性行(a-line):

a=candidate:4234997325 1 udp 2043278322 192.0.2.172 44323 typ host

第五个字段 "192.0.2.172" 是此候选 a-line 字符串中的 IP 地址。

示例

此代码片段使用 address 的值来实现基于 IP 地址的禁止功能。

js
if (ipBanList.includes(candidate.address)) {
  rejectCandidate(candidate);
} else {
  acceptCandidate(candidate);
}

规范

规范
WebRTC:浏览器中的实时通信
# dom-rtcicecandidate-address

浏览器兼容性