PHP Centeri avaleht Skriptikogu Küsimuste-vastuste leht Teadete vaatamine ja saatmine Foorum - koht küsimiseks Otsingumootor Siit saad infot meie kohta

Kasutajanimi:  
  Parool: 
  Registreeri!   Unustasid salasõna?

Foorumid Programmeerimine Kogemused GET kaudu include... aga turvaline
Autor Abi Postitus Abi

jnt
GigAHerZ


Postitusi: 54
Tase: 4
Olek: Offline

Hinnang: Administratiivhinnang: 3/10Administratiivhinnang: 3/10Administratiivhinnang: 3/10
pilgutus GET kaudu include... aga turvaline

Et siis, paljud kasutavad (ja seal hulgas ka mina tegelikult) varianti, kus on vaja GET kaudu saada faili nimi ja siis too fail include'ida endal vastavasse kohta lehel. Selline asi, kui oskuslikult kasutada, tekitab teatud modulaarsuse veebilehele ja organiseerituse programmeerijale.

Probleem, mis tekib koodiga <?php include $_GET['page'].'.php'; ?> on see, et pahatahtlik kasutaja võib sellise asjaga palju paksu pahandust teha. Seetõttu mõtlesin, et võiks olla olemas pisike funktsioon, mis kontrolliks sobivaid tulemusi reaalselt eksisteerivate failide alusel.

Kood:
PHP kood:

<?php
function checkpage($page$dir='./'){
    
$d dir($dir);
    while(
false!==($entry=$d->read())){
        if(
$entry!='.' && $entry!='..'){
            if(
$entry==$page){
                return 
true;
            }
        }
    }
    
$d->close();
    return 
false;
}
?>



Idee seisneb siis peamiselt selles, et kontrollimisel mitte ei uurita, kas $_GET'iga saadud fail on olemas, vaid käiakse läbi hoopis kõik failid "lubatud" kataloogis ning vaadatakse, kas mõni neist vastab küsitud faili nimele. Niipidine kontroll tagab, et kasutaja saaks esitada "päringu" vaid kindlas kataloogis olevatele failidele.

Kuidas kasutada? Lihtne!
PHP kood:

<?php
if(checkpage($_GET['page'].'.php''lubatud_kaust')){
 include 
'lubatud_kaust/'.$_GET['page'].'.php';
}
?>



Seega laske hea maitsta, lihtne ja pisike asi, kuid samas üksjagu kasulik nii mõnelgi korral.

___________________________________________________
Kõike paremat siit poolt maailmast!

24.05.2009 14:35:48 Vajutades siia näed kasutaja jnt profiili

tobre
Asjamees


Postitusi: 1393
Tase: 9
Olek: Offline

Hinnang: Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10
RE: GET kaudu include... aga turvaline

Soovitaks pigem modulaarsuse tekitamiseks __autoload() funktsiooni kasutada, misläbi includetakse sisse vajalikud klassid.

Jõudu!

___________________________________________________
Tõnis Tobre · MSN  · E-Post

24.05.2009 21:07:20 Vajutades siia näed kasutaja tobre profiili

jnt
GigAHerZ


Postitusi: 54
Tase: 4
Olek: Offline

Hinnang: Administratiivhinnang: 3/10Administratiivhinnang: 3/10Administratiivhinnang: 3/10
RE: GET kaudu include... aga turvaline

Tegemist on vähe lihtsamatele lehtedele mõeldud funktsiooniga, milles üks fail kujutab endast "moodulit" kus sees olev kood lihtsalt kas echo'b vajalikud asjad või täidab vajalikud muutujad väärtustega. Suuremate süsteemide puhul on muidugi vaja appi võtta oop hüved, kuid väiksematel süsteemidel on see natuke overkill. :P

___________________________________________________
Kõike paremat siit poolt maailmast!

24.05.2009 22:49:20 Vajutades siia näed kasutaja jnt profiili

muidumeez
Ignorantia non est
argumentum


Postitusi: 3864
Tase: Administraator
Olek: Offline

Hinnang: Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10
RE: GET kaudu include... aga turvaline

Tsiteeritud tekst:
Tegemist on vähe lihtsamatele lehtedele mõeldud funktsiooniga, milles üks fail kujutab endast "moodulit" kus sees olev kood lihtsalt kas echo'b vajalikud asjad või täidab vajalikud muutujad väärtustega. Suuremate süsteemide puhul on muidugi vaja appi võtta oop hüved, kuid väiksematel süsteemidel on see natuke overkill. :P

Defineerime mõiste "väike süsteem"... Kas süsteemi väiksus eeldabki spageti kirjutamist või saaks ka siin viisakamalt hakkama?

___________________________________________________
An Opinion Is Like An Asshole -- Everybody Has One

25.05.2009 10:21:57 Vajutades siia näed kasutaja muidumeez profiili

laurik
_/<

Postitusi: 847
Tase: 8
Olek: Offline

Hinnang: Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10
RE: GET kaudu include... aga turvaline

Tegelikult praegu läheb vist läbi ka selline get-parameeter, mis algab kaldkriipsuga - / - selle järgi saab teoreetiliselt failisüsteemile ligi juurkaustast alates...

25.05.2009 10:35:07 Vajutades siia näed kasutaja laurik profiili

jnt
GigAHerZ


Postitusi: 54
Tase: 4
Olek: Offline

Hinnang: Administratiivhinnang: 3/10Administratiivhinnang: 3/10Administratiivhinnang: 3/10
RE: GET kaudu include... aga turvaline

Tsiteeritud tekst:
Tegelikult praegu läheb vist läbi ka selline get-parameeter, mis algab kaldkriipsuga - / - selle järgi saab teoreetiliselt failisüsteemile ligi juurkaustast alates...


Samas siiski mitte, kuna kaldkriipsuga failinimesid vaevalt tolles kindlas kataloogis eksisteerib... ja kuna ei eksisteeri, siis kontroll katkestab kohe if'i. Idee ongi just, et mitte ei kontrollita faili olemasolu, vaid kontrollitakse kõiki failinimesid kindlas kataloogis GET'iga saadud nimega.


muidumeez, no ikka päris väikeseid lehti mõtlen... Need pisikesed dünaamilised lehekesed, nagu nad on, ilma mingi cms'ita ega muud sellist.

___________________________________________________
Kõike paremat siit poolt maailmast!

25.05.2009 16:14:32 Vajutades siia näed kasutaja jnt profiili
Kokku: 25949 registreerunud kasutajat, 9711 teemat, 54603 postitust.
Täna on laupäev, 19. oktoober 2019. Kell on 00:11.

    Vaata selle lehe printerisõbralikku versiooni

Avaleht   -    Skriptikogu   -    Teated   -    Foorum   -    Reklaam   -    Tagasiside   -    Kasutamise reeglid

© Copyright 2002-2019 PHP Center. Kõik õigused reserveeritud.