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

瀏覽器相容性