SoftoRooM LifeRooM Whois RSS GZip WAP Поиск Правила Помощь Disclaimer
Твой софтовый форумТвой софтовый форумТвой софтовый форумТвой софтовый форум

Здравствуйте Гость ( Вход | Регистрация )

Безопасность при авторизации

Каскадный · Стандартный · [ Линейный ]

> Безопасность при авторизации, Разработка CMS


 
post 13.11.2006 - 15:57
Отправлено #1
scorpion-ds



Специалист
Group Icon

Профиль
Группа: Наши Люди
Сообщений: 311
Регистрация: 27.03.2006
Пользователь №: 134.016


Респектов: 18
-----X----




Необходимо как-то обезопасить сайт от подбора паролей, уже рассматривались такие варианты:

- После n-ого количества попыток ввода неправильных логин/пароль, устанавливать COOKIE блокирующий дальнейшие попытки, но такой вариант ни как не запретит просто удалить этот самый COOKIE, и пробовать снова.

- После n-ого количества попыток ввода неправильных логин/пароль, блокировать атакуемую учетную запись на уровне БД сайта, но это реально, если вводится правильный логин и неправильный пароль, а если подбирается и логин тоже (как бы такой вариант не был маловероятен).

Существуют ли еще, какие ни будь алгоритмы защиты от перебора паролей?

Сообщение отредактировал scorpion-ds - 14.11.2006 - 11:14
User is offlineProfile CardPM
Go to the top of the pageGo to the end of the page
+Quote Post

 
Reply to this topicStart new topicStart Poll
Ответов(1 - 7)
 
post 14.11.2006 - 21:04
Отправлено #2
дымчик



Специалист
[SoftoRooMTeaM] Group Icon

Профиль
Группа: Модераторы
Сообщений: 461
Регистрация: 8.11.2005
Из: Санкт-Петербург
Пользователь №: 64.615


Респектов: 75
-----X----




Можешь попробовать делать блокировку по IP wink.gif
User is offlineProfile CardPM
Go to the top of the pageGo to the end of the page
+Quote Post

 
post 15.11.2006 - 11:47
Отправлено #3
scorpion-ds



Специалист
Group Icon

Профиль
Группа: Наши Люди
Сообщений: 311
Регистрация: 27.03.2006
Пользователь №: 134.016


Респектов: 18
-----X----




QUOTE(дымчик @ 14.11.2006 - 20:01)
Можешь попробовать делать блокировку по IP wink.gif
*


Да такой вариант тоже рассматривался, но не очень удобен, когда с одного IP адреса (возможно шлюза или прокси) на сайт ходит не только взломщик, но и нормальные посетили сайта.
User is offlineProfile CardPM
Go to the top of the pageGo to the end of the page
+Quote Post

 
post 15.11.2006 - 13:58
Отправлено #4
дымчик



Специалист
[SoftoRooMTeaM] Group Icon

Профиль
Группа: Модераторы
Сообщений: 461
Регистрация: 8.11.2005
Из: Санкт-Петербург
Пользователь №: 64.615


Респектов: 75
-----X----




QUOTE(scorpion-ds @ 15.11.2006 - 12:44)
QUOTE(дымчик @ 14.11.2006 - 20:01)
Можешь попробовать делать блокировку по IP wink.gif
*


Да такой вариант тоже рассматривался, но не очень удобен, когда с одного IP адреса (возможно шлюза или прокси) на сайт ходит не только взломщик, но и нормальные посетили сайта.
*



Ты же можешь получить всю цепочку IP-адресов, если человек сидит через прокси. А вот если через NAT, то тогда уже сложнее wink.gif
В таком случае можно использовать такую схему:
- Вычисляешь всю цепочку IPов
- В добавок к этому получаешь значения переменных $_SERVER["HTTP_USER_AGENT"], $_SERVER["HTTP_ACCEPT"],
$_SERVER["HTTP_ACCEPT_CHARSET"], $_SERVER["HTTP_ACCEPT_LANGUAGE"] + ещё что-нибудь на свое усмотрение...
- Из всего этого делаешь один MD5-хэш и уже по этому хэшу делаешь бан в случае попытки подбора пароля
User is offlineProfile CardPM
Go to the top of the pageGo to the end of the page
+Quote Post

 
post 15.11.2006 - 15:49
Отправлено #5
scorpion-ds



Специалист
Group Icon

Профиль
Группа: Наши Люди
Сообщений: 311
Регистрация: 27.03.2006
Пользователь №: 134.016


Респектов: 18
-----X----




QUOTE(дымчик @ 15.11.2006 - 12:55)

Ты же можешь получить всю цепочку IP-адресов, если человек сидит через прокси. А вот если через NAT, то тогда уже сложнее wink.gif
*


А где можно найти информацию как определить цепочку IP-адресов, я как-то вообще не задумывался что это возможно?!
User is offlineProfile CardPM
Go to the top of the pageGo to the end of the page
+Quote Post

 
post 16.11.2006 - 17:17
Отправлено #6
дымчик



Специалист
[SoftoRooMTeaM] Group Icon

Профиль
Группа: Модераторы
Сообщений: 461
Регистрация: 8.11.2005
Из: Санкт-Петербург
Пользователь №: 64.615


Респектов: 75
-----X----




QUOTE(scorpion-ds @ 15.11.2006 - 16:46)
QUOTE(дымчик @ 15.11.2006 - 12:55)

Ты же можешь получить всю цепочку IP-адресов, если человек сидит через прокси. А вот если через NAT, то тогда уже сложнее wink.gif
*


А где можно найти информацию как определить цепочку IP-адресов, я как-то вообще не задумывался что это возможно?!
*



Если человек сидит через public-proxy, то переменная $_SERVER["REMOTE_ADDR"] будет содержать цепочку IP-адресов разделенных ; (а может и , - я точно не помню)...
В итоге будет запись вида 195.131.200.22; 82.15.22.253; 192.168.20.1
User is offlineProfile CardPM
Go to the top of the pageGo to the end of the page
+Quote Post

 
post 17.11.2006 - 16:18
Отправлено #7
scorpion-ds



Специалист
Group Icon

Профиль
Группа: Наши Люди
Сообщений: 311
Регистрация: 27.03.2006
Пользователь №: 134.016


Респектов: 18
-----X----




$_SERVER["REMOTE_ADDR"] - возвращает только IP-адрес прокси сервера, прокси у нас свой, через него даже внутри сетевой трафик идет, но думаю что идея работы других прокси приблизительно такая же.
User is offlineProfile CardPM
Go to the top of the pageGo to the end of the page
+Quote Post

 
post 17.11.2006 - 18:29
Отправлено #8
дымчик



Специалист
[SoftoRooMTeaM] Group Icon

Профиль
Группа: Модераторы
Сообщений: 461
Регистрация: 8.11.2005
Из: Санкт-Петербург
Пользователь №: 64.615


Респектов: 75
-----X----




QUOTE(scorpion-ds @ 17.11.2006 - 17:15)
$_SERVER["REMOTE_ADDR"] - возвращает только IP-адрес прокси сервера, прокси у нас свой, через него даже внутри сетевой трафик идет, но думаю что идея работы других прокси приблизительно такая же.
*


Ох... сорри unsure.gif.
Вчера уже уставший был, поэтому толком не думал что писал... если пользователь использует прокси, то надо использовать $_SERVER["HTTP_X_FORWARDED_FOR"].
Вот для примера определение IP-адреса, взятое из PHPMyAdmin:
CODE

function PMA_getIp() {

   global $REMOTE_ADDR;
   global $HTTP_X_FORWARDED_FOR, $HTTP_X_FORWARDED, $HTTP_FORWARDED_FOR, $HTTP_FORWARDED;
   global $HTTP_VIA, $HTTP_X_COMING_FROM, $HTTP_COMING_FROM;

   // Get some server/environment variables values
   if (empty($REMOTE_ADDR)) {
       if (!empty($_SERVER) && isset($_SERVER['REMOTE_ADDR'])) {
           $REMOTE_ADDR = $_SERVER['REMOTE_ADDR'];
       }
       else if (!empty($_ENV) && isset($_ENV['REMOTE_ADDR'])) {
           $REMOTE_ADDR = $_ENV['REMOTE_ADDR'];
       }
       else if (@getenv('REMOTE_ADDR')) {
           $REMOTE_ADDR = getenv('REMOTE_ADDR');
       }
   }
   if (empty($HTTP_X_FORWARDED_FOR)) {
       if (!empty($_SERVER) && isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
           $HTTP_X_FORWARDED_FOR = $_SERVER['HTTP_X_FORWARDED_FOR'];
       }
       else if (!empty($_ENV) && isset($_ENV['HTTP_X_FORWARDED_FOR'])) {
           $HTTP_X_FORWARDED_FOR = $_ENV['HTTP_X_FORWARDED_FOR'];
       }
       else if (@getenv('HTTP_X_FORWARDED_FOR')) {
           $HTTP_X_FORWARDED_FOR = getenv('HTTP_X_FORWARDED_FOR');
       }
   }
   if (empty($HTTP_X_FORWARDED)) {
       if (!empty($_SERVER) && isset($_SERVER['HTTP_X_FORWARDED'])) {
           $HTTP_X_FORWARDED = $_SERVER['HTTP_X_FORWARDED'];
       }
       else if (!empty($_ENV) && isset($_ENV['HTTP_X_FORWARDED'])) {
           $HTTP_X_FORWARDED = $_ENV['HTTP_X_FORWARDED'];
       }
       else if (@getenv('HTTP_X_FORWARDED')) {
           $HTTP_X_FORWARDED = getenv('HTTP_X_FORWARDED');
       }
   }
   if (empty($HTTP_FORWARDED_FOR)) {
       if (!empty($_SERVER) && isset($_SERVER['HTTP_FORWARDED_FOR'])) {
           $HTTP_FORWARDED_FOR = $_SERVER['HTTP_FORWARDED_FOR'];
       }
       else if (!empty($_ENV) && isset($_ENV['HTTP_FORWARDED_FOR'])) {
           $HTTP_FORWARDED_FOR = $_ENV['HTTP_FORWARDED_FOR'];
       }
       else if (@getenv('HTTP_FORWARDED_FOR')) {
           $HTTP_FORWARDED_FOR = getenv('HTTP_FORWARDED_FOR');
       }
   }
   if (empty($HTTP_FORWARDED)) {
       if (!empty($_SERVER) && isset($_SERVER['HTTP_FORWARDED'])) {
           $HTTP_FORWARDED = $_SERVER['HTTP_FORWARDED'];
       }
       else if (!empty($_ENV) && isset($_ENV['HTTP_FORWARDED'])) {
           $HTTP_FORWARDED = $_ENV['HTTP_FORWARDED'];
       }
       else if (@getenv('HTTP_FORWARDED')) {
           $HTTP_FORWARDED = getenv('HTTP_FORWARDED');
       }
   }
   if (empty($HTTP_VIA)) {
       if (!empty($_SERVER) && isset($_SERVER['HTTP_VIA'])) {
           $HTTP_VIA = $_SERVER['HTTP_VIA'];
       }
       else if (!empty($_ENV) && isset($_ENV['HTTP_VIA'])) {
           $HTTP_VIA = $_ENV['HTTP_VIA'];
       }
       else if (@getenv('HTTP_VIA')) {
           $HTTP_VIA = getenv('HTTP_VIA');
       }
   }
   if (empty($HTTP_X_COMING_FROM)) {
       if (!empty($_SERVER) && isset($_SERVER['HTTP_X_COMING_FROM'])) {
           $HTTP_X_COMING_FROM = $_SERVER['HTTP_X_COMING_FROM'];
       }
       else if (!empty($_ENV) && isset($_ENV['HTTP_X_COMING_FROM'])) {
           $HTTP_X_COMING_FROM = $_ENV['HTTP_X_COMING_FROM'];
       }
       else if (@getenv('HTTP_X_COMING_FROM')) {
           $HTTP_X_COMING_FROM = getenv('HTTP_X_COMING_FROM');
       }
   }
   if (empty($HTTP_COMING_FROM)) {
       if (!empty($_SERVER) && isset($_SERVER['HTTP_COMING_FROM'])) {
           $HTTP_COMING_FROM = $_SERVER['HTTP_COMING_FROM'];
       }
       else if (!empty($_ENV) && isset($_ENV['HTTP_COMING_FROM'])) {
           $HTTP_COMING_FROM = $_ENV['HTTP_COMING_FROM'];
       }
       else if (@getenv('HTTP_COMING_FROM')) {
           $HTTP_COMING_FROM = getenv('HTTP_COMING_FROM');
       }
   }

   // Gets the default ip sent by the user
   if (!empty($REMOTE_ADDR)) {
       $direct_ip = $REMOTE_ADDR;
   }

   // Gets the proxy ip sent by the user
   $proxy_ip     = '';
   if (!empty($HTTP_X_FORWARDED_FOR)) {
       $proxy_ip = $HTTP_X_FORWARDED_FOR;
   } else if (!empty($HTTP_X_FORWARDED)) {
       $proxy_ip = $HTTP_X_FORWARDED;
   } else if (!empty($HTTP_FORWARDED_FOR)) {
       $proxy_ip = $HTTP_FORWARDED_FOR;
   } else if (!empty($HTTP_FORWARDED)) {
       $proxy_ip = $HTTP_FORWARDED;
   } else if (!empty($HTTP_VIA)) {
       $proxy_ip = $HTTP_VIA;
   } else if (!empty($HTTP_X_COMING_FROM)) {
       $proxy_ip = $HTTP_X_COMING_FROM;
   } else if (!empty($HTTP_COMING_FROM)) {
       $proxy_ip = $HTTP_COMING_FROM;
   }

   // Returns the true IP if it has been found, else FALSE
   if (empty($proxy_ip)) {
       // True IP without proxy
       return $direct_ip;
   } else {
       $is_ip = preg_match('|^([0-9]{1,3}\.){3,3}[0-9]{1,3}|', $proxy_ip, $regs);
       if ($is_ip && (count($regs) > 0)) {
           // True IP behind a proxy
           return $regs[0];
       } else {
           // Can't define IP: there is a proxy but we don't have
           // information about the true IP
           return FALSE;
       }
   }
}
User is offlineProfile CardPM
Go to the top of the pageGo to the end of the page
+Quote Post


Reply to this topicTopic OptionsStart new topic
 


  Яндекс цитирование   Rambler's Top100
LITE - версия | WAP - версия