Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Pomysł, pytanie czy to ma sens :)
Forum PHP.pl > Forum > Przedszkole
Drav
Witam. Otóż wpadłem sobie na pomysł, aby zrobić moją stronę możliwie najlepiej przystosowaną do zmian i w tym celu utworzyć plik główny index.php, i on byłby główną "podporą" całej strony tzn cały lay + menu i pusty środek.
Do owego pustego środka ładowałyby się strony z samym tekstem za pomocą takiegoż linku

  1. < a href="adresstrrony.pl/index.php?strona=newsy">....</a>

następnie skrypt
  1. <?php
  2. include"strony/newsy.php";
  3. if ($strona='newsy') {
  4. include"strony/newsy.php"; }
  5. itd... ?>

Interesuje mnie czy po ładowaniu tychże stron działałby skrypt (tzn czy podliczałby wszystkich gości na stronie neizależnie od tego co zostało załadowane funkcją include (wydaje mi się, ze tak, ale upewnić się nie zaszkodzi)
  1. <?php
  2. $polaczenie=mysql_connect('x','x','x')
  3.    or die('Nieudane połączenie z bazą danych...');
  4.  
  5.    or die('Nieudane wybranie bazy danych...');
  6.    
  7. $czas=mktime();
  8. $ip=$_SERVER['REMOTE_ADDR'];
  9. $staryczas=mktime()-120;
  10.  
  11.  
  12. $zapytanie=mysql_query("DELETE FROM online WHERE czas<'$staryczas'");
  13.  
  14. $link=mysql_query("SELECT ip FROM online WHERE ip='$ip'");
  15. $ile=mysql_num_rows($link);
  16.  
  17. if($ile==0)
  18.    {
  19.    mysql_query("INSERT INTO online VALUES(NULL,'$ip','$czas')");
  20.    }
  21. else
  22.    {
  23.    mysql_query("UPDATE online SET czas='$czas' WHERE ip='$ip'");
  24.    }
  25. $link=mysql_query("SELECT * FROM online");
  26. $ile=mysql_num_rows($link);
  27. $max=file('max.txt');
  28. if($ile>$max[0])
  29.    {
  30.    $plik=fopen('max.txt',w);
  31.    flock($plik,2);
  32.    fputs($plik,$ile);
  33.    flock($plik,3);
  34.    fclose($plik);
  35.    }
  36.  
  37. echo 'Gości online: '.$ile.', ';
  38. echo 'najwięcej osób online: '.$max[0].'';
  39. ?>
i czy takie rozwiązanie ma w ogóle jakikolwiek sens.

Jestem całkowicie poczatkujący w php, więc jesli coś robie źle to chciałbym wiedziec co dokładnie i jak powinno to poprawnie wyglądać.
bobo168
Ma to jakiś sens sam czasami korzystam z takiego rozwiązania jest bardzo wygodne... Ale tutaj masz bardziej uniwersalny kod:
  1. <?php
  2. if (!isset($_GET['strona'])) {
  3.    $_GET['site'] = 'plik ze strona glowna';
  4. }
  5. include ($_GET['strona'].'.php');
  6. }
  7. ?>


A czy skrypt będzie działał no powinien tongue.gif Najlepiej sprawdź i tyle..
Zyx
Tak, super-uniwersalny... index.php?strona=index i życzę miłego dnia. Rozwiązania tego typu i owszem, stosuje się w całkiem sporej liczbie projektów, ale umieszczenie tak prymitywnego kodu bez żadnych zabezpieczeń to wręcz zaproszenie złośliwych do włamania bądź rozwalenia strony.

Drav -> zapakuj poszczególne akcje, jakie wykonuje strona, do jednego katalogu, pliki bibliotek itd. czyli wszystko, co powinno wykonywać się na większej ilości podstron, do innych katalogów. Następnie przy ładowaniu sprawdź zmienną $_GET['strona'] czy jak ją tam chcesz nazwać i przepuść ją przez następujący filtr:

1. Jej długość musi mieścić się w określonym przedziale.
2. Musi zawierać wyłącznie znaki alfanumeryczne, tj. litery alfabetu łacińskiego, cyfry i ew. podkreślenia.
3. W szczególności, nie może zawierać znaków ../, ukośników ani kropek.
4. Budujesz z tego nazwę pliku i sprawdzasz, czy plik istnieje. Jeśli tak, ładujesz go, jeśli nie, ładujesz coś predefiniowanego.

Bez tych zabezpieczeń taki skrypt zamieni się w eksplorator kodu Twojej strony i może Ci niesamowicie nabruździć.
ignas1987
Wydaje mi się, że ilość filtrów nie musi być aż taka... wystarczy instrukcja if file_exists() - jeżeli plik istnieje to includuje stronę... jeżeli nie... to wstawiasz echo('<font size="20" color="red">NO I CZEGO KOMBINUJESZ HAKIERZE!!</font>'); biggrin.gif:D:D ja tak mam biggrin.gif

Wracając do Gości on-line... powiem tak... słyszałem że jeżeli includuje się plik ze skryptem gości on-line, licznik może nie działać poprawnie... Ja znalazłem na to sposób. Mianowicie w index.php mam stałe elementy, i w jednym z nich można wstawic ten kod bezpośrednio. NIE INCLUDOWAĆ tego skryptu.
osl
to podaj adres strony winksmiley.jpg
Zyx słusznie mówi, najmniejsza luka w takim includowaniu pliku może potem zaowocować "cudami" na Twojej stronie...
ignas1987
hmmmm...
Taka sytuacja:
Ktoś wpisuje w zmienną $_GET[strona] np. kontakt... skrypt dodający tą część strony wygląda następująco:

  1. <?php
  2. $strona = $_GET[strona];
  3. include("page/$strona");
  4. ?>


Jeżeli będzie to kontakt to includuje kontakt jeżeli nie to nic nie powinien zrobić. I teraz jeżeli wstawie jakąś funkcje czy skrypt w tą zmienną to ona g... zrobi. Oczywiście to wersja na szybko, bo w pracy jestem i nie moge pisać ;P
osl
w wolnej chwili poczytaj sobie o LFI/RFI winksmiley.jpg
Wicepsik
Skrypt kolegi który zrobił dla mojej strony ;]


  1. <?php
  2. if (!empty($_GET['menu'])) {
  3.        $name = urldecode($_GET['menu']);
  4.        $reg = '/^[a-zA-Z0-9]+$/';
  5.        if (preg_match($reg, $name)) {
  6.            if (file_exists('strony/'.$name.'.php')) {
  7.                include('strony/'.$name.'.php');
  8.            }else{
  9.                echo '<center>Plik nie istnieje!</center>';
  10.            }
  11.        }else{
  12.            echo 'Niedozwolone znaki w nazwie pliku';
  13.        }
  14.    }else{
  15.        include('strony/news.php');
  16.    }
  17. ?>
ignas1987
Cytat(osl @ 15.05.2009, 09:05:17 ) *
w wolnej chwili poczytaj sobie o LFI/RFI winksmiley.jpg

hehehe winksmiley.jpg Dobre THNX!! winksmiley.jpg
hmm... ale z drugiej strony ja mam zabezpieczone include("page/$strona") z tego co wyczytałem to te sposoby działają tylko jeżeli masz skrypt includujący i stronę includowaną w katalogu głównym strony... ale ogólnie jeszcze tego nie znam więc może ktoś mi to wytłumaczy na pw.
Zyx
ignas1987 -> załóżmy, że Twój skrypt, co podałeś, nazywa się "index.php". Teraz ja robię: index.php?strona=../index.php i również życzę miłego dnia, bo Twoje genialne zabezpieczenie najwyraźniej nie zadziałało. Wydawać wydaje Ci się źle, i to bardzo. Większa ilość filtrów jest niezbędna.
ignas1987
Ups... we wcześniejszym poście nie napisałem że skrypt sprawdza czy dany plik $strona.php istnieje... jeżeli nie to nie includuje tylko wypisuje tekst np. "No i czego kombinujesz" ;P biggrin.gif więc jeżeli zmienna ma jakąś inną wartość tzn. nazwę niż pliki w folderze to wydaje mi się że nie będzie kłopotu
slewin
widzę ,że trafiłem na dość interesującą dyskusję . Ja mam pytanie tego typu jak bym zrobił standardową instrukcję
  1. <?php
  2. switch ($_GET['operator'])
  3. {
  4.    case 2:
  5.        include("informacje.php");
  6.        break;
  7.    case 3:
  8.        include("./strony/kontakt.php");
  9.        break;
  10. ...itd
  11. default:
  12.        include("cos_tam.php");
  13. }
  14. .
  15. ?>
. Czy też taki skrypt jest podatny na ataki ,szkodliwe modyfikacje ... oraz czy jak użyje modrewrite do maskowania czy coś się zmieni questionmark.gif
Gryf
Przecież Zyx już ci podał ../ <-- katalog wyżej ;]
sowiq
@ignas1987,
zapoznaj się najpierw z tym.
ignas1987
ok... u mnie ten sposób ataku raczej nie zadziała Moja strona co prawda dopiero się buduje, ale możecie sprawdzić czy ten atak działa biggrin.gif ale dobrze, że to wyszło, bo teraz wiadomo czego unikać winksmiley.jpg
slewin
Cytat(sowiq @ 15.05.2009, 10:29:43 ) *
@ignas1987,
zapoznaj się najpierw z tym.

Ja też się z tym zapoznałem i dalej tego nie rozumie questionmark.gif LFI (Local File Include) czyli ktoś wczytuje na stronę plik
który nie był dla niego przeznaczony. Sprawdzam u siebie na stronie i nie widzę efektu , tylko taki że ładuje mi domyślną strone za każdym razem gdy próbuje wywołać coś innego . Specjalnie zrobiłęm katalog hasla/haslo_do_ftp.txt wpisuje index.php?operator=../hasla/haslo_do_ftp.txt i nic się nie dzieje questionmark.gif
O co chodzi z tym LFI . Ten gość pisze gdy mamy "magic_quotes_gpc = Off" oraz "register_globals = On" to jestem podatny na ataki a gdy ja ma ustawione to na On i na Off to taki atak jest niemożliwy questionmark.gif
Drav
chciałbym wiedzieć jak to rozwiązanie ma się do wyszukiwarek, tzn czy informacje includowane na np stronie ?strona=nowe będą uwzględniane jako cała strona smile.gif
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.