SlavSSoftPHP · JavaScript · Windows

Программы и технологии

Обновлено

Главная → Новости IT → Утечка локального IP-адреса через браузер с поддержкой WebRTC

Утечка локального IP-адреса через браузер с поддержкой WebRTC

В браузерах на основе Chromium и Firefox реализована поддержка технологии WebRTC для аудио- и видеочатов прямо из окна браузера. Кроме удобства, эта функция имеет неприятный побочный эффект.

В частности, WebRTC допускает отправку запросов к STUN-серверам, которые возвращают локальный и публичный IP-адрес пользователя. Такие запросы можно осуществлять скриптом, поэтому IP-адреса отображаются средствами JavaScript.

Запросы отправляются в обход стандартной процедуры XMLHttpRequest и не видны из консоли разработчика, их нельзя заблокировать плагинами вроде AdBlockPlus или Ghostery. Таким образом, эти запросы могут использовать, например, рекламодатели, для скрытного отслеживания пользователей.

На этой демо-странице ты увидишь свой собственный локальный и внешний IP.

Такой код работает в Firefox и Chrome. Его можно скопировать в консоль разработчика для тестирования.

//get the IP addresses associated with an account
function getIPs(callback){
    var ip_dups = {};
				 

//compatibility for firefox and chrome var RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; var mediaConstraints = { optional: [{RtpDataChannels: true}] };

//firefox already has a default stun server in about:config // media.peerconnection.default_iceservers = // [{"url": "stun:stun.services.mozilla.com"}] var servers = undefined;

//add same stun server for chrome if(window.webkitRTCPeerConnection) servers = {iceServers: [{urls: "stun:stun.services.mozilla.com"}]};

//construct a new RTCPeerConnection var pc = new RTCPeerConnection(servers, mediaConstraints);

//listen for candidate events pc.onicecandidate = function(ice){

//skip non-candidate events if(ice.candidate){

//match just the IP address var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/ var ip_addr = ip_regex.exec(ice.candidate.candidate)[1];

//remove duplicates if(ip_dups[ip_addr] === undefined) callback(ip_addr);

ip_dups[ip_addr] = true; } };

//create a bogus data channel pc.createDataChannel("");

//create an offer sdp pc.createOffer(function(result){

//trigger the stun server request pc.setLocalDescription(result, function(){}, function(){});

}, function(){}); }

//Test: Print the IP addresses into the console getIPs(function(ip){console.log(ip);});

Единственные расширения, которые блокируют такие запросы, — это расширения, полностью запрещающие выполнение скриптов, как NoScript для Firefox. Разумеется, в настройках браузерах тоже есть опция, чтобы запретить скрипты.

Прочитать полностью на сайте: Утечка локального IP-адреса через браузер с поддержкой WebRTC