Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Mało kodożerny sposób na index.php?id=X - jak ?
kiler129
post
Post #1





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

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


A wiec mam dylemat natury takiej że nie wiem jak bezpiecznie includować przez get (IMG:http://forum.php.pl/style_emoticons/default/dry.gif) Widziałem już sporo stron na ktorych było index.php?id=plik.php - aż się prosi o skasowanie strony (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Ale do zeczy, mianowicie teraz mam podobny problem, jak to zrobic ale bezpiecznie i tak aby nie zajmowało 3 cyfrowej liczby linijek kody (IMG:http://forum.php.pl/style_emoticons/default/laugh.gif)
Najproście ro chyba tak:

  1. <?php
  2. $id = $_GET['id'];
  3.  
  4. if($id == 1)
  5. {
  6. include 'plik1.php';
  7. }
  8.  
  9. if($id == 2)
  10. {
  11. include 'plik2.php';
  12. }
  13.  
  14. if($id == 3)
  15. {
  16. include 'plik1.php';
  17. }
  18. ?>



Ale w takim układzie spooro lini kodu przybędzie a co za tym idzie szybkość spadnie i przy sporej liczbie odwiedzających może być już kiepsko - przykładem jest np. seriws elektroda.pl który w godzinach szcytu potrafi miec czas wykonani skryptu ponad 30 sekund !
Drugim mankamentem tego kodu jest że tutaj trudno sprawdzić czy taki id istnieje, nie chce dopuścić do sytłacji gdzie użytkownik z powodu braku pliku dostaje całą stronę błędów ....

Pomyślałem że można też tak:

  1. <?php
  2. $id = $_GET['id'];
  3. $plik = ./$id;
  4.  
  5.  
  6. if (is_readable($plik)) 
  7. {
  8.  include $plik.'.php';
  9. } 
  10. else 
  11. {
  12.  echo 'Dokument o podanym ID nie istanieje ! Jeśli zaprowadził Cie tutaj któryś z linków na stronie skontaktuj się z administratorem.';
  13. }
  14. ?>


Tylko teraz czy ten sposób jest naprawde bezpieczny ? No niby jest ./ ale jakoś ja mam talent do pisania skryptów które łątwo wykrzaczyć (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)



p.s. Powyższych kodów nie sprawdzałem ale powinny działać.


*/*/*/*EDIT*\*\*\*
Drugi kod był błedny (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) I już umiem go shackowac (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Wystarczyło napisać index.php?id=index i pokazywał sie index.php.
Aż starch pomyśleć => index.php?id=../../pwd (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Ale dobra mnijsza o to, poprawiłem go i wygląda tak:

  1. <?
  2. $id = $_GET['id'];
  3. $plik = './doc_'.$id.'.php';
  4.  
  5.  
  6. if (is_readable($plik)) 
  7. {
  8.  include $plik;
  9. } 
  10. else 
  11. {
  12.  echo 'Dokument o podanym ID nie istanieje ! Jeśli zaprowadził Cie tutaj któryś z linków na stronie skontaktuj się z administratorem.';
  13. }
  14. ?>


Więc teraz nie da się jako id podać index bo nie ma czegos takeigo jak doc_index.php, pilnowac tylko trzeba żeby żaden dokument php nie miał nazwy zaczynającej się na doc_.
Czy teraz skrypt jest bezpieczy ?

Ten post edytował kiler129 21.03.2007, 13:22:21
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kiler129
post
Post #2





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

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


Wszystko ok tylko niech ktos mi powie dlaczego ten kod nie działa:

  1. <?
  2.  
  3. if(count($_GET) == 1)
  4. {
  5.  if (isset($_GET['id'])) 
  6.  {
  7.  $tablica = array (
  8.  "1" => "logowanie",
  9.  "2" => "artykuly",
  10.  "3" => "forum"
  11.  );
  12.  $id = (int)$_GET['id']; 
  13.  $path = './resources/'; 
  14.  $asked = $path.$tablica[$id].'.php';
  15.  if (array_key_exists($id, $tablica) && file_exists($asked)) include ($asked);
  16.  }
  17.  else
  18.  {
  19.  echo 'Dokument o podanym ID nie istnieje';
  20.  }
  21. }
  22. else
  23. {
  24. $tresc = 'wstep';
  25. }
  26.  
  27. ?>


Tzn. działa ale po padaniu id np. 6718234239843 skrypt poprostu nic nie wytświetla zamista pokazac błąd o braku takiego id - co jest ?
Napewno gdzies jest błąd ale ja go nie widze ;P
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 10.10.2025 - 13:44