Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zadania Crona - bezpieczeństwo plików
Forum PHP.pl > Forum > Przedszkole
sliwa007
Witam,
Mam pewien skrypt który musi znajdować się w katalogu public_html a jest wywoływany przez crona. Moje pytanie brzmi: Jak zabezpieczyć plik przed uruchomieniem go z poziomu przeglądarki prze użytkowników. Próbowałem zablokować go htaccesem przez zabronienie dostępu wszystkim oprócz ip 127.0.0.1 potem próbowałem z localohst. Ale niestety po zablokowaniu pliku w taki sposób cron nie wykonuje pliku. Jak to rozwiązać ?
lobopol
Właściwie to masz kilka metod:
  1. if ( !isset($_SERVER['argc']) || $_SERVER['argc']<1 ) {
  2. die();
  3. }


  1. if (PHP_SAPI != "cli") {
  2. die();
  3. }
Fifi209
wyrzuć nad public_html ?
sliwa007
fifi2009 to nie ma znaczenia plik tak czy tak nie jest zabezpieczony,

lobopol PHP_SAPI nie działa, a to piwerwsze to o ile sie nie myle to ilosc argumenów w adresie, jeżeli ktoś wpisze adres plik?costam=costam warunek nie działa,
Fifi209
A jak chcesz uruchomić coś co jest ponad public_html ?
sliwa007
przez wyżej miałem na myśli "głębiej" - pierwsze zdanie mojego posta: "Mam pewien skrypt który musi znajdować się w katalogu public_html"

użyłem takiej metody:

  1. if (isset($_SERVER['HTTP_HOST'])) {
  2. die('Odrzucono');
  3. }


Działa. Ale czy jest bezpieczne ? Czy w tym przypadku będzie ktoś mógł wykonać skrypt za pomocą wget z innego servera ?
lobopol
To oczym napisałeś to argv (które też inaczej działa), argc to liczba parametrów przekazana z konsoli http://php.net/manual/pl/reserved.variables.argc.php
thek
Najlepiej sprawdzić jakie PHP_SAPI ustawiane jest da wywołań z command line systemu. Nie na każdym serwerze jest to "cli" o czym sam się kilka razy przekonałem. Najprościej? W pliku stwórz sobie dla testów logowanie tego i wywołaj raz cronem z cli, raz cronem jako wget oraz raz ze zwykłej przeglądarki i popatrz w logi jakie SAPI było przy każdym z nich.
sliwa007
no właśnie chce tego uniknąć bo aplikacja którą tworzę to cms i bedzie zapewne instalowany na różnych hostingach, dlatego sprawdzanie SAPI mnie nie urządza, dlatego pytam czy sprawdzenie czy istnieje zmienna $_SERVER['HTTP_HOST'] jest bezpieczne, bo działa tak jak należy. Ustawiłem wget z innego serwa i odrzuca więc jest ok, czy są jeszcze jakieś przeciwwskazania ?
thek
Myślę, że najlepsze rozwiązanie już Ci podano. To sprawdzenie parametrów dostępnych jedynie z konsoli systemowej, a tak najczęściej uruchamia się zadania CRONa, jeśli mają być bezpieczne. Uruchamianie zadań z użyciem wget to zostawianie furtki dla potencjalnych włamywaczy i jeśli ktoś się połapie jaka jest ścieżka do pliku wykonywanego przez cron, to może CI ów plik odpalić nawet kilkaset razy na sekundę. Jednymi z parametrów dostępnych jedynie z konsoli są wspomniane argc i argv. Ale zobacz do tego komentarza i porównaj jakie są w nim parametry, a jakie zawiera sama definicja i zauważysz, że jest wiele różnic. Duża część z nich to właśnie takie, które są dostępne jedynie w konsoli. Ich wykrycie oznacza to, że skrypt poszedł w konsoli, a nie z przeglądarki czy czegoś, co próbuje ją naśladować.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.