• XSS.stack #1 – первый литературный журнал от юзеров форума

Полная информация о посетителе сайта

lisa99

Мисс Марпл
Пользователь
Регистрация
07.02.2009
Сообщения
2 099
Решения
1
Реакции
902
Подскажите, плз..
где подробней написано и получше о получении инфы о каждом посетителе сайта
-айпи, юзерагент, ОС, разрешение экрана, referrer..и что еще?
- варианты подмены данных со стороны посетителя
и тп..
 
Благодарю =)
Думаю, что это не все...

Еще вопрос. А где лучше всего потестить себя ? Порекомендуйте, пожалуйста,
сайт /сервис определяющий как можно более полную инфу о посетителе....
 
А где лучше всего потестить себя ? Порекомендуйте, пожалуйста,
сайт /сервис определяющий как можно более полную инфу о посетителе....
На сервисах проверки прокси. Инфа о посетителе частично побочна)
Holmes/Who
BugTraq.ru ShowUser
CMyIP.com Зеркало
 
У меня тоже возник вопрос, http://servicevpn.net/who на этой странице видно какой DNS сервер использует посетитель, при использовании "прокси" это может разоблачить реальное местонахождения посетителя. Меня интересует как такое смогли реализовать, точно знаю ДНС вычисляют по запросу этого самого ДНС сервера.
 
ammok
Все очень просто используется следующая технология: для каждого вновь заходящего на страницу генерица случайным образом сабдомен и по этому сабдомену располгается скажем картинка так как резолвинг данного сабдомена будет уникальный можно узнать DNS сервер пользователя зашедшего на данную страницу ...

P.S. Вообще есть очень много способов идентификации все если перечислять слишком объемно получится, могу на эту тему статью написать если интересно ;)
 
могу на эту тему статью написать если интересно
ну конечно! ))
он еще спрашивает;)
 
Вот пока, мой небольшой кусок кода для fingerprint браузеров, однако он немного не актуал на текущий день, но все можно доработать .... )
Код:
function brw_check_ie( $user_agent ) {
	if( preg_match("/.*Microsoft Internet Explorer.*/i", trim($user_agent), $matches) )  {
  	return sprintf( 'MSIE 1.0' );
	}
	
	if( preg_match("/^Mozilla\/(\d+)\.(\d+)\s+\(compatible;\s+MSIE\s+(\d+)\.([\da-zA-Z]+).+\)\s*(.*)/i", trim($user_agent), $matches) )  {
  if( isset( $matches[3] ) && isset( $matches[4] ) ) {
  	return sprintf( 'MSIE %s.%s', $matches[3], $matches[4] );
  }
	}
	return null;
}

function brw_check_opera( $user_agent ) {
	if( preg_match("/^Opera\/(\d+)\.(\d+).*/i", trim($user_agent), $matches) )  {
  if( isset( $matches[1] ) && isset( $matches[2] ) ) {
  	return sprintf( 'Opera %s.%s', $matches[1], $matches[2] );
  }
	}

	if( preg_match("/^Mozilla.+\((.+)\)\s+Opera\s(\d+)\.(\d+).*/i", trim($user_agent), $matches) )  {
  if( isset( $matches[2] ) && isset( $matches[3] ) ) {
  	return sprintf( 'Opera %s.%s', $matches[2], $matches[3] );
  }
	}
	
	return null;
}

function brw_check_safari( $user_agent ) {
	if( preg_match("/^Mozilla.+Safari\/(.+)\s*/i", trim($user_agent), $matches) )  {
  if( isset( $matches[1] ) ) {
  	return sprintf( 'Safari %s', $matches[1] );
  }
	}	
	return null;
}

function brw_check_netscape( $user_agent ) { 
	if( preg_match("/^Mozilla.+\(.+\)\s+Gecko\/.+Netscape\/([\d\.]+).*/i", trim($user_agent), $matches) )  {
  if( isset( $matches[1] ) ) {
  	return sprintf( 'Netscape %s', $matches[1] );
  }
	}
	
	if( preg_match("/^Mozilla.+\(.+\)\s+Gecko\/.+Netscape6\/([\d\.]+).*/i", trim($user_agent), $matches) )  {
  if( isset( $matches[1] ) ) {
  	return sprintf( 'Netscape %s', $matches[1] );
  }
	}
	return null;	
}

function brw_check_seamonkey( $user_agent ) { 
	if( preg_match("/^Mozilla.+\(.+\)\s+Gecko\/.+SeaMonkey\/([\d\.]+).*/i", trim($user_agent), $matches) )  {
  if( isset( $matches[1] ) ) {
  	return sprintf( 'SeaMonkey %s', $matches[1] );
  }
	}	
	return null;	
}

function brw_check_firefox( $user_agent ) { 
	if( preg_match("/^Mozilla.+\((.+)\)\s+Gecko\/.+Firefox\/([\d\.]+).*\s*/i", trim($user_agent), $matches) )  {
  if( isset( $matches[2] ) ) {
  	return sprintf( 'Firefox %s', $matches[2] );
  }
	}

	if( preg_match("/^Mozilla.+\((.+)\)\s+Gecko\/.+Phoenix\/(.+)\s*/i", trim($user_agent), $matches) )  {
  if( isset( $matches[2] ) ) {
  	return sprintf( 'Firefox %s', $matches[2] );
  }
	}
	
	if( preg_match("/^Mozilla.+\((.+)\)\s+Gecko\/.+Firebird\/(.+)\s*/i", trim($user_agent), $matches) )  {
  if( isset( $matches[2] ) ) {
  	return sprintf( 'Firefox %s', $matches[2] );
  }
	}
	
	if( preg_match("/^Mozilla.+\((.+)\)\s+Gecko\/.+GranParadiso\/(.+)\s*/i", trim($user_agent), $matches) )  {
  if( isset( $matches[2] ) ) {
  	return sprintf( 'Firefox %s', $matches[2] );
  }
	}
	
	return null;	
}


function brw_check_camino( $user_agent ) { 
	if( preg_match("/^Mozilla.+\(.+\)\s+Gecko\/.+Camino\/(.+)/i", trim($user_agent), $matches) )  {
  if( isset( $matches[1] ) ) {
  	return sprintf( 'Camino %s', $matches[1] );
  }
	}	
	return null;	
}

function brw_check_konqueror( $user_agent ) {
	//"Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko)"
	if( preg_match("/^Mozilla\/.+\(compatible;\s+Konqueror\/(.+);.+\).*/i", trim($user_agent), $matches) )  {
  if( isset( $matches[1] ) ) {
  	return sprintf( 'Konqueror %s', $matches[1] );
  }
	}
	return null;
}

function brw_check_mozilla( $user_agent ) { 
	if( preg_match("/^Mozilla\/(\d+)\.(\d+).*/i", trim($user_agent), $matches) )  {
  if( isset( $matches[1] ) && isset( $matches[2] ) ) {
  	return sprintf( 'Mozilla %s.%s', $matches[1], $matches[2] );
  }
	}	
	return null;	
}

function browser_check( $user_agent ) {	
	if( ($result = brw_check_opera( $user_agent )) != null ) {
  return $result;
	}

	if( ($result = brw_check_safari( $user_agent )) != null ) {
  return $result;
	}
  
	if( ($result = brw_check_firefox( $user_agent )) != null ) {
  return $result;
	}	
	
	if( ($result = brw_check_ie( $user_agent )) != null ) {
  return $result;
	}
	
	if( ($result = brw_check_netscape( $user_agent )) != null ) {
  return $result;
	}
	
	if( ($result = brw_check_seamonkey( $user_agent )) != null ) {
  return $result;
	}
	
	if( ($result = brw_check_camino( $user_agent )) != null ) {
  return $result;
	}
	
	if( ($result = brw_check_konqueror( $user_agent )) != null ) {
  return $result;
	}

	if( ($result = brw_check_mozilla( $user_agent )) != null ) {
  return $result;
	}	
	return 'Unknown';
}
 
хм..разве это fingerprint-браузеры?
т.е...речь идет об отпечатках в протоколе ssl ? а браузеры то все те же
 
финджерпринт это техника обнаружения по отпечаткам , можно так и браузеры распозновать и сервера, и тд.

в данном случаи по юзер-агентам выясняется тип браузера и версия ... можно так же делать попытки определения ОС:
Код:
<?php
/**
 * Вспомогательный класс для распознания
 */
class FingerPrint  {
	/**
  * Метод возвращает данные о браузере
  */
	public static function CheckClient( ClientEntity& $clntEntity ) {
  
  if( ($operaResult  = self::CheckOpera( $clntEntity->userAgent )) != null ) {
  	$clntEntity->browserName = 'Opera';
  	$clntEntity->browserData = $operaResult;
  	$clntEntity->browserVersion = $operaResult[1].'.'.$operaResult[2];
  	
  	self::CheckOperaPlatform( $operaResult, $clntEntity );
  	return true;
  }
  
  if( ($mozillaResult  = self::CheckFirefox( $clntEntity->userAgent )) != null ) {
  	$clntEntity->browserName = 'Firefox';
  	$clntEntity->browserData = $mozillaResult;
  	$clntEntity->browserVersion = $mozillaResult[11];
  	
  	self::CheckFirefoxPlatform( $mozillaResult, $clntEntity );
  	return true;
  }
  
  if( ($msieResult  = self::CheckMSIE( $clntEntity->userAgent )) != null ) {
  	$clntEntity->browserName = 'MSIE';
  	$clntEntity->browserData = $msieResult;
  	$clntEntity->browserVersion = $msieResult[3].'.'.$msieResult[4];
  	
  	self::CheckMSIEPlatform( $msieResult, $clntEntity );
  	return true;
  }
  return false;
	}
	
	private static function CheckOpera( $userAgent ) 
	{	
  $tmp_array = array();
  // [0] => User Agent string
  // [1] => Opera Major Version
  // [2] => Opera Minor Version
  // [3] => Sub Platform 
  // [4] => Language
  $returnValue = array();
  
  if( preg_match('/^Opera\/(\d+)\.(\d+)\s+\(\s*(.+)\s*;\s*(.+)\s*;\s*(.+);{0,1}\s*(.*)\s*\)\s*$/si', $userAgent, $tmp_array) ) {
  	$returnValue[] = $tmp_array[0];
  	$returnValue[] = $tmp_array[1];
  	$returnValue[] = $tmp_array[2];
  	$returnValue[] = $tmp_array[3];
  	$returnValue[] = $tmp_array[5];
  	return $returnValue;
  }  
  
  if( preg_match('/^Mozilla\/(\d+)\.([\d]+)\s+.+tible;\s*MSIE\s+(\d+)\.([\da-zA-Z]+)\s*;\s*(.*);{0,1}(Win[\da-zA-z\.\s]+)[\s]*[;]{0,1}\s*(.*)\s*\)\s*Opera\s+(\d+)\.(\d+).*\s*$/si', $userAgent, $tmp_array) ) {
  	$returnValue[] = $tmp_array[0];
  	$returnValue[] = $tmp_array[8];
  	$returnValue[] = $tmp_array[9];
  	$returnValue[] = $tmp_array[6];
  	$returnValue[] = $tmp_array[7];
  	return $returnValue;
  }	
  
  if( preg_match('/^Mozilla\/(\d+)\.(\d+)\s+\(\s*(.+)\s*;\s*(.+)\s*;\s*([a-zA-Z\-]+)\s*;\s*rv:([\.\da-zA-Z]+)\s*;{0,1}\s*(.*)\s*\)\s+Gecko\/(\d+)\s+.+\s+Opera\s+(\d+)\.(\d+)\s*$/si', $userAgent, $tmp_array) ) {
  	$returnValue[] = $tmp_array[0];
  	$returnValue[] = $tmp_array[9];
  	$returnValue[] = $tmp_array[10];
  	$returnValue[] = $tmp_array[3];
  	$returnValue[] = $tmp_array[5];
  	return $returnValue;
  }
    
  return null;
	}
	
	private static function CheckOperaPlatform(  $operaResult , ClientEntity& $clntEntity ) {
  $clntEntity->clntPlatform = $operaResult[3];
	}
	
	
	private static function CheckMSIE( $userAgent ) 
	{	
  $tmp_array = array();
  	
  //--------------------------------------------------------------------
  //MSIE V.1.0
  if(preg_match('/microsoft.*internet.*explorer/si', $userAgent, $tmp_array)) {
  	$tmp_array[0] = $userAgent;
  	$tmp_array[1] = 0;
  	$tmp_array[2] = 0;
  	$tmp_array[3] = 1;
  	$tmp_array[4] = 0;
  	$tmp_array[5] = null;
  	$tmp_array[6] = 'win32';
  	$tmp_array[6] = null;
  	$tmp_array[6] = null;
  	return $tmp_array;
  }
  
  // [0] => User Agent string
  // [1] => Mozilla Major Version
  // [2] => Mozilla Minor Version
  // [3] => IE Major Version
  // [4] => IE Minor Version
  // [5] => Provider MAY BE NULL
  // [6] => Platform 
  // [7] => List extension, semicolon separate, MAY BE NULL
  // [8] => Addition MAY BE NULL
  
  //Mozilla/MozVer (compatible; MSIE IEVer[; Provider]; Platform[; Extension]*) [Addition]
  if( preg_match('/^Mozilla\/(\d+)\.([\d]+)\s+.+tible;\s*MSIE\s+(\d+)\.([\da-zA-Z]+)\s*;\s*(.*);{0,1}(Win[\da-zA-z\.\s]+)[\s]*[;]{0,1}\s*(.*)\s*\)\s*(.*)\s*$/si', $userAgent, $tmp_array) ) {
  	return $tmp_array;
  }
  return null;
	}
	
	private static function CheckMSIEPlatform(  $msieResult , ClientEntity& $clntEntity ) {
  $clntEntity->clntPlatform = $msieResult[6];
  if( isset( $msieResult[7] ) && !isset( $clntEntity->csdVersion ) ) {
  	$tmp_array = array();
  	if( $msieResult[3] != 7 && preg_match('/^.*SV(\d+).*$/si', $msieResult[7], $tmp_array) ) {
    if( $tmp_array[1] == 1 && $msieResult[6] == "Windows NT 5.1" ) {
    	$clntEntity->csdVersion= 'SP2';
    } else {
    	$clntEntity->csdVersion= 'SP'.trim($tmp_array[1]);
    }
  	} else if ( $msieResult[3] == 7 ) { 
    	$clntEntity->csdVersion= 'SP2';
  	}
  }
	}
	
	private static function CheckFirefox( $userAgent ) 
	{	
  $tmp_array = array();
  if( ($mozillaResult  = self::CheckMozilla( $userAgent )) != null && isset($mozillaResult[10])) {
  	if( preg_match('/^Firefox\/(.+)$/si', $mozillaResult[10], $tmp_array ) && isset($tmp_array[1]) ) {
    $mozillaResult[] = $tmp_array[1];
    return $mozillaResult;
  	}	
  }
  return null;
	}

	private static function CheckFirefoxPlatform(  $firefoxResult , ClientEntity& $clntEntity ) {
  $clntEntity->clntPlatform = $firefoxResult[5];
	}
	
	private static function CheckMozilla( $userAgent ) 
	{	
  $tmp_array = array();
  	
  // [0] => User Agent string
  // [1] => Mozilla Major Version
  // [2] => Mozilla Minor Version
  // [3] => Platform
  // [4] => Security Mode
  // [5] => Sub Platform
  // [6] => Language
  // [7] => 1.8.1.3 Revision version e.g. m18, 1.0rc3, 1.7.8, 1.8a2 
  // [8] => List extension, semicolon separate, MAY BE NULL
  // [9] => Gecko (layout engine) compilation date, in the format YYYYMMDD 
  // [10] => Product Name/Version MAY BE NULL
  
  //Mozilla/MozVer (Platform; Security; SubPlatform; Language; rv:Revision[; Extension]*) Gecko/GeckVer [Product/ProdVer]
  if( preg_match('/^Mozilla\/(\d+)\.(\d+)\s+\(\s*(.+)\s*;\s*(.+)\s*;\s*(.+)\s*;\s*([a-zA-Z\-]+)\s*;\s*rv:([\.\da-zA-Z]+)\s*;{0,1}\s*(.*)\s*\)\s+Gecko\/(\d+)\s*(.*)\s*$/si', $userAgent, $tmp_array) ) {
  	return $tmp_array;
  }  
  return null;
	}
}

?>
 
финджерпринт это техника обнаружения по отпечаткам
ну да..
А я уж подумала новые типы браузеров...пробежалась по коду, таки нет =)

Но. Смысл твоего класса? Вычислить оригинального посетителя?
А обратная задача? Спрятаться..и наглухо? И без палева...
Я знаю, что эти задачи решены.
 
Ну тебе же было интересно как получается инфа вот это одна из методик ) А вообще что бы наглухо недостачно одноуровневой защиты ввиде одно лишь ХТТП прокси поскольку надо скрыть достаточно много инфы:

1) Сокрытие сетевой информации - как правило включает в себя сокрытие реального IP адреса и DNS сервера;
2) Сокрытие информации о системе - как правило включает в себя сокрытие информации о браузере, ос, установленых расширениях;
3) Сокрытие дополнительной информаци - как правило включает в себя сокрытие рефера, индивидуальных настроек (разрешение, язык, и тд).

Для минмимальной защиты все же лутше использовать VPN + SOCKS + VM;
Причем виртуальная машина должна быть сконфигурена как nat и если у Вас ОС Windows на хостовой машине , то файрволом для процесса vmnat.exe должно быть настроено правило, что бы он не мог ни куда больше конектиться акроме IP адреса VPN сервера...
 
да-да-да..
Чем дальше в лес..
Спасибо, конечно, есть смысл финансовый копаться.
А TOR этой проблемы не решает, кстати =)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Зачем изобретать велосипед на phpclasses.org есть класс по всем браузерам определения и распарсивания, сделаный по стандартам по которым и делают заголовки в браузерах.
 
Это давно написано еще до появления классов на phpclasses.org, да приводилось лишь в качестве примера ) Кстати если присмотреться то в последнем куске тоже основано все на стандартах формирования UserAgent, хотя уже не актуал (
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх