2b315845

Пароль на страницу. Часть 2. Блокировка подбора (отредактированная) - 2


Пользователь моментально делает пять обращений сервер пять раз пишет в файл (кстати, в некоторых броузерах, возможно, выскочит окно для ввода логина и пароля). Можно сделать html-страницу с пятью такими картинками, а саму страницу вставить через iframe на посещаемый сайт (через iframe - чтобы по полю referer не нашли. Вряд ли служба поддержки халявного хостинга будет заниматься такими вещами как копание в лог-файлах в поисках рефереров). Те примеры, которые я привёл, разумеется, натянуты, но сам факт того, что можно воспользоваться таким недостатком системы, доказан. Кстати, нечто подобное уже было.

Но всё-таки приведу этот способ - зря писал, что ли? Его, кстати, можно без особого страха применять для ограниченного количества адресов (например, для локальной сети фирмы), положив в директорию файл .htaccess такого содержания:

order deny,allow

deny from all

allow from xxx.xxx.xxx

А вот код программы:

$errors = 0;

$fn = "ignore/". preg_replace("[^\d\.]", "", $REMOTE_ADDR. ".". $HTTP_FORWARDED_FOR);

if (is_file($fn)) {

  if (filectime($fn) < time()-3600)

    unlink($fn);

  else

    $errors = fread(fopen($fn, "r"), 2);

  };

if ($errors>5) {

  print ("Доступ закрыт. Зайдите через час.");

  exit();

  };

// здесь происходит установка связи с сервером БД. чтобы не трогать зря, если пользователя сразу же "отлупили".

$result = mysql_query("SELECT * FROM user WHERE login='". preg_replace("/[^\w_\-]/", "", $PHP_AUTH_USER). "' AND pass='". md5($PHP_AUTH_PW). "'");

if (@mysql_num_rows($result)!=1) {

  header("WWW-Authenticate: Basic realm=\"secret area\"");

  header("HTTP/1.0 401 Unauthorized");

  print ("Authorization required");

  fwrite(fopen($fn, "w"), ++$errors);




Начало  Назад  Вперед