Помощь в программировании.
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

Помощь в программировании. PHP, HTTP, Java, Cleo, AMX.
 
ФорумПоследние изображенияПоискРегистрацияВход

 

 [PHP] Урок: Защита PHP Cтраниц от Несанкционированного доступа

Перейти вниз 
АвторСообщение
Admin
Мастер Программного Форума
Мастер Программного Форума
Admin


Сообщения : 35
Ваши Заработанные Очки : 10086
Репутация : 0
Дата регистрации : 2012-12-15
Возраст : 28
Откуда : Muravlenko

[PHP] Урок: Защита PHP Cтраниц от Несанкционированного доступа Empty
СообщениеТема: [PHP] Урок: Защита PHP Cтраниц от Несанкционированного доступа   [PHP] Урок: Защита PHP Cтраниц от Несанкционированного доступа Icon_minitimeСб Дек 15, 2012 4:03 pm

Иногда бывает нужно закрыть от постороннего доступа PHP страницу, если Вы делаете закрытую область сайта. Это может быть какая-то скрытая информация для ваших клиентов или посетителей сайта, какой-то администраторский интерфейс для вас и т.д. Можно придумать сотни различных задач требующих ограничения доступа.

Закрыть такую страницу можно несколькими взаимодополняющими друг друга способами:

Защита паролем (логин/пароль) с помощью переменных $_SERVER["PHP_AUTH_USER"] и $_SERVER["PHP_AUTH_PW"].
Защита по IP адресу клиента с помощью переменной $_SERVER["REMOTE_ADDR"].
Защита по MAC адресу в локальных сетях (дополнительно к защите по IP).
Разберем сначала первый способ, который является основным. Он позволяет закрыть доступ к странице по логину и паролю, таким образом доступ могут получить только люди знающие логин и пароль. К тому же их можно разделять по этому признаку и выдавать соответственно разную информацию для каждого. Реализуется с помощью выдачи специальных полей в заголовке протокола HTTP. Создадим функцию auth_send():

<?php
function auth_send(){
header('WWW-Authenticate: Basic realm="Closed Zone"');
header('HTTP/1.0 401 Unauthorized');
echo "<html><body bgcolor=white link=blue vlink=blue alink=red>"
,"<h1>Ошибка аутентификации</h1>"
,"<p>Обратитесь к администратору для получения логина и пароля.</p>"
,"</body></html>";
exit;
};
?>
Эту функция сообщает браузеру о том, что для доступа нужна авторизация по логину и паролю. И выдает также страницу в HTML для пользователя.

<?php
// код auth_send()
...

$login = "admin";
$password = "admin";

if (!isset($_SERVER['PHP_AUTH_USER'])) {
auth_send();
} else {
$auth_user = $_SERVER['PHP_AUTH_USER'];
$auth_pass = $_SERVER['PHP_AUTH_PW'];

if (($auth_user != $login) || ($auth_pass != $password)) {
send_auth();
};
};

echo "<html><body bgcolor=white link=blue vlink=blue alink=red>"
,"<h1>Добро пожаловать!</h1>"
,"<p>Вы зашли по логину ",$auth_user," и паролю ",$auth_pass,".</p>"
,"</body></html>";
?>
Код проверки логина и пароля не слишком сложный в данном случае, так как реализован для одного человека. Логика работы проста, если нет переменной $_SERVER['PHP_AUTH_USER'] и $_SERVER['PHP_AUTH_PW'] или их значения не совпадают с нужными, то вызываете функцию auth_send(). Не забывайте, что в ней в конце вызывается exit, поэтому выполнение программы прекращается.

Следующая ступень защиты реализуется по фильтрации IP адреса подключающегося клиента. Конечно в интернете многие провайдеры выдают IP адреса на время и эту защиту использовать бесполезно, но если речь идет о корпоративных локальных сетях, то данная проверка обеспечит дополнительную защиту.

<?php
// список разрешенных IP адресов через пробел
$allowed_ips = "192.168.10.15 192.168.10.2 212.34.124.56";

$ips = explode(" ",$allowed_ips);
if (array_search($_SERVER["REMOTE_ADDR"],$ips) === FALSE) {
echo "<p>Ваш IP не найден !!!";
exit;
};
?>
Тут в строке $allowed_ips через пробел указаны IP адреса, которым разрешен доступ. Далее получаем массив с помощью explode() и делаем поиск адреса клиента из $_SERVER["REMOTE_ADDR"]. Я для поиска применил функцию array_search(), так как неверняка ее код реализованный на Си будет работать несколько быстрее, чем то, что мы можем написать на PHP с помощью циклов for или foreach. Но скорость тут не главное

И последняя ступень защиты это проверка MAC адреса. Она относится к разряду параноидальных и ее стоит использовать, если вы получаете доступ из локальной сети и данные, которые вы защищаете действительно очень важные. Я пока реализовал эту проверку только на системе Linux, в силу относительной простоты реализации. Но Вы можете ее попробовать реализовать под любую другую платформу. Пишем функцию:

<?php
function resolve_mac_for_ip($ip){
$found_mac = NULL;
$f_in = fopen("/proc/net/arp","r");
if ($f_in != NULL){
fgets($f_in);
while (!feof($f_in)){
$t = fgets($f_in);
if ($t != NULL){
$str_split = preg_split ("/[\s]+/", $t);
if ($str_split[0]==$ip) {
$found_mac = $str_split[3];
break;
};
};
};
fclose($f_in);
};
return $found_mac;
};

echo "Ваш IP=",$_SERVER["REMOTE_ADDR"]," и MAC=",resolve_mac_for_ip($_SERVER["REMOTE_ADDR"]);

?>
Как линуксоиды уже поняли она основана на ARP таблице системы, доступ к которой можно получить с помощью файла /proc/net/arp. Функция ищет по строкам требуемый IP адрес и возвращает его MAC адрес:

Ваш IP=192.168.10.15 и MAC=00:04:31:E4:F8:37
В системе Windows возможно тоже есть какие-то способы получить MAC попроще, но из тех, которые реально работают, это вывод ARP таблицы системы командой:

C:\WINDOWS\>arp -a

Интерфейс: 192.168.10.15 on Interface 0x1000003
Адрес IP Физический адрес Тип
192.168.10.1 00-50-22-b0-6a-aa динамический
192.168.10.2 00-0f-38-68-e9-e8 динамический
192.168.10.3 00-04-61-9e-26-09 динамический
192.168.10.5 00-0f-38-6a-b1-18 динамический
Реализовать защиту на основе этого адреса Вы сможете сами, если Вам это действительно надо Но помните, что если у Вас в сети неуправляемое оборудование без возможности привязки MAC адреса к порту, эта защита может не сработать, так как можно подделать все Ваши идентификационные данные используемые для защиты (логин, пароль, IP и MAC адрес).
Вернуться к началу Перейти вниз
https://programmsupprot.profiforum.ru
 
[PHP] Урок: Защита PHP Cтраниц от Несанкционированного доступа
Вернуться к началу 
Страница 1 из 1
 Похожие темы
-
» [PHP] PHP ЗАЩИТА
» [HTML] Урок: Логические Стили
» [PHP] Урок: Менюшки и Таблички, Просто и Удобно с explode

Права доступа к этому форуму:Вы не можете отвечать на сообщения
Помощь в программировании. :: Интернет программирование :: PHP программирование-
Перейти: