Warto ograniczyć bezpośredni dostęp do plików motywów?


31

Od czasu do czasu natrafiam na następujący fragment motywu:

if ( ! defined('ABSPATH')) exit('restricted access');

Jest na początku niektórych (wszystkich?) Plików PHP w motywie i ma zapobiegać bezpośredniemu dostępowi do pliku przez nikczemne źródła.

Widzę, że nie jest to uwzględnione w dwudziestu dziesięciu lub jedenastu i nigdy nie widziałem, aby było to zalecane w oficjalnej dokumentacji WordPress. Wydaje mi się, że to dobry pomysł, ale nie wiem też wystarczająco dużo o bezpieczeństwie, aby go ocenić, i nie mogę wiele znaleźć w Google.

Czy powinienem to mieć w niestandardowych motywach? Jeśli tak, to czy powinno to być we wszystkich plikach PHP, czy tylko w niektórych?


7
Tylko dla późniejszych czytelników można to napisać krócej i ładniej:defined('ABSPATH') OR exit;
kaiser

lub jeszcze krócej:: defined('WPINC') ? : die();P
Tim Elsass

Zastanawiam się również, czy warto wstawić taki kod, aby uniknąć błędów PHP związanych z niezdefiniowanymi funkcjami w moich dziennikach błędów. Wydaje się, że boty czasami lubią bezpośrednio uderzać w te pliki i dostaję błędy takie jak „Wywołanie niezdefiniowanej funkcji query_posts ()”, ponieważ bootstrap WP nie został załadowany
Matt Keys

Odpowiedzi:


26

Zwykle nie potrzebujesz tego. Ale… jest co najmniej jeden przypadek na krawędzi:

  • Jeśli plik motywu jest częścią szablonu ,
  • i używa zmiennych globalnych z kontekstu wywołującego (plik nadrzędny),
  • a register_globals to on,
  • i po prostu używa tych zmiennych bez kontroli bezpieczeństwa…

… Atakujący może wywołać ten plik, ustawić brakujące zmienne przy pomocy GETlub POSTi sprawić, by plik motywu wydrukował je. A potem jest problem bezpieczeństwa.

Więc… najlepszą opcją nie jest sprawdzenie kontekstu, jak ten z twojego przykładu, ale dobry kod: unikaj zmiennych globalnych, sprawdź ich zawartość przed wydrukowaniem.

W niektórych przypadkach dodam sprawdzenie kontekstu, gdy myślę, że ktoś użyje mojego kodu i zmieni go bez uwzględnienia bezpieczeństwa. To nie boli


Jeśli część szablonu nadal zawiera co najmniej jedno wywołanie funkcji, które spowoduje błąd krytyczny PHP, czy ten scenariusz byłby nadal możliwy?
Chris_O,

@Chris_O Zależy od kolejności pojawiania się.
fuxia

Ma sens i całkowicie zgadza się z innym powodem, aby nie używać zmiennych globalnych między wywołaniami plików.
Chris_O,

1
Zawsze najlepiej być bezpiecznym niż żałować. Zbyt duże bezpieczeństwo nie może zaszkodzić, prawda?
Sean Berg,

2
Jeśli zrobisz wszystko dobrze, nie powinieneś używać kodu, który nie jest potrzebny. To pytanie dowodzi, że utrudnia to przestrzeganie kodu.
fuxia
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.