Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Pomysł, pytanie czy to ma sens :), od początkującego
Drav
post
Post #1





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 14.09.2008
Skąd: Polska

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


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





Grupa: Zarejestrowani
Postów: 201
Pomógł: 9
Dołączył: 23.08.2006

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


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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Najlepiej sprawdź i tyle..
Go to the top of the page
+Quote Post
Zyx
post
Post #3





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


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





Grupa: Zarejestrowani
Postów: 78
Pomógł: 3
Dołączył: 10.11.2008
Skąd: Radom

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


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>'); (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) :D:D ja tak mam (IMG:http://forum.php.pl/style_emoticons/default/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.

Ten post edytował ignas1987 15.05.2009, 07:53:30
Go to the top of the page
+Quote Post
osl
post
Post #5





Grupa: Zarejestrowani
Postów: 260
Pomógł: 41
Dołączył: 6.04.2009
Skąd: Gdańsk/okolice

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


to podaj adres strony (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Zyx słusznie mówi, najmniejsza luka w takim includowaniu pliku może potem zaowocować "cudami" na Twojej stronie...
Go to the top of the page
+Quote Post
ignas1987
post
Post #6





Grupa: Zarejestrowani
Postów: 78
Pomógł: 3
Dołączył: 10.11.2008
Skąd: Radom

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


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

Ten post edytował ignas1987 15.05.2009, 08:05:13
Go to the top of the page
+Quote Post
osl
post
Post #7





Grupa: Zarejestrowani
Postów: 260
Pomógł: 41
Dołączył: 6.04.2009
Skąd: Gdańsk/okolice

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


w wolnej chwili poczytaj sobie o LFI/RFI (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Wicepsik
post
Post #8





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

Ostrzeżenie: (20%)
X----


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





Grupa: Zarejestrowani
Postów: 78
Pomógł: 3
Dołączył: 10.11.2008
Skąd: Radom

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


Cytat(osl @ 15.05.2009, 09:05:17 ) *
w wolnej chwili poczytaj sobie o LFI/RFI (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

hehehe (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Dobre THNX!! (IMG:http://forum.php.pl/style_emoticons/default/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.

Ten post edytował ignas1987 15.05.2009, 08:30:57
Go to the top of the page
+Quote Post
Zyx
post
Post #10





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


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.

Ten post edytował Zyx 15.05.2009, 09:10:42
Go to the top of the page
+Quote Post
ignas1987
post
Post #11





Grupa: Zarejestrowani
Postów: 78
Pomógł: 3
Dołączył: 10.11.2008
Skąd: Radom

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post
slewin
post
Post #12





Grupa: Zarejestrowani
Postów: 104
Pomógł: 7
Dołączył: 9.12.2008
Skąd: wroc

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


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 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
Gryf
post
Post #13





Grupa: Zarejestrowani
Postów: 170
Pomógł: 40
Dołączył: 14.08.2008
Skąd: Katowice

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


Przecież Zyx już ci podał ../ <-- katalog wyżej ;]
Go to the top of the page
+Quote Post
sowiq
post
Post #14





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


@ignas1987,
zapoznaj się najpierw z tym.
Go to the top of the page
+Quote Post
ignas1987
post
Post #15





Grupa: Zarejestrowani
Postów: 78
Pomógł: 3
Dołączył: 10.11.2008
Skąd: Radom

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


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 (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) ale dobrze, że to wyszło, bo teraz wiadomo czego unikać (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
slewin
post
Post #16





Grupa: Zarejestrowani
Postów: 104
Pomógł: 7
Dołączył: 9.12.2008
Skąd: wroc

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Ten post edytował slewin 15.05.2009, 09:53:07
Go to the top of the page
+Quote Post
Drav
post
Post #17





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 14.09.2008
Skąd: Polska

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


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.12.2025 - 18:02