RTCIceCandidate: address 属性
RTCIceCandidate 接口的只读 **address** 属性是一个字符串,提供了作为候选源的设备的 IP 地址。如果未另行指定,address 默认值为 null。
address 字段的值是从传递给 RTCIceCandidate() 构造函数的 candidateInfo options 对象设置的。你不能在 options 对象中直接指定 address 的值,但如果它的格式正确,它的值会自动从对象的 candidate a-line 中提取。
值
一个字符串,提供候选来自的 IP 地址。
注意:如果 port 是 null — 并且 port 被 用户代理 支持 — 将候选传递给 addIceCandidate() 会失败,并抛出 OperationError 异常。
安全注意事项
这里需要注意的是,虽然 WebRTC 不要求 RTCPeerConnection 上的两个对等方知道彼此的真实 IP 地址,但 RTCIceCandidate 上的 address 属性可以暴露比用户预期的更多的关于远程对等方来源的信息。IP 地址可用于推导有关远程设备位置、网络拓扑等方面的信息。它还可以用于 指纹识别目的。
候选 IP 地址总是通过 address 暴露给应用程序,而不怀好意的应用程序可能会潜在地向用户公开该地址。这可能在未经远程对等方同意的情况下发生。
在构建应用程序时,考虑到用户隐私和安全,可以选择将允许的候选限制为仅中继候选。这样做可以防止远程用户的地址被暴露,但会减少可供选择的可用候选池。要做到这一点,请使用符合 RTCPeerConnection.setConfiguration 中描述的 configuration 属性的对象来配置 ICE 代理的 ICE 传输策略,如下所示:
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 地址的禁止功能。
if (ipBanList.includes(candidate.address)) {
rejectCandidate(candidate);
} else {
acceptCandidate(candidate);
}
规范
| 规范 |
|---|
| WebRTC:浏览器中的实时通信 # dom-rtcicecandidate-address |
浏览器兼容性
加载中…