PHP Zabezpieczenie plików na serwerze

0

Witam,
mam pewne pytanie do osób, które naprawdę znają temat. Chciałbym wiedzieć jak najlepiej zamykać dostęp nieproszonych osób na serwer ? Jeżeli mam takie katalogi:

..
-- images (zdjęcia)
-- includes (pliki z rozszerzeniem .php)
-- templates (szablony)
-- css
-- js (biblioteki)
-- ajax (pliki wywoływane poprzez Ajax)
jakas_klasa.php
index.php
config.php
config.ini

Nie wiem jak mam ustawiać CHMOD lub .htaccess tak, by poprawnie wyświetlało stronę, jednocześnie blokując dostęp do nieodpowiednich folderów/plików.

Wiem że jak wszystkie pliki (poza index.php) ustawię jako niedostępne to mam stronę bez zdjęć i szablonów. W takim razie pewnie wszystko mam ustawić jako niedostępne poza images, css ? A co z plikami wywoływanymi przez ajax ? Co zrobić by ktoś nie mógł wpisać www.moja-strona.pl/ajax/jakis_plik.php ?

0

Co zrobić by ktoś nie mógł wpisać www.moja-strona.pl/ajax/jakis_plik.php ?

Możesz przekazywać za pomocą sesji lub POST'em jakąś sekretną randomową wartość i w tym pliku ją sprawdzać.

0

A nie ma możliwości ustawienia tak zabezpieczeń, by tylko moja strona mogła otwierać ajax/ ? A co z innymi ?

0

Niby w jaki sposób serwer miałby odróżnić żądanie Ajax od każdego innego żądania?

0

W Django jest taki mechanizm jak "CSRF Tokens" https://docs.djangoproject.com/en/dev/ref/contrib/csrf/ ,może to Ci podsunie jakiś pomysł, nie wiem czy w PHPie coś takiego jest możliwe :)

0

Znaczy zasadniczo da się wykryć żądanie Ajax od normalnego. Żądania Ajax mogą wysyłać np. nagłówek X-Requested-With: XMLHttpRequest. Nie wiem czy takie jQuery wysyła to zawsze, ale nawet jeśli nie, to da się zrobić coś w rodzaju xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");.

http://www.web-design-talk.co.uk/197/detect-ajax-requests-using-the-x-requested-with-header-and-xmlhttprequest/

0

Ok dzięki,
ale co z innymi folderami ? Które mam zablokować, a które częściowo ? W jaki sposób (htaccess czy chmod) ?

0

Nie wiem, czy ja dobrze rozumiem o co tu chodzi, bo nie ma mowy o dwóch oczywistych rozwiązaniach. Pierwsze jest używane np. w Zend Framework. Polega na tym, że wszystkie pliki php są w katalogu wyżej niż public. U ciebie w public powinny zostać index.php, css, js i obrazki. W htaccess robisz tak, że wszystkie żądania są kierowane na index.php, który nimi zarządza: wykonuje kod php lub przesyła obrazek.
Drugie polega na tym, że katalogi, których nie chcesz udostępnić mają swoje htacces z instrukcją deny from all. Nie przeszkadza to w dostępie do plików aplikacji, ale serwer ich nie udostępnia do przeglądarki.

0

Z przyczyn technicznych muszę stosować drugą opcję. Ale zauważyłem pewną rzecz. deny from all mogę tylko sposować na plikach *.php (poza index.php) oraz na *.ini (bo to konfiguracyjne). Nie mogę natomiast stosować tego na niczym innym:

  • css
  • js
  • tpl (szablony)
  • plikach wykonywalnych do ajax (ale to zrozumiałe)
  • jpg, png itp.
  • swf (tego akurat nie sprawdzałem)

Pytanie moje jest takie do jakich formatów mogę stosować deny from all ?

0

Nie bardzo rozumiem jakie są te twoje spostrzeżenia i dlaczego uważasz, że tylko do *.php możesz stosować. Poczytaj trochę o pliku.htaccess. Poza tym co napisałem można tam skonfigurować wiele innych rzeczy. W Zend jest tak, że każde zapytanie trafia do plik index.php. Dopiero tam jest rozpoznawane, czy to jest żądanie o obrazek, css, js czy kod php i w zależności od tego albo serwowany jest plik, albo wynik wykonania kodu php. Używając odpowiednich reguł możesz napisać tak, aby pliki były jednak bezpośrednio dostępne. No ale trzeba trochę pogrzebać i poczytać.

0

Może o takie rozwiązanie chodzi? http://www.htaccesstools.com/hotlink-protection/

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