Php-sukupolvi eri valikoista. Tiedostotoiminnot SQL-injektioiden havaitsemisen jälkeen. Kuinka tehdä valikon linkistä ei-aktiivinen, jos vierailija on tällä sivulla

Jos olet kiinnostunut vastauksesta kysymykseen verkkosivustovalikon luomisesta, olet tullut oikeaan osoitteeseen.

Harkitsemme luomista dynaaminen valikko php:ssä, kirjoitettu erityisesti ohjelmointinukkeja varten sekä niille, jotka ovat vielä tankissa.

Oppitunti 3. Valikon tekeminen php:ssä verkkosivustolle dynaamiseksi - tuteille

Luodaan verkkosivuillemme tuleva ulkoasu. Tätä varten piirrämme erittäin kauniin verkkosivuston Photoshopissa ja leikkaamme sen paloiksi. Kuvitellaan, että otsikkoa, logoa, valikkoa ja alatunnistetta ei ole kirjoitettu sanoin, kuten tässä esimerkissä, ja nämä ovat hienosti ja värikkäästi suunniteltuja verkkosivuston elementtejä.

Luodaan esimerkiksi kolme sivua ja kutsumme niitä osioksi 1, osio 2, jakso 3

Tämä teksti on tarkoitettu eri sivuja se on erilainen, mutta emme vaivaudu siihen ja jätämme sen sellaiseksi kuin se on kaikilla sivuilla.

Aloitetaan verkkosivuston luominen PHP:llä.

1. Valitse ylä-, logo-, valikko- ja alatunnistelohkot erillisiksi tiedostoiksi php- tai html-tunnisteella

header.html

logo.html

menu.html

alatunniste.html

Lisätään tiedosto tällä tekstillä, jotta voimme nähdä sen kaikilla sivuilla. Soitetaan hänelle text.html

Huomautus. Jatkossa säilytän lisätietoa suoraan tiedostossa. text.html

2. Luodaan sivustollemme malli PHP:llä.

Teemme tämän yksinkertaisella tavalla - tallenna oikea tiedosto, mutta php laajennus ja poistaa kaiken tekstisisällön. Se ei ehkä ole ammattimaista, mutta se on ymmärrettävää, mutta monimutkaistamme kaiken myöhemmin. Nyt tärkeintä on ymmärtää asettelun periaate.

3. Emme enää tarvitse template.html-tiedostoa.

Hänen ansiosta meillä on käsitys siitä, miltä sivustomme tulee näyttämään.

4. Mallimme on template.php-tiedosto

Lisäämme nyt kaikki sivuston elementit siihen käyttämällä include-komentoa.

5. Luodaan kolme sivua, kuten alun perin aioimme tehdä.

Osa 1, soitetaan 1.php

Osasto-2, soitetaan 2.php

Osa 3, soitetaan 3.php

Tätä varten voit käyttää yksinkertaisimmalla komennolla Tallenna nimellä...

Selitän pienimmille: avaa tiedosto template.php ja paina sitten Tallenna nimellä... ja tallenna se nimellä 1.php, toista toimenpide ja tallenna sivuston sivut peräkkäin 2.php, 3.php

Saimme 3 sivua samalla kuviolla. Liitä se vain tiedoston sijaan text.html toinen, täydentää erilaisia ​​kuvia tai mikä tahansa html-koodeja, skriptit ja kunkin sivun sisältö ovat yksilöllisiä.

Huomio!

Jos tiedostoa ei luoda index.php pääsivulle, sitten selaimessa, kirjoittamalla sivuston osoite, emme näe itse sivustoa, vaan vain hakemistorakenteen (kansioluettelon).

Voit katsoa Denverissä ja nähdä itse. Korjataan tilanne - luo tiedosto index.php ja soitetaan ilman pitkiä puheita Koti. Luodaan samalla tiedosto text-home.html ja käyttämällä komentoa sisältää liitä se juuri luomaamme kotisivu sivusto.

6. Kuinka tarkastella verkkosivustoa php:ssä?

Emme vain näe mitä tapahtui. Tämä ei ole enää html-laajennuksella varustettu malli.

Mutta ei sekään ongelma. Tarvitsemme omamme, ts. paikallinen palvelin tietokoneella. Tätä varten asennamme Denverin ja katsomme työmme tulosta selaimessa ilman verkkoa.

Nyt on järjestys. Kirjoitin sivuston osoitteen ja näin kaiken, mikä oli juuri luotu normaali muoto suunnittelun kanssa.

Otetaan nyt sivuston PHP-valikko.

1. Avaa tiedosto menu.html ja muuta osiot 1, 2 ja 3 linkeiksi sivustolla. PHP:n linkkejä luodaan eri tavoin.

Tehtävämme on oppia tuntemaan PHP:llä luotu sivusto. Siksi teemme linkkejä kuten tavalliselle staattiselle sivustolle Osa 1 jne.

Rakastan ehdottomasti tätä linkin luomisprosessia Macromedia Dreamweaverissa. On aikaa korjata OK ja juo kahvia.

2. Kuinka tehdä valikon linkki ei-aktiiviseksi, jos vierailija on tällä sivulla.

Vierailijan on helpompi navigoida sivustolla tietäen, millä sivulla hän on.

Jos olet noudattanut kaikkia vaiheita tarkasti kohta kohdalta, näet, että kaikki valikon linkit ovat aina aktiivisia. Kuinka korjata se?

Muistetaan ensin määritelmä, mikä se on Ehdolliset lausunnot

– tämä on silloin, kun jokin toiminto suoritetaan tai sitä ei suoriteta olosuhteista riippuen.

Tehdään se seuraavat toimet:

if ($master == "pää")// tämä ehto. Jos se suoritetaan, tähän valikon kohtaan echo-komennolla lisätään tavalliset HTML-tunnisteet, joissa on merkintä "Home".

kaiku"

Koti

";

muu// tarkoittaa "muuten" - mitä tapahtuu, jos ehto ei täyty. Tässä tapauksessa, jos ehto ei täyty, merkintä "Etusivu" on linkki, joka johtaa pääsivulle.

kaiku"

Koti

";

  • Keksimme ehdon, mutta niin tarkista muuttujasinun täytyy kysyä sitä.

Tätä varten sijoitamme seuraavat koodilohkot kaikille sivuille:

$master = "Pää";

$master = "Osa 1";

$master = "Osa 2";

$master = "Osa 3";

Kuten näet, jokaisella sivulla on oma koodinsa.

Joten käytännön vaiheemme PHP-valikon luomiseksi ovat seuraavat:

1) Tiedoston avaaminen index.php

ja liitä koodi

$master = "Pää";

paikkaan, johon lisäät itse sivustovalikon näyttävän koodin sisällyttää "menu.html";
?>

2) Tiedoston avaaminen menu.html ja lisää koodi ehdon kanssa pääsivulle johtavan yksinkertaisen html-linkin sijaan.

Katsomme selaimeen ja ihailemme! Jos menemme pääsivulle, linkki ei ole enää aktiivinen!

3) Toista kohdat 1 ja 2 sivuilla 1.php, 2.php, 3.php

Toisto 1:

1) Avaa tiedosto 1.php ja lisää se koodin eteen, joka näyttää valikkolohkon tietyllä muuttujalla

$master = "Osa 1";

2) Avaa menu.html-tiedosto ja lisää koodi ehdon kanssa yksinkertaisen linkin sijaan Osa 1, tekemällä seuraavat muutokset:

if ($master == "Osa 1")// tämä ehto. Jos se suoritetaan, tähän valikon kohtaan echo-komennolla lisätään tavalliset HTML-tunnisteet, joissa on merkintä "Oso 1".

kaiku"

Osa 1

";

muu// tarkoittaa "muuten" - mitä tapahtuu, jos ehto ei täyty. Tässä tapauksessa, jos ehto ei täyty, merkintä ”Osa 1” on linkki, joka johtaa pääsivulle.

kaiku"

Osa 1

";

Ihme tapahtui taas! Jos nyt ollaan sivulla Osa 1, valikon linkki ei ole aktiivinen.

Kertaus on oppimisen äiti! Tai tankissa oleville! Uudelleen

Toisto 2

1) Avaa tiedosto 2.php ja liitä koodi.

$master = "Osa 2";

2) Avaa menu.html-tiedosto uudelleen ja liitä koodi ehdon kanssa

if ($master == "Osa 2")// tämä ehto. Jos se suoritetaan, tähän valikon kohtaan echo-komennolla lisätään tavalliset HTML-tunnisteet, joissa on merkintä "Osa 2".

kaiku"

Osasto-2

";

muu// tarkoittaa "muuten" - mitä tapahtuu, jos ehto ei täyty. Tässä tapauksessa, jos ehto ei täyty, merkintä ”Osa 2” on linkki, joka johtaa pääsivulle.

kaiku"

Osasto-2

";

Toisto 3

1) Avaaminen tiedosto 3.php ja aseta muuttuja.

$master = "Osa 3";

2) Lisäämme menu.html-tiedostoon koodin ehdon kanssa linkin sijaan Osa 3, muutokset ovat:

if ($master == "Osa 3")// tämä ehto. Jos se suoritetaan, tähän valikon kohtaan echo-komennolla lisätään tavalliset HTML-tunnisteet, joissa on merkintä "Osa 3".

kaiku"

Osa 3

";

muu// tarkoittaa "muuten" - mitä tapahtuu, jos ehto ei täyty. Tässä tapauksessa, jos ehto ei täyty, merkintä ”Osa 3” on linkki, joka johtaa pääsivulle.

kaiku"

Osa 3

";

Bottom line: tämäntyyppisen valikon linkkien sijaan

Koti


Osa 1

Osasto-2


Osa 3

Tämä oppitunti php:stä kirjoitettiin vastauksena sivuston vierailijoiden lukuisiin pyyntöihin, ja se on käytännöllinen opas dynaamisen valikon luomiseen php-sivustolle.

Seuraava verkkovastaavan huijauslehti kertoo, kuinka voit luoda jokaiselle sivulle ainutlaatuiset otsikot, kuvaukset ja avainsanat PHP:ssä.

Voit ladata arkiston, jossa on kaikki sivustomallit ja php-valikkotiedostot. Suositellaan uusille ohjelmoijille.

Jos olet valmis vakavasti opiskelemaan PHP:tä, on vaikea löytää parempaa videokurssia Popovilta. Hänellä on paljon kokemusta ja hyvä tyyli.

]]> ]]>

Suorita ladattu tiedosto kaksoisnapsauttamalla (sinulla on oltava virtuaalikone).

3. Anonyymius tarkistettaessa sivustoa SQL-lisäyksen varalta

Torin ja Privoxyn määrittäminen Kali Linuxissa

[Osio kehitteillä]

Torin ja Privoxyn asentaminen Windowsissa

[Osio kehitteillä]

Välityspalvelimen asetukset jSQL Injectionissa

[Osio kehitteillä]

4. Tarkista sivuston SQL-injektio jSQL-injektiolla

Työskentely ohjelman kanssa on erittäin yksinkertaista. Kirjoita vain verkkosivuston osoite ja paina ENTER.

Seuraava kuvakaappaus osoittaa, että sivusto on alttiina kolmen tyyppisille SQL-injektioille (tiedot niistä näkyvät oikeassa alakulmassa). Napsauttamalla injektioiden nimiä voit vaihtaa käytettävää menetelmää:

Myös olemassa olevat tietokannat on jo esitelty meille.

Voit tarkastella kunkin taulukon sisältöä:

Tyypillisesti mielenkiintoisin asia taulukoissa on järjestelmänvalvojan tunnistetiedot.

Jos olet onnekas ja löydät järjestelmänvalvojan tiedot, on liian aikaista iloita. Sinun on silti löydettävä hallintapaneeli, johon nämä tiedot syötetään.

5. Etsi hallintapaneeleita jSQL Injectionilla

Voit tehdä tämän siirtymällä seuraavaan välilehteen. Tässä meitä tervehtii luettelo mahdollisista osoitteista. Voit valita yhden tai useamman sivun tarkistettavaksi:

Mukavuus piilee siinä, että sinun ei tarvitse käyttää muita ohjelmia.

Valitettavasti ei ole kovin monia huolimattomia ohjelmoijia, jotka tallentavat salasanat selkeänä tekstinä. Melko usein salasanarivillä näemme jotain tällaista

8743b52063cd84097a65d1633f5c74f5

Tämä on hash. Voit purkaa sen raa'alla voimalla. Ja... jSQL Injectionissa on sisäänrakennettu brute Forcer.

6. Raaka voimahajautus jSQL-injektiolla

Kiistaton mukavuus on, että sinun ei tarvitse etsiä muita ohjelmia. Monille suosituimmille tiivisteille on tuki.

Tämä ei ole paras vaihtoehto. Jotta voisit tulla guruksi tiivisteiden purkamisessa, suositellaan venäjänkielistä kirjaa "".

Mutta tietysti, kun muuta ohjelmaa ei ole käsillä tai ei ole aikaa opiskella, jSQL Injection sisäänrakennetulla brute force -toiminnolla on erittäin hyödyllinen.

Asetuksia on olemassa: voit määrittää, mitkä merkit salasanassa on, salasanan pituusalue.

7. Tiedostotoiminnot SQL-injektioiden havaitsemisen jälkeen

Tietokantojen toimintojen lisäksi - niiden lukeminen ja muokkaaminen, jos SQL-injektiot havaitaan, voidaan suorittaa seuraavat tiedostotoiminnot:

  • tiedostojen lukeminen palvelimella
  • ladata uusia tiedostoja palvelimelle
  • kuorien lataaminen palvelimelle

Ja kaikki tämä on toteutettu jSQL Injectionissa!

On rajoituksia - SQL-palvelimella on oltava tiedostooikeudet. Älykkäät järjestelmänvalvojat ovat poistaneet ne käytöstä, eivätkä he pääse käsiksi tiedostojärjestelmään.

Tiedoston oikeuksien olemassaolo on melko helppo tarkistaa. Siirry johonkin välilehdistä (tiedostojen lukeminen, komentotulkin luominen, uuden tiedoston lataaminen) ja yritä suorittaa jokin määritetyistä toiminnoista.

Toinen erittäin tärkeä huomautus - meidän on tiedettävä tarkka absoluuttinen polku tiedostoon, jonka kanssa työskentelemme - muuten mikään ei toimi.

Katso seuraava kuvakaappaus:

Kaikkiin yrityksiin käsitellä tiedostoa saamme seuraavan vastauksen: Ei FILE-oikeuksia(ei tiedostooikeuksia). Eikä täällä voi mitään.

Jos sen sijaan sinulla on toinen virhe:

Ongelma kirjoitettaessa hakemistoon [hakemiston_nimi]

Tämä tarkoittaa, että olet määrittänyt väärin absoluuttisen polun, johon haluat kirjoittaa tiedoston.

Absoluuttisen polun arvaamiseksi sinun on ainakin tiedettävä käyttöjärjestelmä, jossa palvelin toimii. Voit tehdä tämän siirtymällä Verkko-välilehdelle.

Tällainen ennätys (rivi Win64) antaa meille syyn olettaa, että kyseessä on Windows-käyttöjärjestelmä:

Keep-Alive: timeout=5, max=99 Palvelin: Apache/2.4.17 (Win64) PHP/7.0.0RC6 Yhteys: Keep-Alive Menetelmä: HTTP/1.1 200 OK Sisältö-Pituus: 353 Päivämäärä: Pe, 11.12.2015 11:48:31 GMT X-Powered-By: PHP/7.0.0RC6 Sisältötyyppi: teksti/html; charset=UTF-8

Tässä meillä on Unix (*BSD, Linux):

Siirtokoodaus: lohkottu Päivämäärä: pe, 11. joulukuuta 2015 11:57:02 GMT Menetelmä: HTTP/1.1 200 OK Keep-Alive: timeout=3, max=100 Yhteys: säilytä elossa Sisältötyyppi: text/html X- Virtalähde: PHP/5.3.29 Palvelin: Apache/2.2.31 (Unix)

Ja tässä meillä on CentOS:

Menetelmä: HTTP/1.1 200 OK Vanhenee: to, 19. marraskuuta 1981 08:52:00 GMT Set-Cookie: PHPSESSID=9p60gtunrv7g41iurr814h9rd0; path=/ Yhteys: säilytä elossa X-Cache-Lookup: MISS from t1.hoster.ru:6666 Palvelin: Apache/2.2.15 (CentOS) X-Powered-By: PHP/5.4.37 X-Cache: MISS from t1.hoster.ru Välimuistin hallinta: ei tallentaa, ei välimuistia, täytyy vahvistaa uudelleen, post-check=0, pre-check=0 Pragma: ei välimuistia Päivämäärä: pe, 11. joulukuuta 2015 12:08:54 GMT Siirtokoodaus: lohkottu sisältötyyppi: text/html; charset=WINDOWS-1251

Windowsissa tyypillinen sivustojen kansio on C:\Palvelin\data\htdocs\. Mutta itse asiassa, jos joku "ajatteli" tehdä palvelimen Windowsiin, niin todennäköisesti tämä henkilö ei ole kuullut mitään oikeuksista. Siksi sinun tulee aloittaa yrittäminen suoraan C:/Windows/-hakemistosta:

Kuten näette, kaikki meni ensimmäisellä kerralla hyvin.

Mutta itse jSQL Injection -kuoret herättävät epäilyksiä mielessäni. Jos sinulla on tiedostooikeudet, voit helposti ladata jotain verkkokäyttöliittymän avulla.

8. SQL-injektioiden massatarkistus

Ja jopa tämä toiminto on saatavilla jSQL Injectionissa. Kaikki on erittäin yksinkertaista - lataa luettelo sivustoista (voidaan tuoda tiedostosta), valitse ne, jotka haluat tarkistaa, ja aloita toiminto napsauttamalla asianmukaista painiketta.

Johtopäätös jSQL-injektiosta

jSQL-injektio on hyvä ja tehokas työkalu verkkosivuilta löytyvien SQL-injektioiden etsimiseen ja käyttämiseen. Sen kiistattomat edut: helppokäyttöisyys, sisäänrakennetut toiminnot. jSQL Injection voi olla aloittelijan paras ystävä verkkosivustojen analysoinnissa.

Puutteista haluaisin mainita tietokantojen muokkaamisen mahdottomuuden (en ainakaan löytänyt tätä toimintoa). Kuten kaikkien GUI-työkalujen kanssa, yksi tämän ohjelman haitoista johtuu siitä, että sitä ei voida käyttää komentosarjoissa. Tästä huolimatta tässä ohjelmassa on myös mahdollista automatisoida - sisäänrakennetun massatarkistustoiminnon ansiosta.

JSQL Injection -ohjelma on paljon kätevämpi käyttää kuin sqlmap. Mutta sqlmap tukee useampaa SQL-injektiota, siinä on vaihtoehtoja tiedostojen palomuurien ja joidenkin muiden toimintojen kanssa työskentelemiseen.

Bottom line: jSQL Injection on aloittelevan hakkerin paras ystävä.

Ohje tälle ohjelmalle Kali Linux Encyclopediassa löytyy tältä sivulta: http://kali.tools/?p=706

PHP-skripteillä ohjatun sivuston valikolla on omat ominaisuutensa. Nämä eivät ole vain absoluuttisia tai suhteellisia linkkejä, vaikka näin voi hyvinkin olla, vaan yleensä dynaamisesti luotuja linkkilohkoja sivupaneeleissa, joissa on osiot ja alaosastot sekä linkkilohkot itse sivuston sisäisiltä sivuilta. Dynaamisesti luotu valikko on erittäin kätevä, koska se voidaan lisätä minne tahansa sivustolla ja mikä tärkeintä, oikeaan aikaan. Toisin sanoen, kun siirryt eri osioihin ja alaosioihin, voit dynaamisesti laajentaa eri valikkolohkoja. Lisäksi ne voivat olla erilaisia ​​paitsi sisällön, myös muodon ja suunnittelun osalta. Staattisella sivustolla on myös täysin mahdollista tehdä tällaisia ​​temppuja, mutta se maksaa ylimääräisiä mallitiedostoja ja paljon muita temppuja. Vaikka PHP:llä kirjoitettu sivusto ei vaadi mitään tästä. Malli säilyy entisellään. Kaikkea ohjaa yksi tai useampi yksinkertainen PHP-skripti.

Tämän tarkistamiseksi riittää, kun kirjoitat PHP-skriptin, joka luo dynaamisesti valikon, esimerkiksi ensimmäisen luokan, ja pakottaa sen laajentamaan tämän kategorian valikkoa aiemmin kirjoitetun komentosarjan kautta. Loput otsikot voidaan muodostaa samalla tavalla. Lisäksi itse skriptin koodi ei muutu paljon. Vain tekstitiedosto muuttuu, mikä määrittää linkkien nimet ja itse linkit. Tällaisen skriptin koodi on annettu alla.

// Valikon rakentaja
$valikko = @file($rubric1_menu);
$rivit = count($valikko);
for ($i = 0; $i< $lines; $i++)
{
lista($valikon_linkki,$valikon_nimi,$valikon_nimi)=räjähtää("::", $valikko[$i]);
if($sivu == rub1_part1 ja $i == 0) ($refcolor = "style="color:#cc0000"";)
elseif($sivu == rub1_part2 ja $i == 1) ($refcolor = "style="color:#cc0000"";)
elseif($sivu == rub1_part3 ja $i == 2) ($refcolor = "style="color:#cc0000"";)
muu ($refcolor = "";)
$rubric1.="

  • ".$valikon_nimi."
  • ";
    }
    ?>

    Jotta tällainen komentosarja toimisi, tarvitset tekstitiedoston, johon tallennetaan valikon linkkien nimet, itse linkit ja niiden otsikko. Tällaisen tiedoston luominen ei ole vaikeaa, suorita vain komento Tiedosto -> Uusi Dreamweaver-ohjelman päävalikosta, luo uusi html-dokumentti aiemmin kuvatulla tavalla, tarkista ja tarvittaessa muuta uuden tiedoston koodaus UTF:ksi. -8, ja tallenna se sitten nimellä rubric1.dat sille aiemmin luotuun tietokansioon. Täysi polku tähän tiedostoon on D:/Mysitephp/data/rubric1.dat. Alla olevan tiedoston sisältö on itse linkit, niiden nimet ja otsikko (vinkit). Lisäksi, jotta tämä komentosarja voidaan ottaa käyttöön, se on yhdistettävä toiminnolla sisältää() mallimoottorissa main.php.

    Rub1_part1::Osa 1::Rubriikin 1 osio 1::
    rub1_part2::Osa 2::Osa 2 rubriikki 1::
    rub1_part3::Osa 3::Osa 3 rubriikki 1::

    Lisäksi sinun on myös luotava pieni komentosarja asetuksilla, jotka tallentavat koko sivuston osoitteen, polut sivujen kansioihin ja sivuston metakuvaukset, polut sivuston valikkotiedostoihin ja yhdistävät sen toiminnolla sisältää() mallimoottorissa main.php. Tätä varten sinun on luotava uusi php-tiedosto ja tallennettava se php-kansioon nimellä settings.php. Tiedoston täydellinen polku on D:/Mysitephp/php/settings.php ja sen sisältö on annettu alla.

    # kansio html-dokumenteilla
    $doctemplates = "mallipohjat";
    # täydellinen polku komentosarjahakemistoon
    $turl="http://mysitephp.ru";
    # tietokanta tiedoilla
    $rubric1_menu = "data/rubric1.dat";
    ?>

    Kuinka PHP-skripti valikon luomiseen toimii? Ensin $menu-muuttujaan funktiolla tiedosto() Tekstitiedoston rubric1.dat sisältö sijoitetaan. Sitten funktio Kreivi() laskee tekstitiedoston ja funktioiden rivien määrän lista() Ja räjähtää() itse valikko on laajennettu silmukaksi, jossa tapa liimata viivoja yhteen (operaatio piste . ) muodostetaan linkkirivit nimineen ja otsikoineen, jotka sijoitetaan sitten muuttujaan $rubric1. Seuraava on mallikoneen skripti, johon toiminto yhdistää valikon komentosarjan sisältää(), siirtää $rubric1-muuttujan sisällön haluttuun paikkaan sivustolla käyttämällä aiemmin kuvattua toimintoa repl().

    Tällainen valikko ei vielä toimi, koska se sisältää vain itse linkit kaikilla tarvittavilla määritteillä, mutta ei ole skriptiä, joka varmistaisi siirtymisen näihin linkkeihin ja näitä linkkejä vastaavien sivuston sivujen avaamisen. Käsittelemme tätä PHP-skriptiä seuraavaksi.

    Seuraavaksi voit päivittää projektin valikon luontiohjelman avulla. Voit myös ladata päivitetyn projektin sivulta, joka aukeaa rekisteröitymisen ja ilmaisen tilauksen aktivoinnin jälkeen oikealla olevasta paneelista. Sivun osoite on tallennettava. Tälle sivulle ilmestyy jatkossa linkkejä projektipäivitysten lataamiseen, erilaisia ​​hyödyllisiä skriptejä, ohjelmia, oppitunteja ja video-opetusohjelmia piirisuunnittelusta, ohjelmoinnista ja verkkosivustojen rakentamisesta. aloittelijoille.

    Ladattua php-sivustoprojektia, joka on päivitetty uusilla skripteillä, voidaan nyt verrata siihen, mitä tapahtui yllä kuvattujen vaiheiden seurauksena. Seuraavaksi erojen poistamiseksi olisi hyödyllistä korvata projekti kokonaan ladatulla, suorittaa toimenpide, käynnistää Denwer-palvelin, kirjoittaa selainikkunaan mysitephp.ru ja katsoa mitä siitä tulee. Ensimmäisen osion valikon tulisi laajentua mallin vasemmassa yläkulmassa alla olevan kuvan mukaisesti.

    Mene ja sulaudu suosikki sosiaaliseen verkostoosi

    Tässä artikkelissa näytän, kuinka voit luoda monitasoinen valikko PHP:ssä ja MySQL:ssä. Tietenkin voit keksiä monia vaihtoehtoja sen luomiseen, mutta tätä aihetta koskevien kysymysten lukumäärän perusteella tarvitset esimerkin. Ja annan sen tässä artikkelissa. Haluan heti huomauttaa, että tämä artikkeli on järkevä vain niille, jotka tietävät PHP ja osaa työskennellä MySQL. Kaikkien muiden täytyy käydä tämä ensin läpi tai lukea siitä joitain kirjoja PHP ja MySQL.

    Luodaan ensin tietokantaan taulukko, jossa on seuraavat kentät:

    • id- yksilöllinen tunniste.
    • otsikko- ankkurilinkit valikossa.
    • linkki- osoite, johon valikkokohta johtaa.
    • vanhempi_tunnus- vanhemman tunnus. Jos yläkohdetta ei ole, se on NULL (tai voit myös laittaa 0).

    Olemme järjestäneet pöydän, nyt on sen aika PHP koodi. Koko PHP koodi on annettu alla:

    $mysqli = uusi mysqli("localhost", "root", "", "db"); // Yhdistä tietokantaan
    $result_set = $mysqli->query("SELECT * FROM `valikosta"); // Valitse kaikki tietueet taulukosta valikosta
    $kohteet = array(); // Valikkokohteiden taulukko
    while (($rivi = $result_set->fetch_assoc()) != false) $kohteet[$rivi["id"]] = $rivi; // Täytä matriisi näytteellä tietokannasta
    $lapset = array(); // Matriisi lapsielementtien sovittamiseksi vanhempiinsa
    foreach ($item kuin $item) (
    if ($tuote["vanhemman_tunnus"]) $lapset[$tuote["tunnus"]] = $tuote["vanhemman_tunnus"]; // Täytä taulukko
    }
    funktio printItem($item, $items, $childrens) (
    /* Näytä valikkokohta */
    kaiku"

  • ";
    echo "".$item["nimi"]."";
    $ul = epätosi; // Suoritettiinko lapsia?
    kun (tosi) (
    /* Ääretön silmukka, josta etsimme kaikkia lapsia */
    $avain = array_haku($kohde["id"], $lapset); // Etsitään lapsielementtiä
    jos (!$avain) (
    /* Lapsia ei löytynyt */
    jos ($ul) kaiku ""; // Jos alatason elementtejä näytettiin, sulje luettelo
    tauko; // Poistu silmukasta
    }
    unset($lapset[$avain]); // Poista löydetty elementti (jotta sitä ei näytetä uudelleen)
    jos (!$ul) (
    kaiku"
      "; // Aloita sisäinen luettelo, jos lapsielementtejä ei vielä ole
      $ul = tosi; // Aseta lippu
      }
      echo printItem($kohteet[$avain], $kohteet, $lapset); // Näytä kaikki alielementit rekursiivisesti
      }
      kaiku"";
      }
      ?>

      Tämä koodi toimii täysin, mutta sinun on ymmärrettävä, että kukaan ei kirjoita tällä tavalla (etenkään ulostulon kautta kaiku HTML-tunnisteet). Ja sinun tehtäväsi on ottaa algoritmi tästä koodista, mutta ei itse koodia. Ja sitten yhdistä tämä algoritmi moottoriisi. Yritin kommentoida tuloskoodia huolellisesti monitasoinen valikko PHP:ssä ja MySQL:ssä, mutta se ei tietenkään ole kaikkein läpinäkyvin ja vaatii melko hyvää alkutietoa. Jos et vieläkään tiedä hyvin PHP ja MySQL, niin suosittelen ehdottomasti käymään tämän läpi ensin

      Juuri tätä tarkastelemme nyt. Ja niin, tehtävänä on tehdä pystysuora valikko avattavan luettelon muodossa.

      Miten tämä voidaan toteuttaa PHP:ssä? Erittäin yksinkertainen! Meillä on esimerkiksi tiedosto index.php, jonka tulee avattavassa luettelossa valitusta osiosta riippuen näyttää vastaava sisältö sivulla. Tämä toteutetaan seuraavasti:

      1. Luomme .html-muotoisia tiedostoja, jotka sisältävät tulostukseen tarvittavan sisällön.

      2. Luomme (kirjoitamme) index.php-skriptiin tarvittavat ehdot asiaankuuluvien tietojen näyttämiseksi.

      3. Käsittelemme luotua skriptiä suoritettavan skriptin turvallisuuden näkökulmasta.

      No, näyttää siltä, ​​että teoria on ohi, siirrytään käytäntöön. Ensin luodaan staattiset sivut .html-muodossa, jotka sisältävät tarvittavat tiedot. Voit kirjoittaa sinne mitä haluat :) Tämän seurauksena meidän pitäisi saada ainakin kaksi tiedostoa first.html ja second.html , jotta voimme tehdä niistä niin monta kuin haluamme, kun ymmärrämme perusalgoritmin miten koodi toimii.

      Avattavan luettelon näyttäminen tiedostossa index.php Luomme html-lomakkeen, jonka alle kirjoitamme seuraavan sisällön sisältävän PHP-skriptin:



      Valikko PHP


      Pudotusvalikko PHP:ssä












      if (isset ($_GET ["missä" ]))
      {
      if ($_GET ["missä" ]==1 )
      $tiedosto = "ensimmäinen.html" ;
      if ($_GET ["missä" ]==2 )
      $tiedosto = "toinen.html" ;
      include($tiedosto);
      }
      ?>


      Nyt avattavan valikon koodi on valmis, ja mielenkiintoisinta on, että se toimii normaalisti, mutta turvallisuusnäkökulmasta se on haavoittuvainen.

      Tämän skriptin haavoittuvuus on, että muuttuja $tiedosto pysyy alustamattomana, ja tällöin automaattisesti luodun muuttujan arvo menee suoraan funktioon sisältää, ja hän vuorostaan ​​onnistuneesti yhdistää sen (muuttujan) ja näyttää sen näytöllä. Ja se ei välttämättä ole vain .htaccess-määritystiedosto. Tämän skriptin hakkeroimiseksi riittää, että annat where-parametrille arvo, jota koodi ei anna, esimerkiksi 3. Ja koska tämä arvo ei ole skripti, se on vain muuttuja $tiedosto ei käy läpi alustusta. Siksi sille voidaan antaa mielivaltainen arvo URL-merkkijonon kautta.

      http://localhost/index.php?where=3&file=.htaccess

      Mutta näin on, pieni poikkeama aiheesta. 😀

      Ratkaisu tähän ongelmaan on melko yksinkertainen, vaihteleva $tiedosto sinun on vain alustettava se ennen käyttöä, eli määritettävä sille oletusarvo.

      Tässä, jos missä parametri välitetään skriptille, muuttuja alustetaan oikein, muuten se on yksinkertaisesti tyhjä. Näin avattava [turvallinen] valikko osoittautui PHP:ssä.

      P.S. Skenaarioita luotaessa on tarpeen ottaa huomioon ja sulkea pois kaikki mahdolliset hyökkäysvektorit. Tämä on ainoa tapa luoda projekti, joka täyttää turvallisuusmääräykset ja on asiakkaan vaatima. Nähdään taas!