Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

3 Stron V   1 2 3 >  
Closed TopicStart new topic
> Skrypt includowania PHP
Mlodycompany
post
Post #1





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

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


Witam. Wpadłem znów na genialny pomyśł opracowania skryptu includującego strone. Oto jego Skrypt:
  1. <?php
  2. $get_name = addslashes($_GET['name']);
  3. $dir = "./";
  4. if(!($fd = opendir($dir)))
  5. exit("Bład");
  6.  
  7. if($get_name != "" && $get_name == $get_name){
  8. while($file = readdir($fd)){
  9. if($get_name == $file){
  10. include($file);
  11. }
  12. }
  13. }
  14. ?>

I teraz zaczoł się problem. A mianowicie. URL wygląda tak :index.php?name=home
zmienna $get_name = home
zmienna $file nie jest równa zmiennej $get_name ponieważ zmienna $file powinna przybrac wartosc home.php a home != home.php

I wpadłem na kolejny genialny pomysł. Oto on: dodac do $get_name koncówke .php i wtedy $get_name bedzie rowna $file. Problem jest w tym, że nie wiem jak można dodac tą końcówkę i czy wogóle się da to zrobic. Czy macie jakieś propozycje?questionmark.gifquestionmark.gif?
Go to the top of the page
+Quote Post
pyro
post
Post #2





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Cytat(Mlodycompany @ 15.04.2008, 19:50:13 ) *
Witam. Wpadłem znów na genialny pomyśł opracowania skryptu includującego strone. Oto jego Skrypt:
  1. <?php
  2. $get_name = addslashes($_GET['name']);
  3. $dir = &#092;"./\";
  4. if(!($fd = opendir($dir)))
  5. exit(&#092;"Bład\");
  6.  
  7. if($get_name != &#092;"\" && $get_name == $get_name){
  8. while($file = readdir($fd)){
  9. if($get_name == $file){
  10. include($file);
  11. }
  12. }
  13. }
  14. ?>

I teraz zaczoł się problem. A mianowicie. URL wygląda tak :index.php?name=home
zmienna $get_name = home
zmienna $file nie jest równa zmiennej $get_name ponieważ zmienna $file powinna przybrac wartosc home.php a home != home.php

I wpadłem na kolejny genialny pomysł. Oto on: dodac do $get_name koncówke .php i wtedy $get_name bedzie rowna $file. Problem jest w tym, że nie wiem jak można dodac tą końcówkę i czy wogóle się da to zrobic. Czy macie jakieś propozycje? questionmark.gif questionmark.gif ?

  1. <?php
  2. $file = $file.'.php';
  3. ?>

?


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
phpion
post
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Może skorzystaj z tego:
  1. <?php
  2. $page = (isset($_GET['page'])) ? $_GET['page'] : 'index';
  3.  
  4. $file = './pages/'.$page.'.php';
  5.  
  6. if (file_exists($file)) {
  7. include($file);
  8. }
  9. else {
  10. include('./pages/index.php');
  11. }
  12. ?>

Niepotrzebnie babrasz się z addslashes oraz kompletnie niepotrzebnie otwierasz katalog i szukasz w nim konkretnego pliku. Lepiej sprawdzić czy takowy file_exists czyli czy plik_istnieje.
Go to the top of the page
+Quote Post
marcio
post
Post #4





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


Cytat(phpion @ 15.04.2008, 19:56:47 ) *
Może skorzystaj z tego:
  1. <?php
  2. $page = (isset($_GET['page'])) ? $_GET['page'] : 'index';
  3.  
  4. $file = './pages/'.$page.'.php';
  5.  
  6. if (file_exists($file)) {
  7. include($file);
  8. }
  9. else {
  10. include('./pages/index.php');
  11. }
  12. ?>

Niepotrzebnie babrasz się z addslashes oraz kompletnie niepotrzebnie otwierasz katalog i szukasz w nim konkretnego pliku. Lepiej sprawdzić czy takowy file_exists czyli czy plik_istnieje.

Jak juz chcesz tak robic to dawaj dozwolone pliki do tablicy i przy includowaniu sprawdzaj czy plik znajduje sie w tablicy bo to jest przyklad fajnego LFI tongue.gif a jak nie zrobc na switch'u


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
phpion
post
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(marcio @ 15.04.2008, 20:02:15 ) *
Jak juz chcesz tak robic to dawaj dozwolone pliki do tablicy i przy includowaniu sprawdzaj czy plik znajduje sie w tablicy bo to jest przyklad fajnego LFI tongue.gif a jak nie zrobc na switch'u

Racja. Ale w sumie wystarczy przelecieć $_GET['page'] funkcją basename() i już uniemożliwisz wyjście poza wskazany katalog. Szkoda babrać się z tablicami czy switchami.
Go to the top of the page
+Quote Post
Mlodycompany
post
Post #6





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

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


ale mi własnie chodzilo o to aby includowalo plik ktory znajduje sie na serwerze. bo mozna zrobic tez cos takiego jak
<?php
include(''.$get_name.'.php');
?>
ale wtedy mozna zrobic cos takiego
index.php?name=http://forum.php.pl/index i wtedy zaincluduje to forum. a dopisywanie do tablicy jest monotonne.
Go to the top of the page
+Quote Post
phpion
post
Post #7





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Polecam lekturę mojej poprzedniej wypowiedzi.
Go to the top of the page
+Quote Post
marcio
post
Post #8





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


Cytat(phpion @ 15.04.2008, 19:56:47 ) *
Może skorzystaj z tego:
  1. <?php
  2. $page = (isset($_GET['page'])) ? $_GET['page'] : 'index';
  3.  
  4. $file = './pages/'.$page.'.php';
  5.  
  6. if (file_exists($file)) {
  7. include($file);
  8. }
  9. else {
  10. include('./pages/index.php');
  11. }
  12. ?>

Niepotrzebnie babrasz się z addslashes oraz kompletnie niepotrzebnie otwierasz katalog i szukasz w nim konkretnego pliku. Lepiej sprawdzić czy takowy file_exists czyli czy plik_istnieje.



Cytat(phpion @ 15.04.2008, 20:41:39 ) *
Polecam lekturę mojej poprzedniej wypowiedzi.


Chodzi o to ze tam tez jest LFI przeciez sprawdzasz czy jaki kolwiek plik ktory sie poda do get'a jest na servie miec mozna includowac wszystko etc/passwd/ i czasami ladujac pliki php sa fajne efekty albo robi sie petla podczac include etc albo przy fyckjach plikowych widac zrodlo tongue.gif

Ten post edytował marcio 15.04.2008, 22:45:53


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
phpion
post
Post #9





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(marcio @ 15.04.2008, 23:44:47 ) *
Chodzi o to ze tam tez jest LFI przeciez sprawdzasz czy jaki kolwiek plik ktory sie poda do get'a jest na servie miec mozna includowac wszystko etc/passwd/ i czasami ladujac pliki php sa fajne efekty albo robi sie petla podczac include etc albo przy fyckjach plikowych widac zrodlo tongue.gif

Pozwolę zacytować sam siebie:
Cytat(phpion @ 15.04.2008, 20:09:02 ) *
Racja. Ale w sumie wystarczy przelecieć $_GET['page'] funkcją basename() i już uniemożliwisz wyjście poza wskazany katalog. Szkoda babrać się z tablicami czy switchami.

I po sprawie. basename()" title="Zobacz w manualu PHP" target="_manual zwróci ostatni człon ścieżki podanej w adresie więc kombinacje typu /etc/passwd czy ../../etc/passwd nie przejdą, bo będzie szukany plik ./pages/passwd.php
Go to the top of the page
+Quote Post
Babcia@Stefa
post
Post #10





Grupa: Zarejestrowani
Postów: 654
Pomógł: 17
Dołączył: 19.03.2006
Skąd: z kosmosu ;)

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


Niewiem po co tyle kombinowania.

  1. <?php
  2. $page = addslashes($_GET['page']);
  3. if(is_file('pages/' .$page. '.php') AND !empty($page))
  4. @include('pages/' .$page. '.php');
  5. else
  6. include('404-not-found.html');
  7. ?>


Pozdrawiam


--------------------
Środowisko testowe (desktop) - Gedit, lighttpd, sftp, rsync, xfce4-terminal, chromium, firefox4 | System: Gentoo ~x86
O'Neill - serwer WWW @ lighttpd, links, nano, rsyncd, sftpd | System: Debian
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #11





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Cytat(Babcia@Stefa @ 16.04.2008, 07:49:25 ) *
Niewiem po co tyle kombinowania.

  1. <?php
  2. $page = addslashes($_GET['page']);
  3. if(is_file('pages/' .$page. '.php') AND !empty($page))
  4. @include('pages/' .$page. '.php');
  5. else
  6. include('404-not-found.html');
  7. ?>


Pozdrawiam


Czy czytasz ze zrozumieniem?


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
Babcia@Stefa
post
Post #12





Grupa: Zarejestrowani
Postów: 654
Pomógł: 17
Dołączył: 19.03.2006
Skąd: z kosmosu ;)

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


Cytat(Sedziwoj @ 16.04.2008, 12:27:00 ) *
Czy czytasz ze zrozumieniem?


Tak, czytam.

Jak masz pisać takie bezsensowne posty które nic nie wnoszą do tematu, to nie pisz ich.

@topic
Mlodycompany, Twój pomysł jest świetny w pewnym stopniu, to znaczy:

1. Można go przerobić tak aby na stronie błędów (404) było wyszukiwanie strony pokrewnej - to znaczy "Czy chodziło Ci o ...".
To jest jeden z dobrych pomysłów, widziałem już kiedyś coś takiego ale nie myślałem aby napisać to..

Do tego można użyć levenshteina i będzie dobrze :]

Pozdrawiam.

Ten post edytował Babcia@Stefa 16.04.2008, 14:54:09


--------------------
Środowisko testowe (desktop) - Gedit, lighttpd, sftp, rsync, xfce4-terminal, chromium, firefox4 | System: Gentoo ~x86
O'Neill - serwer WWW @ lighttpd, links, nano, rsyncd, sftpd | System: Debian
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #13





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Cytat(Babcia@Stefa @ 16.04.2008, 15:50:53 ) *
Tak, czytam.


Ale nie widzisz, że masz dziury w skrypcie, które były już wymienione.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
marcio
post
Post #14





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


Cytat(Babcia@Stefa @ 16.04.2008, 15:50:53 ) *
Tak, czytam.

Jak masz pisać takie bezsensowne posty które nic nie wnoszą do tematu, to nie pisz ich.

@topic
Mlodycompany, Twój pomysł jest świetny w pewnym stopniu, to znaczy:

1. Można go przerobić tak aby na stronie błędów (404) było wyszukiwanie strony pokrewnej - to znaczy "Czy chodziło Ci o ...".
To jest jeden z dobrych pomysłów, widziałem już kiedyś coś takiego ale nie myślałem aby napisać to..

Do tego można użyć levenshteina i będzie dobrze :]

Pozdrawiam.



Cytat(Sedziwoj @ 16.04.2008, 18:05:28 ) *
Ale nie widzisz, że masz dziury w skrypcie, które były już wymienione.


@Babcia@Stefa bez obrazy ale jak nie wiesz to sam nie pisz smile.gif ale zdaje mi sie basename() nie zalatwia sprawy w 100% bo mozna miec w tym samym katalogu wszystkie inne pliki php tak jak ja to mam i wtedy co?Wiec wole uzywa if'y/switch albo dac tablice i in_array() + file_exists i system bledow lub cos tongue.gif


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #15





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


@marcio
Po co tworzyć listę, stwórz sobie klasę abstrakcyjną akcji, i każda akcja musi po niej dziedziczyć, więc przekazujesz tylko nazwy obiektów (czy jakąś część), i sprawdzasz czy klasa istnieje i czy dziedziczy po action ;] A najlepiej mieć to połączone z konkretną lokalizacją plików akcji, aby burdelu nie było.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
marcio
post
Post #16





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


Heh nie znam sie na OOP wiec nie dam rady tego napisc ale idea jest obra moze pokazalbys jak ty to robisz bo do tej pory ja tak to robilem jak napisalem wczesniej i wszystko dobrze i bezpiecznie dzialalo ale moze bylo lamersko napisane tongue.gif


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #17





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Cytat(marcio @ 16.04.2008, 19:58:22 ) *
Heh nie znam sie na OOP wiec nie dam rady tego napisc ale idea jest obra moze pokazalbys jak ty to robisz bo do tej pory ja tak to robilem jak napisalem wczesniej i wszystko dobrze i bezpiecznie dzialalo ale moze bylo lamersko napisane tongue.gif


Wiesz, skoro działa i wystarcza, to znaczy że dobrze, nie wiem dlaczego miało by być "lamersko".

Ale możesz coś w tym stylu:
  1. <?php
  2. interface IAction {
  3.  public function run();
  4. }
  5. ?>

a w głównym kontlorerze:
  1. <?php
  2. if( !ctype_alfnum( $_GET['action'] ){
  3.  //Not found
  4. }
  5. $strClassName = 'prefix' . $_GET['action'];
  6. if( class_exists( $strClassName ) ){
  7.  $objAction = new $strClassName();
  8.  if( $objAction instanceof IAction ){
  9. $objAction->run();
  10.  }
  11. }
  12. ?>

W tym przypadku przydaje się autoloader dobrze napisany, aby ładował akcje sam.
Oczywiście co przekazujesz do akcji, czy akcja jest tylko interfejsem (lepiej nie), czy też jest abstrakcyjna, to potem ułatwia, masz pewne rzeczy z głowy. Np. jak chcesz autoryzacje, taką prostszą to może wystarczyć
UserFactory::gerAuth()->mustLevel( iUserAuth::ADMIN );

Lub po prostu odpowiednie dziedziczenie, po abstrakcji z autoryzacją i zaimplementowanie odpowiedniej metody...
Sposobów jest wiele, ale obiektowe podejście wiele rzeczy ułatwia jak się dobrze zrobi.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
Mlodycompany
post
Post #18





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

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


Zauważyłem, że mój temat wyjawnił u was dużo zapału do odpowiadania, ale także do kłutni. Może napisze do czego dąże. Chciałbym miec skrypt aby includował strone tylko z serwera, a nie z innego serwera. Może dacie mi gotowca i bedzie po sprawie tongue.gif
Go to the top of the page
+Quote Post
phpion
post
Post #19





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




@Mlodycompany:
Mało ci gotowców w tym jednym poście? blinksmiley.gif
Go to the top of the page
+Quote Post
Mlodycompany
post
Post #20





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

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


He he. Powiem tak. Przygodę z PHP zaczołem niedawno więc nie wiem który jest najlepszy, więc proszę was o wybranie najlepszego z tych biggrin.gif
Go to the top of the page
+Quote Post

3 Stron V   1 2 3 >
Closed 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 - 07:29