Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak zabezpieczyć witrynę przed odwiedzaniem nieistniejących podstron
Forum PHP.pl > Forum > Przedszkole
pafeu
mam przyjazne linki w .htaccess

RewriteRule ^([a-zA-Z-_0-9]+)/?$ index.php?id1=$1 [L]

ładowanie podstron za pomocą kodu
  1. ...
  2. if (file_exists($id1.'.php')) {
  3. require_once($id1.'.php');
  4. } else {
  5. echo '<p></br>Strona w trakcie aktualizacji. Zapraszamy na stronę główną</p> ';
  6. }
  7. ...

jeżeli odwiedzający próbuje odwiedzić stronę za pomocą linku
http://ommo.pl/produkty/oswietlenie-led/zasilacze
to wszystko jest ok i zostaje przekierowany do strony głównej
ale jeżeli wpisze np. coś takiego:
http://ommo.pl/index.php/wejscie-na-strone-ktorej-nie-ma/
to zostaje przełączony na tą stronę, na stronę której nie ma.

W sumie to nie byłoby problemu gdyby nie fakt, że mam automatyczne liczniki odwiedzin podstron i takie odwiedziny są rejestrowane. Powoduje to ogromny bałagan w wynikach odwiedzin - stron, których nie ma.
Pomóżcie oneeyedsmiley02.png
Spawnm
Zacznijmy od tego że twój pomysł jest zły bo pozwala na ataki ;]
Zmień system includowania na szukanie klas-kontrolerów, obecnie masz dziurę.
untorched
Przenieś licznik, tak aby zliczał dopiero po załadowaniu poprawnej podstrony smile.gif
  1. {
  2. $licznik++;
  3. require();
  4. }
  5. else
  6. {
  7. echo 'Brak strony';
  8. }
pafeu
Cytat(untorched @ 2.01.2013, 23:27:36 ) *
Przenieś licznik, tak aby zliczał dopiero po załadowaniu poprawnej podstrony smile.gif


dokładnie w tym miejscu mam licznik ale nie umieszczałem go ponieważ nie to jest problemem


Cytat(Spawnm @ 2.01.2013, 23:25:41 ) *
Zacznijmy od tego że twój pomysł jest zły bo pozwala na ataki ;]
Zmień system includowania na szukanie klas-kontrolerów, obecnie masz dziurę.


to wydaje się być sensowne ale nie wiem jak się do tego zabrać
czy to napewno pomoże rozwiązać mój problem
może podasz jakiś przykład

Cytat(Spawnm @ 2.01.2013, 23:25:41 ) *
Zmień system includowania na szukanie klas-kontrolerów, obecnie masz dziurę.

  1. class Liczniki_Liczniki extends Controller
  2. {
  3. function index()
  4. {
  5. echo 'Test';
  6. }
  7. }

mam nadzieję, że drążę w dobrą stronę ale póki co nic mi z tego nie wychodzi
dostaję błąd Fatal error: Class 'Controller' not found in ...


Podpowiedzcie jak się zabrać za tą klasę kontrolera.
pafeu
Poczytałem na temat projektowania obiektowego i zapewne będę małymi kroczkami wprowadzał je na swoją stronę, ale ...
... tymczasem chciałbym skupić się na problemie jaki opisałem w tytule.
Czy szukanie klas kontrolerów rozwiąże mój problem?


Pomóżcie z tymi klasami. sekret.gif
CuteOne
Tu masz opisane jak zabezpieczyć się przed wejściem użytkowników na strony, które nie istnieją
http://forum.php.pl/index.php?s=&showt...t&p=1016184

co do tego Controllera

Controller.php
  1. class Controller {
  2. }


Klasa.php
  1. require 'Controller.php';
  2. class Klasa extends Controller {
  3. }
pafeu
Cytat(CuteOne @ 6.01.2013, 20:30:48 ) *
Tu masz opisane jak zabezpieczyć się przed wejściem użytkowników na strony, które nie istnieją

Próbowałem zmodyfikować mój sposób ładowania według podanego przez Ciebie przykładu ale niestety wejście na podstrony, których nie ma jest nadal możliwe.
Mój kod odpowiedzialny za ładowanie stron:
  1. function pobierz_parametr($id){
  2. if(isset($_GET["$id"]))
  3. {
  4. $id=$_GET["$id"];
  5. }
  6. else
  7. {
  8. $id=false;
  9. }
  10. return $id;
  11. }
  12.  
  13. $id1=pobierz_parametr('id1');
  14. $id2=pobierz_parametr('id2');
  15.  
  16. ...
  17. if($id1!=false){
  18. if (file_exists($id1.'.php')) {
  19. print licznik2();
  20. require_once($id1.'.php');
  21. } else {
  22. echo '<p></br>Strona w trakcie aktualizacji. Zapraszamy na stronę główną</p> ';
  23. }
  24. }
  25. else{
  26. if (file_exists('srodek.php')) {
  27. print licznik2();
  28. require_once('srodek.php');
  29. }
  30. ...
  31.  
  32.  

CuteOne proszę, pomóż zmodyfikować aby zablokowało dostęp do stron nieistniejących.

oneeyedsmiley02.png
CuteOne
Nigdy nie rób includowania w ten sposób
  1. include $id.'.php';


bo wystarczy w adres wpisać http:// strona.pl/?id=config a mogą wypłynąć dane serwera/bazy danych itp. itd.

Co do samego działania skryptu, to podałem w linku w jaki sposób sobie z tym radzić. Naprawdę nie wiem w czym masz problem sad.gif
pafeu
Cytat(CuteOne @ 7.01.2013, 23:46:52 ) *
Naprawdę nie wiem w czym masz problem sad.gif

mam problem z połączeniem Twojego sposobu ładowania podstron z moim sposobem na przyjazne linki sad.gif

sad.gif
CuteOne
Tylko po co chcesz modyfikować tamten kod? Wystarczy dodać licznik() pomiędzy pierwszy if() + ewentualnie sprawdzenie czy plik istnieje
pafeu
Cytat(CuteOne @ 13.01.2013, 18:21:20 ) *
Tylko po co chcesz modyfikować tamten kod? Wystarczy dodać licznik() pomiędzy pierwszy if() + ewentualnie sprawdzenie czy plik istnieje

faktycznie ale problemem pozostaje, czyli możliwość odwiedzania stron, których nie ma i licznik nalicza odwiedzeni strony nieistniejącej
jak uniemożliwić odwiedzanie i np wyświetlić stronę błędu

CuteOne
Nie wiem jak przerobiłeś ten skrypt ale bez zmian nie ma możliwości wejścia na stronę, której nie ma:

1. Użytkownik wchodzi na stronę (z automatu odpala się bootstrap - index.php)
2. W index.php sprawdzasz przesłane dane z adresu przeglądarki ($_GET)
3. Jeżeli index.php?id=stronaxxx nie istnieje lub nie podano ?id= ustawiasz ładowanie default.php
4. Jeżeli strona istnieje (id znajduje się w tablicy $modules doliczasz odwiedziny)

Piszesz o przyjaznych linkach, może masz skopany .htaccess, który nie przekierowuje wszystkich requestów na index.php?
pafeu
Cytat(CuteOne @ 7.01.2013, 23:46:52 ) *
Nigdy nie rób includowania w ten sposób
  1. include $id.'.php';

...

CuteOne jak zrobić to tak jak to powinno być zrobione czyli bezpiecznie ?
thek
Ograniczyć dostęp tylko do tego, co faktycznie istnieje i jest dozwolone. Konkretnie to o co teraz pytasz nazywa się dispatcher. Zrobisz dla Twojego rozwiązania router + sensowny dispatcher po klasach kontrolerów i masz w miarę spokój wink.gif
pafeu
Cytat(thek @ 14.01.2013, 08:35:33 ) *
Zrobisz dla Twojego rozwiązania router + sensowny dispatcher po klasach kontrolerów i masz w miarę spokój wink.gif

czytałem na ten temat ale ciężko mi to ogarnąć
może jakiś prosty, działający przykład wink.gif

ohmy.gif
CuteOne
Widzę, że masz chrapkę na naukę smile.gif, więc może zainteresuj się frameworkami? Na start polecam CodeIgniter - prosty i przyjemny framework dla małych projektów.
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.