Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zabezpieczenie przed otwarciem pliku
Forum PHP.pl > Forum > PHP
GreenGo
Witam.
W każdym module na mojej stronie mam plik admin.php który odpowiada za dodawanie rekordów do bazy itp.
Normalnie przez panel admina, jeśli ktoś nie poda dobrego hasła, to nie będzie mógł zobaczyć PA. Niestety jeśli ktoś toworzy plik admin.php jakiegoś modułu przez wpisanie do przeglądarki bezpośredniego adresu, to już będzie mógł "podziałać" w tym pliku, czyli np. wszystko usunąć.

Jesta jakaś możliwość aby sprawdzić czy plik jest otwierany przez np. incule a jeśli nie to nie pokazać jego zawartości ?

Pozdrawiam.
erix
Sprawdzanie przez include:
  1. <?php
  2. include 'admin.php?supertajnazmienna=supertajnawartosc';
  3. ?>

I w pliku admin.php sprawdzaj, czy istnieje supertajnazmienna w $_GET.

Najlepiej, to zrobić w głównym pliku panelu jakąś stałą, a w plikach modułów sprawdzaj, czy ta stała została wcześniej zdefiniowana.
UDAT
Popatrz na _SERVER["SCRIPT_FILENAME"] i _SERVER["REQUESTED_URI"]
GreenGo
UDAT - niestety teraz to mi nie wiele pomogło sad.gif
nospor
Zasady sa w miare proste:
1)
Plik includowany powinien zawierac tylko funkcje tudziez klasy, zadnego kodu wykonywujacego. Nawet jesli ktos odpali bezposrednio z adresu taki plik, to na nic mu sie to zda, gdyz odpali tylko skrypt z definicjami funkcji/klas a nie z wykonaniem kodu

2)
wszystko co includujesz daj do jakiegos katalogu, a na katalog ten zaloz plik .htaccess z trescia np:
Kod
deny from all

Co nie pozwoli na uruchomienie go z przeglądarki, ale ty bedziesz mogl je includowac
GreenGo
sory za beznadziejne pytanie ale jak założyć plik .htaccess na jakiś katalog ? :| Chodzi o to abym po prostu w jakimś katalogu stworzył taki plik z tątreścią ?
1010
najprosciej jest tak:
przy include:
  1. <?php
  2. $admin ="tak";
  3. include ("jakis_zabezpieczony_plik.php");
  4. ?>


i
jakis_zabezpieczony_plik.php (to wstaw na poczatku)
  1. <?php
  2. if($admin!="tak")
  3. {
  4.  //jakies przekierowanie na strone glowna serwisu
  5.  //badz tez zatrzymanie skryptu funkcja die();
  6. }
  7. ?>
nospor
Cytat
Chodzi o to abym po prostu w jakimś katalogu stworzył taki plik z tątreścią

Dokladnie tak. Poczytaj tez na googlach jesli nadal bedziesz mial problemy. Ale w zasadzie punkt 1) rozwiązuje caly problem. Punkt 2) to juz tak dla zasady winksmiley.jpg
1010
Czy moje rozwiązanie nie jest prostsze i na tyle samo skuteczne?
GreenGo
heh chciałbym skorzystać z punktu 1 ale takie coś jak funkcje czy klasy są mi obce więc klepie kod jak leci czyli pliki te wykonują kod :/ Na razie zastosuje pkt. 2 smile.gif
Dzieki smile.gif
nospor
Cytat
Czy moje rozwiązanie nie jest prostsze i na tyle samo skuteczne?
to zalezy jak lezy winksmiley.jpg
Dla mnie Twoje rozwiązanie nie jest proste (moze nie "nie proste", a raczej upierdliwe), musialbym u siebie zawsze pamietac by sprawdzac te zmienna. Ja zawsze w includach mam funkcje/klasy i sie nie martwie o zadne zmienne.

Ale jesli ktos w includach ma wykonywalny kod, to Twoje rozwiązanie jest w miare ok, pod warunkiem, ze wylaczone jest register_globals
1010
Nom tak. Wyłączone registers_globals to podstawa aby moj przykład miał szansę się sprawdzić...
webik
Hey

Kazda metoda jest dobra ja uzywam takiego kodu na poczatku kazdego pliku ktorego niechce nikomu pokazywac:

  1. <?php
  2. if(ereg(basename(__FILE__),$_SERVER['PHP_SELF']))
  3. die();
  4. ?>


ale oczcywiscie ponadto uzywam plikow .htacess

Pozdrawiam
eai
Ja rozwiazuje za pomoca kontroli dostepu.
Trzymam dane o prawach dostepu w sesji.

Klasy i kod wykonujacy trzymam w oddzielnych plikach.
Przy wywolywaniu kodu sprawdzam czy osoba ma do tego prawo.
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.