САМОУЧИТЕЛЬ PHP 4



         

Корректный перевод IP-адреса в доменное имя - часть 2


// Аналог функции gethostbyaddr(), но всегда проверяет,

// не подменил ли злоумышленник по адресу $ip имя своего

// хоста на чужое. В последнем случае просто возвращает false.

function safe_gethostbyaddr($ip)

{ // Получаем предполагаемое имя

  $host=gethostbyaddr($ip);

  // Адреса не существует? Не фатально — вернем то, что есть.

  if($host==$ip) return $host;

  // Теперь спрашиваем $host, кто он такой.

  $check_ips=gethostbynamel($host);

  // Есть ли среди адресов, которые он вернул, затребованный?

  foreach($check_ips as $check_ip) {

    // Если нашли, то $host достоверен — возвращаем его.

    if($ip==$check_ip) return $host;

  }

  // Иначе, если ни один адрес не совпал, выходим

  return false;

}

// Теперь посмотрим, что из себя представляет наш адрес...

echo safe_gethostbyaddr("195.84.12.34");

?>

Вот теперь все будет работать корректно. Однако за все приходится платить: safe_gethostbyaddr()

требует гораздо больших затрат времени, чем gethostbyaddr(), потому что нам приходится дополнительно обращаться еще как минимум к одной машине. Если безопасность для вас важнее, чем какие-то пара секунд простоя, используйте safe_gethostbyaddr().




Содержание  Назад  Вперед