Jesteś tutaj: webmade.org >> porady >> php + mysql
autor: Bartosz 'regua' Reguła, ostatnia modyfikacja: 2007-02-23
Jeśli na swojej stronie internetowej używacie jednego pliku jako 'bazy' i tylko załączacie w nim różne pliki - PHP'owymi funkcjami takimi jak include czy require lub chociażby zwykłym iframe'em - jesteście narażeni na bezpośrednie wejście do pliku, czyli otwarcie tego, co powinno zostać wyświetlone tylko i wyłącznie w pliku-bazie.
Czym to może grozić? W większości przypadków niczym, ale jeśli np. instrukcje obsługujące bazę danych czy style CSS masz w pliku-bazie, bezpośrednie wejście do plików witryny spowoduje nieprawidłowe ich wyświetlenie (np. bez danych pobranych z bazy SQL czy bez styli), a może w plikach są dane, których nie chcesz pokazywać userom?...
Jak się przed tym chronić? Jest to łatwiejsze niż myślisz.
Użyjemy sposobu podobnego do tego użytego w phpBB. Polega on na dodaniu do pliku-bazy jednej stałej, np.
define('WEBMADE', true);
Ponadto w każdym z plików, który nie może być wyświetlony oddzielnie, należy wpisać ten kod:
if (!defined('WEBMADE') || !WEBMADE) { header('HTTP/1.1 301 Moved Permanently'); header('Location: http://'.$_SERVER['HTTP_HOST'].'/'); exit; }
Powyższy skrypt sprawdzi, czy stała "WEBMADE" została zdefiniowana i ma wartość 'true'. Jeśli nie - wysyła kod odpowiedzi HTTP 301 (znaczy to, że "żądany zasób zmienił swój URI i w przyszłości zasób powinien być szukany pod wskazanym nowym adresem" - z Wikipedii) i przekieruje do twojej strony głównej (jeśli nie chcesz, by przekierowywało właśnie do niej, zmień fragment za to odpowiedzialny wedle uznania, np.:
header('Location: http://webmade.org/');
Zabezpieczenie proste, wręcz banalne w użyciu - a zabezpiecza cię przed natrętnymi i ciekawskimi użytkownikami ;)
Pamiętaj, aby przy wysyłaniu nagłówków użyć buforowania
Bartosz 'regua' Reguła
szukaj: definiowanie stałej nagłówki HTTP zabezpieczenie skryptu PHP
Osoby czytające tę publikację przeglądały również:
© 2004-2008 copyright by webmade.org