Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Prośba o pomoc w zmianie kodu
Forum PHP.pl > Forum > Przedszkole
eMCe
Witam, mam problem z moją stroną. Używam takiego kodu

  1.  
  2. $rozsz=".html";
  3. if(file_exists("contents/$nazwa$rozsz"))
  4. {
  5. include("contents/$nazwa$rozsz");
  6. }
  7. else
  8. {
  9. include("contents/index$rozsz");
  10. }


Okazało się, że funkcja include nie jest bezpieczna. Próbuję zmienić to ze switch/case ale chyba nie umiem sad.gif
  1. $rozsz=".html";
  2. switch ($_GET[show])
  3. {
  4. case '$nazwa':
  5. include('contents/$nazwa$rozsz');
  6. break;
  7. default:
  8. include('contents/index.html');
  9. }


Adresy powinny się wyświetlać jako
www.adres.strny.pl/index.php?show=nazwa, gdzie nazwa jest plikiem w katalogu contents (wywoływanym w zależności od tego na jaką stronę chcę wejść, plików w contents mam około 80). Całą stronę mam tak zbudowaną, ale zwrócono mi uwagę, że są włamania przez funkcję include.

Kshyhoo
W każdym kursie opisana jest sprawa inkludowania plików poprzez funkcję switch, a w lepszych poruszona kwestia bezpieczeństwa... że nie wspomnę o szukajce na forum!
eMCe
A nie możesz mi pomóc zmienić tego kodu? Naprawdę nie wiem co w nim jest nie tak.

Wiem, że jak wstawię
  1. switch ($_GET[show])
  2. {
  3. case 'koty': include("contents/koty.html"); break;
  4. default: include('contents/index.html');
  5. }


To wszystko działa dobrze. Ale czy nie da się tak, że zamiast koty jest nazwa wywoływana w przeglądarce? Tzn. nie chcę na sztywno wpisywać koty, tylko jak kliknę adres www.ades.pl/index.php?show=psy to wyciągnie mi z katalogu contents plik psy.html, a jak adres z inną końcówką to wyciągnie mi inny plik. Nie wiem czy jasno określam o co mi chodzi...
Belze
samo Twoje podejście do tematu nie jest zbyt bezpieczne, więc sama funkcja switch nie poprawi jej.

  1. $strony = array('psy', 'koty', 'konie');
  2. $strona = (int) $_GET['akcja'];
  3. $plik = "moduly/{$strony[$strona]}.inc.php";
  4. if (file_exists($plik)) {
  5. include $plik;
  6. } else {
  7. include 'moduly/default.inc.php';
  8. }


w arrayu dodajesz pliki ktore maja byc includowane.
jezeli tego nie zrobisz, a nie bedziesz mial "default" to poprzez adres kazdy bedzie mogl uruchomic dowolny kod php. a to jest niezbyt bezpieczne..
zend
Możesz np wrzucic pliki które chcesz załadować do jednego katalogu, i zamienić wrzystkie "dziwne" znaki z get'a typu . / ; na puste znaki, ale tu uwaga, weź też pod uwagę że ktoś może zapisać je w innym systemie np szesnastkowym.
Możesz też nadać plikom specyficzny prefix, tak aby jedyne co można było załadować to pliki wyznaczone do tego np abecadlo.index.php, możesz też połączyć obie metody
eMCe
Hej, dzięki za podpowiedzi. Próbuję tak zrobić. Jednak za każdym razem jakikolwiek adres wpiszę wyrzuca mi pierwszy plik z array. Nie wiem dlaczego. Pewnie coś źle wpisuję.
zend
Pierwszy plik, czy domyślny plik? W sposobie który podał Belze odwołujesz się tak index.php?akcja=2. Zeby pisać index.php?akcja=kot mussz tak to zapisać
  1. $array = array('kot' => 'kot' , 'pies' => 'pies');
eMCe
Pierwszy plik. Dziękuję - działa. A to (int) to niezbędne? Bo z tym to nie działa smile.gif
Belze
wklej kod i wymien przykladowe linki to powiemy Ci gdzie lezy blad
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.