TietokoneetOhjelmistot

PHP on globaali muuttuja toiminnossa. Tee globaali muuttuja PHP: ssä

Jotta voit luoda täydellisen sivuston, jolla on laaja toiminto, sinun on tiedettävä paljon siitä. Mutta mikä voi antaa sille todellisen ainutlaatuisuuden on PHP. Tässä ohjelmointikielessä olevaa globaalia muuttujaa ei käytetä kovin usein, mutta joskus on tarpeen tietää, miten se toimii. Tutkalla mitä se on ja miten se toimii, otamme tämän artikkelin.

laajuus

Tämä on kontekstin nimi, jossa muuttuja on määritelty. Useimmissa tapauksissa niillä on vain yksi ulottuvuus. Kun PHP: n globaalit muuttujat ladataan muista tiedostomuodoista, ne voidaan sisällyttää (mukaan) ja vaatia (vaatia).

Oletusarvoisesti ne rajoitetaan funktion paikalliseen soveltamisalaan. Ja miten haluat, että tiedostot muuttavat sen rajojen ulkopuolelta, ja voiko niitä myös käyttää? Tätä varten PHP tarjoaa myös globaalin muuttujan.

Avainsana "globaali"

Mutta kuinka julistaa globaali PHP-muuttuja? Tavoitteen saavuttamiseksi sana "globaali" auttaa meitä. Sinun täytyy sijoittaa se ennen muuttujaa, jonka haluat tehdä globaaliksi (esimerkiksi globaali "Variable").

Tällaisen ohjeen toteuttamisen jälkeen jokainen tiedosto voi käsitellä tietoja. Jos jonkin verran viittauksia tähän muuttujaan, ohjelma kiinnittää aina huomiota globaaliin versioon.

Miksi tällainen outo muotoilu? Tosiasia on, että samanaikaisesti tämän kanssa voi olla paikallisia versioita. Mutta ne ovat käytettävissä vain niissä tiedostoissa, joissa ne on ilmoitettu. Ja kaikille muille, PHP-luokan globaalit muuttujat toimivat. Siksi sinun on oltava varovainen. Ja niin ei ole epäilystäkään, tässä on esimerkki siitä, miten he näyttävät: globaali a.

Koska jos yhdellä tiedostolla on pääsy useisiin muuttujiin, se aiheuttaa niiden ristiriitaisuuden. Mutta täällä ei voi sanoa täsmälleen - paikallinen tai globaali muuttuja luetaan tai virhe syntyy. Joten, jos se on kirjoitettu funktioon, niin ei pitäisi olla mitään ongelmia. Mutta muuttujalla sen rajojen ulkopuolella on ongelmallista. Siksi on tarpeen seurata tarkasti ohjelmakoodin kokoonpanon rakennetta ja varmistaa, että konfliktin edellytykset eivät edes ole olemassa.

Toinen vaihtoehto tallennukseen

Onko mahdollista luoda globaali muuttuja PHP: ssä toisella tavalla? Kyllä, eikä edes yhtä. Tarkastellaan ensin $ GLOBALS. Tämä on assosiatiivinen array. Avain siinä on nimi. Arvo on globaalin muuttujan sisältö. On huomattava, että tämä taulukko ilmoituksen jälkeen on missä tahansa laajuudessa. Tämä antaa perustan harkita sitä superglobal. Näyttää siltä, että: $ GLOBALS ['Variable'].

Ennalta määritetyt / superglobals

Jokaisella ohjelmointikielellä on joitain nimiä, jotka on varattu sen yksittäisille toiminnoille. Siksi et voi luoda globaaleja muuttujia samassa nimessä PHP: ssä.

Tässä ohjelmointikielessä on erityispiirteitä. Joten tärkeintä on, että ennalta määritellyillä muuttujilla ei ole "super" -asetusta, eli ne eivät ole käytettävissä kaikissa paikoissa. Kuinka voin korjata tämän? Jotta ennalta määritetty muuttuja olisi saatavissa joillakin paikallisilla alueilla, se on ilmoitettava seuraavasti: globaali "muuttuja". Se näyttää olevan sama kuin aiemmin kerrottiin, eikö? Totta, mutta ei oikeastaan. Katsotaanpa esimerkkiä "torjumisesta":

  • Global $ HTTP_POST_VARS;
  • Echo $ HTTP_POST_VARS ['nimi'].

Tunnetko erot niiden välillä? Huomaa, että PHP: ssä ei tarvitse käyttää globaalia muuttujaa toiminnossa. Se voidaan sijoittaa siihen sisältyvään tiedostoon.

Linkit ja turvallisuus

Kuten näette, PHP: ssä globaalin muuttujan luominen ei ole ongelma. Mutta onko linkkien ominaisuuksia? Kyllä, globaalissa käytössä voi olla odottamatonta toimintaa. Mutta ennen tätä hieman taustaa.

Versiossa 4.2.0 rekisteri_globals-direktiivi muuttui alkaen päälle, kun se oli päällä. Useimmille käyttäjille tämä ei ole kovin tärkeä, mutta turhaan. Loppujen lopuksi tämä vaikuttaa suoraan kehitettävän tuotteen turvallisuuteen. Jos tarvitset globaalin muuttujan, tämän parametrin PHP-direktiivi ei vaikuta siihen suoraan. Mutta virheellinen käyttö voi jo luoda ennakkotapauksia turvallisuudesta.

Joten jos register_globals on päällä, ennen kirjallisen koodin suorittamista aletaan alustetaan erilaisia muuttujia, joita tarvitaan esimerkiksi HTML-lomakkeiden lähettämiseen. Siksi päätettiin poistaa se käytöstä.

Miksi tämän direktiivin tila on php: ssä globaalissa muuttujassa monien mielestä? Tosiasia on, että kun valtio on päällä, kehittäjät eivät aina kykene itsenäisesti vastaamaan kysymykseen siitä, mistä se on peräisin. Toisaalta se helpotti koodin kirjoittamista. Toisaalta tämä aiheutti tietoturvauhan. Siksi virheiden välttämiseksi sekä tietojen ja direktiivin sekoittumisen estämiseksi.

Katsokaamme nyt myös ei-suojattua koodia ja kuinka tapauksia voidaan havaita, kun PHP-muuttujan muuttujien ilmoittaminen liittyy väärentämisyrityksiin. Tämä on välttämätöntä, jotta voidaan luoda paitsi kauniita, mutta myös vakaita työkohteita, jotka eivät murtaudu ensimmäisellä matkalla.

Vaarallinen koodi

Todetaan, että muuttuja on pätevä niille, joille on myönnetty lupa:

Jos (authenticate_user ()) {
$ Authorize = true;
}

Jos ($ valtuuttaa) {
Sisällytä "/highly/sensitive/data.php";
}

Tässä tilassa muuttuja voidaan asettaa automaattisesti. Koska tietoja voidaan yksinkertaisesti korvata ja niiden alkuperää ei ole vahvistettu, kukaan voi siirtää tällaisen tarkastuksen ja jäljitellä jonkun muun. Jos halutaan, hyökkääjä (tai vain utelias, mutta kokematon henkilö) saattaa rikkoa komentosarjan logiikkaa.

Jos muutat direktiivin arvoa, tämä koodi voi toimia oikein, kuten tarvitsemme. Muuttujien alustus ei kuitenkaan ole pelkästään ohjelmoinnin hyvä sävy, vaan myös antaa meille takeet vakaudesta.

Koodin vankka versio

Tämän tavoitteen saavuttamiseksi voit joko katkaista direktiivin toiminnan tai rekisteröidä monimutkaisemman koodin. Esimerkiksi tämä on seuraava:

Jos (isset ($ _ SESSION ['käyttäjätunnus']))) {

Echo "Hei {$ _ SESSION ['username']} ";

} Else {

Echo "Hei Vieras
";
Echo "Hei, käyttäjä!";

}

Tällöin on vaikea korvata. Mutta silti se on mahdollista. Tätä varten on huolehdittava siitä, että nopeat vastevälineet toimitetaan. Jos haluat sisällyttää globaaleja muuttujia PHP: hen, voit käyttää seuraavaa työkalua: jos tunnemme alueen, jossa arvo saadaan, voimme rekisteröidä sen niin, että käsikirjoitus tarkistaa tämän käyttämällä kartoitusta. Tämä ei tietenkään takaa täysin suojaa arvojen korvaamista vastaan. Mutta tässä mahdollisten vaihtoehtojen etsiminen vaikeuttaa huomattavasti.

Etsii korvaamistarkistuksen

Tarkastellaan, miten ymmärrät aiemmin kirjoittamasi. PHP: n globaaleissa muuttujissa funktiossa, joka annetaan alla, sinun on ilmoitettava itse. Voidaan sanoa, että tämä on jonkinlainen kotitehtävä opettamaan oppia. Tässä on koodi:

Jos (isset ($ _ COOKIE ['C_COOKIE'])) {
}} {Isset ($ _ POST ['C_COOKIE'])) {{C_COOKIE}

Mail ("administrarot@example.com", "Varoitus, käsikirjoitus merkitsi yrittävän hakata ja pilata tietoja, $ _SERVER ['REMOTE_ADDR']);
Echo "Security on vaarantunut tai yritetty tehdä niin." Järjestelmänvalvoja ilmoitti ";
exit;

} Else {
}
?>

Ja nyt selitys sille. Muuttuja C_COOKIE tulee meille luotettavasta lähteestä. Vahvistetun tuloksen tarkastamiseksi tarkistamme sen arvon, ja jos ongelmat ilmenevät, ilmoita siitä ylläpitäjälle. Jos mitään ei ole tullut, ei ole ryhdyttävä toimiin. On ymmärrettävä, että vain rekisterin_globals-direktiivin poistaminen käytöstä ei tee koodia turvalliseksi. Tämän vuoksi kaikki muuttujat, jotka komentosarja vastaanottaa käyttäjältä, on tarkistettava odotetulle arvolle.

johtopäätös

Tämä on yleensä ja kaikki, mitä on tarpeen tietää globaaleista muuttujista, jotta he voisivat menestyksekkäästi ja turvallisesti käyttää heitä toiminnassaan. Tietenkin sanoa, että on täysipainoinen takuu, jota kukaan ei voi käyttää - keksejä parantavat jatkuvasti menetelmiä ja taitoja. Siksi on toivottavaa rajoittaa globaalien muuttujien käyttöä koodissa maksimiin. Onneksi tämän ohjelmointikielen rakentaminen ja ominaisuudet voivat saavuttaa tämän tavoitteen. Onnea!

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 fi.delachieve.com. Theme powered by WordPress.