Ograniczenie dostepu do postron przez adres IP.

0

Witam,

Musze ograniczyc dostep do podstron tj www.example.com/admin przez adres IP. Same adresy IP beda przechowywane w bazie danych. Teraz zastanawiam sie czy lepiej samo sprawdzanie napisac w .htaccess czy za pomoca php?


$deny = array("111.111.111", "222.222.222", "333.333.333");
if (in_array ($_SERVER['REMOTE_ADDR'], $deny)) {
   header("location: http://www.example.com/");
   exit();
} ?>

Druga opcja wydaje mi sie latwiejsza, bo tak to bedzie trzeba nadpisywac .htaccess. A obie opcje i tak pobieraja IP kienta i sprawdzaja czy udostpnic dana podstrone czy nie.

0

ja zrobiłem normalnie w .htaccess lecz adresów miałem niewiele, działa bez problemów, więc nie wnikam

0

htaccess będzie szybsze w działaniu (a więc zapobiegnie mniejszym atakom DOS), bo nawet php nie trzeba będzie uruchamiać.

0

@dzek69 Ale bedzie trzeba nadpisaywać htaccess plik. Co już mi się nie podoba, jakiś pomysł?

0

Możesz gadać bezpośrednio z systemowym iptables :)

Niemniej napisanie menedżera do blokowanych ipków w htaccess nie brzmi tak źle o ile wiesz co robisz.

Zawsze możesz też w konfiguracji vhosta czy całego apache wydzielić ładowany plik z blokowanymi adresami ip i tylko jego zmieniać.

0

@dzek69 Ok, przerobie to na htaccess. Jakiś pomysł jak mam go otwierać i zapisać, file_get_contents i file_put_contents wystarczy czy mam coś udziwniać?

edit
Iptables nigdy nie używałem, nie wiem z czym się to je. Vhost odpada niestety w tym przypadku. Więc albo pierwsza albo druga metoda.

0

@dzek69 Czy iptables to jakaś paczka, która trzeba instalować na serwerze?

1
# .htaccess
# wszystko to co masz w htaccess

### BLOCK START ###
### BLOCK END ###
# *.php

$ips = [
    "127.0.0.1",
    "127.0.0.2",
];
$block_start = "### BLOCK START ###";
$block_end = "### BLOCK END ###";

$htaccess = file_get_contents(".htaccess");
$rules = array_map(function($ip) {
  return "deny from $ip".PHP_EOL;
}, $ips);
$new_htaccess = preg_replace("@{$block_start}.*{$block_end}@ms", $block_start.PHP_EOL.$rules.PHP_EOL.$block_end);
file_put_contents(".htaccess", $new_htaccess);

Najprostsza metoda, która zadziała do momentu, do którego ktoś nie będzie chciał udowodnić, że nie zadziała zawsze :) Chcesz to pisz coś niebazującego na regexpach, ale ja nie widziałbym potrzeby. Takie implementacje widziałem wielokrotnie.

Możliwe, że są drobne problemy, pisane z palca po pewnym odwyku od php (teraz jeszcze wyraźniej widzę, dlaczego php ssie).

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0