admin

Тра 202012
 

Защита asterisk от взлома

Вот этой статьи мне как раз немного не хватало в разделе про Asterisk. Набрел на нее случайно и решил просто добавить в свою коллекцию.

Как я уже как-то раз рассказывал, довелось мне вывести неподготовленный астериск в интернет и забыть об этом..
Буквально через пару недель мне об этом напомнили счета от SIP-провайдера, где красовались значительные суммы.
Мне еще повезло, что провайдер заблокировал аккаунт по достижении лимита кредита и мы не ушли в глубокий и далекий… минус.
Защита asterisk от взлома Во избежание повторения проблем, я опишу примерный список мероприятий, которые я с тех пор провожу над asterisk перед выводом его в интернет.

В интернете гуляет много историй о взломах астериска и последующей кары от оператора. Где-то лежала байка о некой маленькой компании в Австралии, которую угораздило залететь на $15000-20000.
Думаю никто не хочет оказаться в подобной ситуации. Гораздо лучше, не дожидаясь беды, провести некоторый комплекс мероприятий, который значительно сократит количество вариантов взлома и минимизирует опасность.

Нестандартный порт вместо 5060
Если имеется техническая возможность – ОБЯЗАТЕЛЬНО меняйте стандартный порт 5060 на любой другой. Чем он будет больше непохож на стандартный – тем лучше. Злоумышленники очень быстро найдут ваш астериск обычным сканированием портов по диапазону адресов. Это произойдет очень быстро – первые попытки подбора пароля у меня обнаружились уже через 3 дня после вывода asterisk в интернет.
Настройка порта производится в файле sip.conf в секции [general]: bindport=5060 => bindport=5172 После таких действий, количество подборщиков уменьшится практически до нуля.

Отключаем guest-звонки
Если у вас нет необходимости принимать звонки без регистрации, обязательно выключите следующую опцию в sip.conf:
allowguest=yes => allowguest=no ; Allow or reject guest calls (default is yes)

Отключаем оповещение о неверном пароле
Практически у всех существуют аккаунты asterisk вида 100, 200, 700 и т.п. По умолчанию астериск выдает одну ошибку о неверном пароле для существующего аккаунта и другую для несуществующего аккаунта. С помощью спец. софта для подбора паролей, злоумышленник может быстро перебрать все короткие номера и подбирать пароли только к существующим аккаунтам, которые ответили «неверный пароль». Чтобы препятствовать этому, меняем опцию в sip.conf:
alwaysauthreject = no => alwaysauthreject = yes
После такой настройки, астериск будет давать одинаковый отбой для любых неверных авторизаций.

Используем сложные пароли для аккаунтов
Любой пароль можно подобрать, вопрос только во времени. Поскольку настройка sip-устройств производится один раз и надолго, не скупитесь на сложные пароли. Для себя я использую длинные пароли с комбинациями больших и маленьких букв + цифр такого вида:
1 secret=f64GCD74ssdZ42
ОБЯЗАТЕЛЬНО уберите все пароли совпадающие с логинами. Это – первые пароли, используемые для паролей.

Используем deny/permit для аккаунтов
Обязательный момент! Указываем для всех аккаунтов, которые не подразумевают подключение из интернета следующие строки:
[100]

deny=0.0.0.0/0.0.0.0
permit=10.1.1.1/24
permit=10.1.2.1/24
Где 10.1.1.1,10.1.2.1 – диапазоны локальных адресов, с которых будет производится подключение. Подключения с других адресов asterisk принимать не будет.

Устанавливаем лимит звонков В случае взлома, для уменьшения затрат, рекомендую установить лимит одновременных звонков для аккаунтов в 1, чтобы злоумышленник не мог одновременно звонить на много направлений и, тем самым, быстрее расходовать ваши деньги.
[100]
call-limit=1 …

Не используем default-экстеншн без необходимости Не надо оно нам. Защита asterisk от взлома Все, что должно быть в дефолте:
[default]
exten => _X.,1,Hangup

Не делаем одно универсальное правило для всех звонков Скажем нет правилам вида:
exten =>
_X.,1,Dial(SIP/${EXTEN}@operator)

Прописываем четко все необходимые комбинации номеров, передаваемых оператору. Если нет необходимости использовать международную связь – не описывайте правила для нее вообще. Практически все случаи взломов используются для звонков заграницу.
;Экстренные службы
exten => _0X,1,
Dial(SIP/${EXTEN}@operator)
exten => _0X,n, Hangup
;Москва
exten => _8495XXXXXXX,1,
Dial(SIP/${EXTEN}@operator)
exten => _8495XXXXXXX,n, Hangup
exten => _8499XXXXXXX,1,
Dial(SIP/${EXTEN}@operator)
exten => _8499XXXXXXX,n, Hangup
exten => _XXXXXXX,1,
Dial(SIP/${EXTEN}@operator)
exten => _XXXXXXX,n, Hangup
;Межгород Россия/Мобильные
exten => _8XXXXXXXXXX,1,
Dial(SIP/${EXTEN}@operator)
exten => _8XXXXXXXXXX,n, Hangup

Источник: http://plutonit.ru/view_post.php?id=238

Лют 192012
 

Facebook for Websites

Facebook Platform позволяет ваш сайт сделать более социальным. Вы можете использовать социальные плагины. Например кнопка входа и регистрации позволяет упростить регистрацию и вход на ваш сайт. API позволяет получить доступ к полному пакету данных данного пользователя, что позволяет создать для ваших клиентов простоту управления.

Social Plugins

Social Plugins являются самым простым способом начать работу с платформой Facebook. Встраиваемые плагины социальных функций, которые могут быть интегрированы в ваш сайт с HTML.

Наиболее важной социальной Plugin есть кнопка, которая позволяет пользователям обмениваться страницы со своими друзьями через клик. Вы можете добавить кнопку на любую страницу с помощью iframe tag:

<html>
    <head>
      <title>My Great Web page</title>
    </head>
    <body>
       <iframe src="http://www.facebook.com/plugins/like.php?href=YOUR_URL"
        scrolling="no" frameborder="0"
        style="border:none; width:450px; height:80px"></iframe>
    </body>
 </html>

Есть несколько вариантов, как кнопки, в том числе возможность включать имена и профиль фотографии друзей, которые также понравились страницы. Здесь, как и кнопки для сайта Facebook Разработчики:

После того как вы включили кнопки на вашем сайте, вы можете воспользоваться другими социальными плагинами, чтобы взаимодействия с пользователем на своем сайте было более удобно.
Переведено из источника:
http://developers.facebook.com/docs/guides/web/#login

Лют 192012
 

Использование MooTools 1.2 для Drag, Drop, Sort, Save с примером

Мои клиенты любят контролировать содержимое своего сайта, поэтому я создаю функционал для этого. Для лучшего удобства администрирования я использую функции Drag and Drop Menu, с возможностью записи в базу данных. Данная функция помогает сортировать список. Это очень удобно и экономит время, так как не требуется перегружать полностью страницу.

Вот один из способов реализовать данную функцию с помощью JavaScript библиотеки MooTools.

The MySQL Table

id title sort_order
1 Article 1 1
2 Article 2 2
3 Article 3 3
4 Article 4 4
5 Article 5 5
6 Article 6 6

 

The PHP / XHTML

<?php
<div id="message-box"><?php echo $message; ?> Waiting for sortation submission...</div>

<form id="dd-form" action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post">
<p><input type="checkbox" value="1" name="auto_submit" id="auto_submit" <?php if($_POST['auto_submit']) { echo 'checked="checked"'; } ?> /> <label for="auto_submit">Automatically submit on drop event</label></p>

<ul id="sortable-list">
  <?php 
    $sort_order = array();
    while($item = mysql_fetch_assoc($result))
    {
      echo '<li class="sortme" alt="',$item['id'],'">',$item['title'],'</li>';
      $sort_order[] = $item['sort_order'];
    }
  ?>
</ul>
<br />
<input type="hidden" name="sort_order" id="sort_order" value="<?php echo implode($sort_order,'|'); ?>" />
<input type="submit" name="do_submit" value="Submit Sortation" class="button" />
</form>
<?php } else { ?>

  <p>Sorry!  There are no items in the system.</p>

<?php } ?>

 

The CSS

#sortable-list {
padding:0;
}
li.sortme {
padding:4px 8px;
color:#000;
cursor:move;
list-style:none;
width:500px;
background:#ddd;
margin:10px 0;
border:1px solid #999;
}

#message-box {
background:#fffea1;
border:2px solid #fc0;
padding:4px 8px;
margin:0 0 14px 0;
width:500px;
}

 

The MooTools JavaScript

/* when the DOM is ready */
/* create sortables */
  var sb = new Sortables('sortable-list', {
    /* set options */
    clone:true,
    revert: true,
    /* initialization stuff here */
    initialize: function() { 

    },
    /* once an item is selected */
    onStart: function(el) { 
      el.setStyle('background','#add8e6');
    },
    /* when a drag is complete */
    onComplete: function(el) {
      el.setStyle('background','#ddd');
      //build a string of the order
      var sort_order = '';
      $$('#sortable-list li').each(function(li) { sort_order = sort_order +  li.get('alt')  + '|'; });
      $('sort_order').value = sort_order;

      //autosubmit if the checkbox says to
      if($('auto_submit').checked) {
        //do an ajax request
        var req = new Request({
          url:'<!--?php echo $_SERVER['PHP_SELF']; ?-->',
          method:'post',
          autoCancel:true,
          data:'sort_order=' + sort_order + '&ajax=' + $('auto_submit').checked + '&do_submit=1&byajax=1',
          onRequest: function() {
            $('message-box').set('text','Updating the sort order in the database.');
          },
          onSuccess: function() {
            $('message-box').set('text','Database has been updated.');
          }
        }).send();
      }
    }
  });
});

 

The “Header” PHP / MySQL

/* on form submission */
if(isset($_POST['do_submit'])) 
{
  /* split the value of the sortation */
  $ids = explode('|',$_POST['sort_order']);

  /* run the update query for each id */
  foreach($ids as $index=>$id)
  {
    if($id != '')
    {
      $query = 'UPDATE test_table SET sort_order = '.$index.' WHERE id = '.$id;
      $result = mysql_query($query,$connection) or die(mysql_error().': '.$query);
    }
  }

  /* now what? */
  if($_POST['byajax']) { die(); } else { $message = 'Sortation has been saved.'; }
}

Я считаю, что на сегодняшний день такой способ сортировки является самым быстрым, и современным.

Переведено из источника:
http://davidwalsh.name/mootools-drag-drop

Лют 172012
 

Таблица специальных символов HTML XHTML

Некоторые символы, введенные в HTML документ будут интерпретироваться не так, как задумал автор. Это, например, символы “<” и “>”, используемые для указания тегов.

В этих случаях можно вводить нужные символы с помощью специальных кодов. Коды начинаются с символа “амперсанд”(&). За ним следует название символа либо его числовой код в десятичной или шестнадцатеричной системе. Завершает код символ “точка с запятой”(;).

В спецификации HTML указано большое количество спецсимволов, но только некоторые из них используются. Наиболее часто используемые спецсимволы приведены в таблице:

Имя Код Вид Описание
&quot; &#34; двойная кавычка
&amp; &#38; & амперсанд
&lt; &#60; < знак ‘меньше’
&gt; &#62; > знак ‘больше’
&nbsp; &#160; неразрывный пробел
&iexcl; &#161; ¡ перевернутый восклицательный знак
&cent; &#162; ¢ цент
&pound; &#163; £ фунт стерлингов
&curren; &#164; ¤ денежная единица
&yen; &#165; ¥ иена или юань
&brvbar; &#166; ¦ разорванная вертикальная черта
&sect; &#167; § параграф
&uml; &#168; ¨ умляут
&copy; &#169; © знак copyright
&ordf; &#170; ª женский порядковый числитель
&laquo; &#171; « левая двойная угловая скобка
&not; &#172; ¬ знак отрицания
&shy; &#173; место возможного переноса
&reg; &#174; ® знак зарегистрированной торговой марки
&macr; &#175; ¯ верхняя горизонтальная черта
&deg; &#176; ° градус
&plusmn; &#177; ± плюс-минус
&sup2; &#178; ² “в квадрате”
&sup3; &#179; ³ “в кубе”
&acute; &#180; ´ знак ударения
&micro; &#181; µ микро
&para; &#182; символ параграфа
&middot; &#183; · точка
&cedil; &#184; ¸ седиль (орфографический знак)
&sup1; &#185; ¹ верхний индекс ‘один’
&ordm; &#186; º мужской порядковый числитель
&raquo; &#187; » правая двойная угловая скобка
&frac14; &#188; ¼ одна четвертая
&frac12; &#189; ½ одна вторая
&frac34; &#190; ¾ три четвертых
&iquest; &#191; ¿ перевернутый вопросительный знак
&Agrave; &#192; À латинская заглавная А с тупым ударением
&Aacute; &#193; Á латинская заглавная А с острым ударением
&Acirc; &#194; Â латинская заглавная А с диакритическим знаком над гласной
&Atilde; &#195; Ã латинская заглавная А с тильдой
&Auml; &#196; Ä латинская заглавная А с двумя точками
&Aring; &#197; Å латинская заглавная А с верхним кружком
&AElig; &#198; Æ латинские заглавные символы AE вместе
&Ccedil; &#199; Ç латинская заглавная C с седилем
&Egrave; &#200; È латинская заглавная E с тупым ударением
&Eacute; &#201; É латинская заглавная E с острым ударением
&Ecirc; &#202; Ê латинская заглавная E с диакритическим знаком над гласной
&Euml; &#203; Ë латинская заглавная E с двумя точками
&Igrave; &#204; Ì латинская заглавная I с тупым ударением
&Iacute; &#205; Í латинская заглавная I с острым ударением
&Icirc; &#206; Î латинская заглавная I с диакритическим знаком над гласной
&Iuml; &#207; Ï латинская заглавная I с двумя точками
&ETH; &#208; Ð латинская заглавная D с черточкой
&Ntilde; &#209; Ñ латинская заглавная N с тильдой
&Ograve; &#210; Ò латинская заглавная O с тупым ударением
&Oacute; &#211; Ó латинская заглавная O с острым ударением
&Ocirc; &#212; Ô латинская заглавная O с диакритическим знаком над гласной
&Otilde; &#213; Õ латинская заглавная O с тильдой
&Ouml; &#214; Ö латинская заглавная O с двумя точками
&times; &#215; × знак умножения
&Oslash; &#216; Ø латинская заглавная O со штрихом
&Ugrave; &#217; Ù латинская заглавная U с тупым ударением
&Uacute; &#218; Ú латинская заглавная U с острым ударением
&Ucirc; &#219; Û латинская заглавная U с диакритическим знаком
&Uuml; &#220; Ü латинская заглавная U с двумя точками
&Yacute; &#221; Ý латинская заглавная Y с острым ударением
&THORN; &#222; Þ латинская заглавная THORN
&agrave; &#224; à латинская строчная a с тупым ударением
&aacute; &##225; á латинская строчная a с острым ударением
&acirc; &##226; â латинская строчная a с диакритическим знаком
&atilde; &#227; ã латинская строчная a с тильдой
&auml; &#228; ä латинская строчная a с двумя точками
&aring; &#229; å латинская строчная a с верхним кружком
&aelig; &#230; æ латинская строчные буквы ae
&ccedil; &#231; ç латинская строчная c с седилем
&egrave; &#232; è латинская строчная e с тупым ударением
&eacute; &#233; é латинская строчная e с острым ударением
&ecirc; &#234; ê латинская строчная e с диакритическим знаком
&euml; &#235; ë латинская строчная e с двумя точками
&igrave; &#236; ì латинская строчная I с тупым ударением
&iacute; &#237; í латинская строчная I с острым ударением
&icirc; &#238; î латинская строчная I с диакритическим знаком
&iuml; &#239; ï латинская строчная I с двумя точками
&eth; &#240; ð латинская строчные символы eth
&ntilde; &#241; ñ латинская строчная N с тильдой
&ograve; &#242; ò латинская строчная O с тупым ударением
&oacute; &#243; ó латинская строчная O с острым ударением
&ocirc; &#244; ô латинская строчная O с диакритическим знаком
&otilde; &#245; õ латинская строчная I с тильдой
&ouml; &#246; ö латинская строчная I с двумя точками
&divide; &#247; ÷ знак деления
&oslash; &#248; ø латинская строчная O со штрихом
&ugrave; &#249; ù латинская строчная U с тупым ударением
&uacute; &#250; ú латинская строчная U с острым ударением
&ucirc; &#251; û латинская строчная U с диакритическим знаком
&uuml; &#252; ü латинская строчная U с двумя точками
&yacute; &#253; ý латинская строчная Y с острым ударением
&thorn; &#254; þ латинская строчная thorn
&yuml; &#255; ÿ латинская строчная Y с двумя точками
&fnof; &#402; ; знак функции
Символы для букв
&circ; &#710; ; диакритический знак над гласной
&tilde; &#732; ; тильда
Греческие буквы
&Alpha; &#913; ; заглавная альфа
&Beta; &#914; ; заглавная бета
&Gamma; &#915; ; заглавная гамма
&Delta; &#916; ; заглавная дельта
&Epsilon; &#917; ; заглавная эпсилон
&Zeta; &#918; ; заглавная дзета
&Eta; &#919; ; заглавная эта
&Theta; &#920; ; заглавная тета
&Iota; &#921; ; заглавная иота
&Kappa; &#922; ; заглавная каппа
&Lambda; &#923; ; заглавная лямбда
&Mu; &#924; ; заглавная мю
&Nu; &#925; ; заглавная ню
&Xi; &#926; ; заглавная кси
&Omicron; &#927; ; заглавная омикрон
&Pi; &#928; ; заглавная пи
&Rho; &#929; ; заглавная ро
&Sigma; &#931; ; заглавная сигма
&Tau; &#932; ; заглавная тау
&Upsilon; &#933; ; заглавная ипсилон
&Phi; &#934; ; заглавная фи
&Chi; &#935; ; заглавная хи
&Psi; &#936; ; заглавная пси
&Omega; &#937; ; заглавная омега
&alpha; &#945; ; строчная альфа
&beta; &#946; ; строчная бета
&gamma; &#947; ; строчная гамма
&delta; &#948; ; строчная дельта
&epsilon; &#949; ; строчная эпсилон
&zeta; &#950; ; строчная дзета
&eta; &#951; ; строчная эта
&theta; &#952; ; строчная тета
&iota; &#953; ; строчная иота
&kappa; &#954; ; строчная каппа
&lambda; &#955; ; строчная лямбда
&mu; &#956; ; строчная мю
&nu; &#957; ; строчная ню
&xi; &#958; ; строчная кси
&omicron; &#959; ; строчная омикрон
&pi; &#960; ; строчная пи
&rho; &#961; ; строчная ро
&sigmaf; &#962; ; строчная сигма (final)
&sigma; &#963; ; строчная сигма
&tau; &#964; ; строчная тау
&upsilon; &#965; ; строчная ипсилон
&phi; &#966; ; строчная фи
&chi; &#967; ; строчная хи
&psi; &#968; ; строчная пси
&omega; &#969; ; строчная омега
Общая пунктуация
&ndash; &#8211; тире
&mdash; &#8212; длинное тире
&lsquo; &#8216; левая одиночная кавычка
&rsquo; &#8217; правая одиночная кавычка
&sbquo; &#8218; нижняя одиночная кавычка
&ldquo; &#8220; левая двойная кавычка
&rdquo; &#8221; правая двойная кавычка
&bdquo; &#8222; нижняя двойная кавычка
Прочие символы
&dagger; &#8224 латинский крест
&Dagger; &#8225 двойной крест
&bull; &#8226; маленький черный кружок
&hellip; &#8230; многоточие …
&#8240; знак промилле (процент с дополнительным ноликом)
&prime; &#8242; ; одиночный штрих – минуты
&Prime; &#8243; ; двойной штрих – секунды
&oline; &#8254; ; надчеркивание
&frasl; &#8260; ; косая дробная черта
&euro; &#8364; ? евро
&#8470; знак номера
&trade; &#8482; знак торговой марки
&loz; &#9674 ; ромб
&#9675 ; круг
Стрелки
&larr; &#8592; ; стрелка влево
&uarr; &#8593; ; стрелка вверх
&rarr; &#8594; ; стрелка вправо
&darr; &#8595; ; стрелка вниз
&harr; &#8596; ; стрелка влево-вправо
&#8597; ; стрелка вверх-вниз
Масти
&spades; &#9824; ; знак масти ‘пики’
&clubs; &#9827; ; знак масти ‘трефы’
&hearts; &#9829; ; знак масти ‘червы’
&diams; &#9830; ; знак масти ‘бубны’
Лют 172012
 

Работа с переменной $_SERVER

$_SERVER -- ($HTTP_SERVER_VARS [устаревшее]) — Информация о сервере и среде исполнения
   Переменная $_SERVER - это массив, содержащий информацию, такую как заголовки, пути и местоположения скриптов. Записи в этом массиве создаются веб-сервером. Нет гарантии, что каждый веб-сервер предоставит любую из них; сервер может опустить некоторые из них или предоставить другие, не указанные здесь.
   Переменная $HTTP_SERVER_VARS содержит ту же начальную информацию, но она не суперглобальная. (Заметьте, что $HTTP_SERVER_VARS и $_SERVER являются разными переменными, так что PHP обрабатывает их соответственно)
'PHP_SELF' - Имя файла скрипта, который сейчас выполняется, относительно корня документов. Например,$_SERVER['PHP_SELF'] в скрипте по адресу http://example.com/test.php/foo.bar будет /test.php/foo.bar. Константа __FILE__ содержит полный путь и имя файла текущего (то есть подключенного) файла. Если PHP запущен в командной строке, эта переменная содержит имя скрипта, начиная с PHP 4.3.0. Раньше она была недоступна.
'argv' - Массив агрументов, переданных скрипту. Когда скрипт запущен в командой строке, это дает C-подобный доступ к параметрам командной строки. Когда вызывается через метод GET, этот массив будет содержать строку запроса.
'argc' - Содержит количество параметров, переданных скрипту (если запуск произведен в командной строке).
'GATEWAY_INTERFACE' - Содержит используемую сервером версию спецификации CGI; к примеру'CGI/1.1'.
'SERVER_ADDR' - IP адрес сервера, на котором выполняется текущий скрипт.
'SERVER_NAME' - Имя хоста, на котором выполняется текущий скрипт. Если скрипт выполняется на виртуальном хосте, здесь будет содержатся имя, определенное для этого виртуального хоста.
'SERVER_SOFTWARE' - Строка идентификации сервера, указанная в заголовках, когда происходит ответ на запрос.
'SERVER_PROTOCOL' - Имя и версия информационного протокола, через который была запрошена страница; к примеру 'HTTP/1.0';
'REQUEST_METHOD' - Какой метод был использован для запроса страницы; к примеру 'GET', 'HEAD', 'POST', 'PUT'. Замечание: PHP скрипт завершается после посылки заголовков (тоесть после того, как осуществляет любой вывод без буферизации вывода), если запрос был осуществлен методом HEAD.
'REQUEST_TIME' - Временная метка начала запроса. Доступна, начиная с PHP 5.1.0. Начиная с PHP 5.4.0, имеет тип float с указанием микросекунд.
'QUERY_STRING' - Строка запросов, если есть, с помощью которой была получена страница.
'DOCUMENT_ROOT' - Директория корня документов, в которой выполняется текущий скрипт, в точности та, которая указана в конфигурационном файле сервера.
'HTTP_ACCEPT' - Содержимое заголовка Accept: из текущего запроса, если он есть.
'HTTP_ACCEPT_CHARSET' - Содержимое заголовка Accept-Charset: из текущего запроса, если он есть. Например: 'iso-8859-1,*,utf-8'.
'HTTP_ACCEPT_ENCODING' - Содержимое заголовка Accept-Encoding: из текущего запроса, если он есть. Например: 'gzip'.
'HTTP_ACCEPT_LANGUAGE' - Содержимое заголовка Accept-Language: из текущего запроса, если он есть. Например: 'en'
'HTTP_CONNECTION' - Содержимое заголовка Connection: из текущего запроса, если он есть. Например: 'Keep-Alive'
'HTTP_HOST' - Содержимое заголовка Host: из текущего запроса, если он есть.
'HTTP_REFERER' - Адрес страницы (если есть), которая привела браузер пользователя на эту страницу. Этот заголовок устанавливается веб-браузером пользователя. Не все браузеры устанавливают его и некоторые в качестве дополнительной возможности позволяют изменять содержимое заголовка HTTP_REFERER. Одним словом, в самом деле ему нельзя доверять
'HTTP_USER_AGENT' - Содержимое заголовка User-Agent: из текущего запроса, если он есть. Эта строка содержит обозначение браузера, которым пользователь запросил данную страницу. Типичным примером является строка: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Среди прочего, вы можете использовать это значение с функцией get_browser() чтобы адаптировать вывод вашей страницы к возможностям браузера пользователя
'HTTPS' - Принимает непустое значение, если запрос был произведен через протокол HTTPS. Замечание: Обратите внимание, что при использовании ISAPI с IIS значение будет off, если запрос не был произведен через протокол HTTPS.
'REMOTE_ADDR' - IP-адрес, с которого пользователь просматривает текущую страницу.
'REMOTE_HOST' - Удаленный хост, с которого пользователь просматривает текущую страницу. Обратный просмотр DNS базируется на значении переменной REMOTE_ADDR. Замечание: Ваш веб-сервер должен быть настроен, чтобы создавать эту переменную. Для примера, в Apache вам необходимо присутствие директивы HostnameLookups On в файле httpd.conf, чтобы эта переменная создавалась. См. также gethostbyaddr().
'REMOTE_PORT' - Порт на удаленной машине, который используется для связи с веб-сервером.
'REMOTE_USER' - Аутентифицированный пользователь.
'REDIRECT_REMOTE_USER' - Аутентифицированный пользователь, если запрос был перенаправлен изнутри.
'SCRIPT_FILENAME' - Абсолютный путь к скрипту, который в данный момент исполняется. Замечание:Если скрипт запускается в коммандной строке (CLI), используя относительный путь, такой как file.php или ../file.php, переменная $_SERVER['SCRIPT_FILENAME'] будет содержать относительный путь, указанный пользователем.
'SERVER_ADMIN' - Эта переменная получает свое значение (для Apache) из директивы конфигурационного файла сервера. Если скрипт запущен на виртуальном хосте, это будет значение, определенное для данного виртуального хоста.
'SERVER_PORT' - Порт на компьютере сервера, используемый веб-сервером для соединения. Для установок по умолчанию, значение будет '80'; используя SLL, например, это значение будет таким, какое сконфигурировано для соединений безопасного HTTP.
'SERVER_SIGNATURE' - Строка, содержащая версию сервера и имя виртуального хоста, которые добавляются к генерируемым сервером страницам, если включено.
'PATH_TRANSLATED' - Filesystem- (not document root-) based path to the current script, after the server has done any virtual-to-real mapping. Замечание: Начиная с PHP 4.3.2, переменная PATH_TRANSLATED больше не устанавливается неявно в Apache 2 SAPI, по сравнению с Apache версии 1, где она устанавливается в то же самое значение, что и переменная SCRIPT_FILENAME, когда она не используется Apache. Это изменение было сделано для соответствия спецификации CGI, где переменная PATH_TRANSLATED должна существовать только тогда, когда PATH_INFO определена. Пользователи Apache 2 могут использовать директиву AcceptPathInfo = On в конфигурационном файле httpd.conf для задания переменной PATH_INFO.
'SCRIPT_NAME' - Содержит путь, к текущему исполняемому скрипту. Это полезно для страниц, которые должны указывать на самих себя. Константа __FILE__ содержит полный путь и имя текущего (т.е. включаемого) файла.
'REQUEST_URI' - URI, который был передан для того, чтобы получить доступ к этой странице. Например, '/index.html'.
'PHP_AUTH_DIGEST' - При выполнении HTTP Digest аутентификации, этой переменной присваивается заголовок 'Authorization', который присылается клиентом (его необходимо потом использовать для соответствующей валидации).
'PHP_AUTH_USER' - Когда выполняется HTTP-аутентификация, этой переменной присваивается имя пользователя, предоставленное пользователем.
'PHP_AUTH_PW' - Когда выполняется HTTP-аутентификация, этой переменной присваивается пароль, предоставленный пользователем.
'AUTH_TYPE' - Когда выполняется HTTP-аутентификация, этой переменной присваивается тип аутентификации, который используется.
'PATH_INFO' - Содержит любой предоставленный пользователем путь, содержащийся после имени скрипта, но до строки запроса, если доступно. Например, если текущий скрипт запрошен по URL http://www.example.com/php/path_info.php/some/stuff?foo=bar, то переменная $_SERVER['PATH_INFO'] будет содержать /some/stuff.
'ORIG_PATH_INFO' - Исходное значение переменной 'PATH_INFO' до начала обработки PHP.
Пример:
<?php echo $_SERVER['SERVER_NAME']; ?>
Выведет:
www.examplepage.com
Пример:
<?php echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; ?>
Выведет:
http://www.examplepage.com/index.php?lang=en