Jak mogę zapewnić, że użytkownik nie może uruchomić skryptu PHP i że jest uruchamiany tylko jako część zadania cron?Upewnij się, że skrypt PHP jest zawsze uruchamiany jako zadanie cron?
Odpowiedz
Możesz ustawić zmienną środowiskową w swoim pliku crontab. Linia taka jak IS_CRON=1
może zostać umieszczona na początku twojego pliku crontab, następnie sprawdź w swoim programie php dla get_env("IS_CRON") == 1
.
Oczywiście, należy również użyć uprawnień do plików, ponieważ nie są one tak łatwo ominięte. Jeśli jest uruchamiany jako część crona root, chown root:root yourscript.php
i chown 700 yourscript.php
.
Jak ircmaxell mówi, że byłoby lepiej, aby uruchomić jako użytkownik inny niż root przy założeniu, że nie trzeba uprawnień administratora za to, co robisz. Po prostu zgadywałem o twojej konfiguracji.
Proponuję ustawienie zmiennej środowiskowej w Twojej crontab i następnie sprawdzanie tego w skrypcie PHP
za co głosował minus? – robjmills
Nie był mój, ale powiedziałbym "dla bezpieczeństwa przez zaciemnienie". Podczas gdy Twoja sugestia uniemożliwiłaby * przypadkowe * wykonanie, jedno zerknięcie do skryptu powie każdemu, która zmienna środowiskowa musi być ustawiona (podobnie jak w przypadku znaku "proszę nie uruchamiać ręcznie").Odpowiedzi: "skonfiguruj oddzielnego użytkownika dla cronjobs i zezwalaj tylko na dostęp tego użytkownika i wykonanie skryptu" adres root problemu (podobny do blokady, które może zostać odblokowane tylko przez określonego użytkownika). – Piskvor
Prawdopodobnie istnieje wiele sposobów, aby to zrobić. Poza tym, powiedziałbym, że umieszczenie go w katalogu będącym własnością root'a i tylko do odczytu przez root może zbliżyć się do osiągnięcia efektu, którego szukasz.
Czy są jakieś procesy, których szukasz, aby je ograniczyć? Jeśli tak, to używając uprawnień, nie można ich odczytać dla żadnego z tych procesów.
Utwórz użytkownika dla zadań cron i ustaw uprawnienia skryptu, aby mógł być uruchamiany tylko jako ten użytkownik. Oczywiście musisz umieścić skrypt w tym użytkowniku crontab, który możesz zrobić, logując się jako ten użytkownik i uruchamiając crontab
. Po prostu nie podawaj hasła tego użytkownika każdemu innemu użytkownikowi ...
Początkowo myślałem również o ustawieniu zmiennej środowiskowej, która uniemożliwiłaby uruchomienie tego skryptu z sieci ... Ale po prostu nie umieszczanie skryptu w przestrzeń, w której serwer WWW szuka stron dla stron internetowych, zrobiłaby to samo.
Nic nie powstrzymuje przypadkowego użytkownika przed pierwszym ustawieniem zmiennej środowiskowej, a następnie uruchomieniem skryptu.
Co powiesz na sprawdzenie skryptu PHP, czy $_SERVER['REMOTE_ADDR']
jest puste, a jeśli nie jest, to wyłącz skrypt, nie robiąc nic więcej.
- 1. Jak skonfigurować zadanie Cron?
- 2. zadanie php cron co 10 minut
- 3. Skrypt wsadowy uruchamiany jako administrator
- 4. Czy zadanie cron zabija ostatnie wykonanie crona?
- 5. Upewnij się, że ciąg jest poprawną nazwą CSS o nazwie
- 6. Zadanie jest zawsze aktualne
- 7. Upewnij się, że fgetcsv() odczytuje całą linię
- 8. Uruchom lub upewnij się, że zadanie opóźnione działa, gdy aplikacja/serwer zostanie ponownie uruchomiony.
- 9. Java - Upewnij się, że obiekt implementuje interfejs jest
- 10. Shell scenariusz: Upewnij się, że skrypt nie jest wykonywany, jeśli już działa
- 11. Pierwsze cronjob uruchomić skrypt PHP jako PHP5
- 12. Upewnij się, że dokładnie jedna boolean danej listy jest prawdziwa?
- 13. wątek wyjątek bezpieczeństwa priorytetem upewnij się, że APK jest podpisany
- 14. Upewnij się, że podproces jest martwy w kakao
- 15. Upewnij się, że parametr szablonu jest klasą wyliczeniową
- 16. Cron zadanie nie działa prawidłowo w cpanel
- 17. Zatrzymywanie potoku PowerShell, upewnij się, że koniec nazywa się
- 18. UnicodeEncodeError tylko wtedy, gdy działa jako zadanie cron
- 19. Jak załadować plik zewnętrzny i upewnić się, że jest on uruchamiany jako pierwszy w JSFiddle?
- 20. Jak sprawdzić w PHP, czy skrypt jest uruchamiany z żądania konsoli lub przeglądarki?
- 21. Napisz ciąg do pliku tekstowego i upewnij się, że zawsze zastępuje istniejącą treść.
- 22. stwardnienie zadanie crona pliku php
- 23. Ciągła integracja: upewnij się, że nowe zatwierdzenia są objęte testami.
- 24. Upewnij się, że typ implementuje interfejs podczas kompilacji w Go
- 25. Upewnij się, że tabela SQLite ma tylko jeden wiersz
- 26. Upewnij się, że obiekty są zamknięte, jeśli zostanie zgłoszony wyjątek.
- 27. Cron Zadanie: Dołącz bieżącą datę do nazwy pliku przez Cron?
- 28. Prosty parser PHP uruchamiany tylko raz dziennie
- 29. Upewnij się, że blokady synchronizowane Java są pobierane w kolejności?
- 30. executorService.scheduleAtFixedOdtwórz zadanie na zawsze
To wygląda na idealne rozwiązanie ... Jestem trochę nowy w pracy cron ... w jaki sposób ustawić IS_CRON = 1 część? – Starlin
@Starlin, po prostu umieść tę linię na początku pliku crontab. –
Użytkownik może również ustawić zmienne środowiskowe. – geoffspear