Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Prośba o pomoc w zmianie kodu
eMCe
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 1.06.2010

Ostrzeżenie: (0%)
-----


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.

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Kshyhoo
post
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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!


--------------------
Go to the top of the page
+Quote Post
eMCe
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 1.06.2010

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
Belze
post
Post #4





Grupa: Zarejestrowani
Postów: 50
Pomógł: 4
Dołączył: 15.09.2003
Skąd: warszawa

Ostrzeżenie: (0%)
-----


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..

Ten post edytował Belze 1.06.2010, 07:28:21
Go to the top of the page
+Quote Post
zend
post
Post #5





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
eMCe
post
Post #6





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 1.06.2010

Ostrzeżenie: (0%)
-----


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ę.
Go to the top of the page
+Quote Post
zend
post
Post #7





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

Ostrzeżenie: (0%)
-----


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');


Ten post edytował zend 1.06.2010, 17:35:14
Go to the top of the page
+Quote Post
eMCe
post
Post #8





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 1.06.2010

Ostrzeżenie: (0%)
-----


Pierwszy plik. Dziękuję - działa. A to (int) to niezbędne? Bo z tym to nie działa smile.gif

Ten post edytował eMCe 1.06.2010, 17:49:46
Go to the top of the page
+Quote Post
Belze
post
Post #9





Grupa: Zarejestrowani
Postów: 50
Pomógł: 4
Dołączył: 15.09.2003
Skąd: warszawa

Ostrzeżenie: (0%)
-----


wklej kod i wymien przykladowe linki to powiemy Ci gdzie lezy blad
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 22:15