2015. már 28.

Biztonságos linkek 1.

írta: Bozzai Gyula
Biztonságos linkek 1.

urlencode_01_k.jpg

Ebben a cikkben bemutatom, hogyan lehet két oldalt egymáshoz linkelni, és hogyan lehet biztonságosan adatokat átadni egy másik oldalnak.

Bár a mai témánk egyszerűnek ígérkezik, mégis ahhoz, hogy elmagyarázzam, több területet is érintenünk kell.

Először is szükségünk lesz két weboldalra. Az egyszerűség kedvéért legyen a nevük "oldal1.php" és "oldal2.php".

oldal1.php:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Oldal 1</title>
</head>
<body>

</body>
</html>


oldal2.php:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Oldal 2</title>
</head>
<body>

</body>
</html>

Most pedig létrehozunk egy linket, ami az első oldalról a másodikra mutat:

oldal1.php: 

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Oldal 1</title>
</head>
<body>
    <a href="oldal2.php">Oldal 2</a>
</body>
</html>

A képernyőn megjelenik az "Oldal 2" felirat, és ha erre kattintunk, akkor átkerülünk az oldal2-re.

Ez eddig egyszerű, semmi trükk nincs benne. Az izgalmas rész most következik.

Azért, hogy ne kelljen mindig az egész oldalt bemásolni, mostantól csak a <body> részt fogom mutatni.

Arra keressük a választ, hogyan tudunk egyik oldalról a másikra adatokat továbbítani. A probléma abból adódik, hogy ha az első weblapon létrehozunk egy változót, azt a második nem látja, ott nem tudjuk használni. Ennek a problémának a megoldására többféle módszer is kínálkozik, most a legegyszerűbbet elemezzük, azaz, adatokat fogunk átadni linkek segítségével.

Kezdjük azzal, hogy létrehozunk két változót, majd megnézzük mi történik velük, ha simán átlépünk a második oldalra:

oldal1.php: 

<?php

    $valtozo1 = "Teszt";
    $valtozo2 = "SimplePHP";
    
?>
<a href="oldal2.php">Oldal 2</a>

oldal2.php: 

<?php

    if (isset($valtozo1)) {
        echo $valtozo1;
    } else {
        echo '$valtozo1 nem létezik!';
    }
    
    echo "<br />"; // Sortörés
    
    if (isset($valtozo2)) {
        echo $valtozo2;
    } else {
        echo '$valtozo2 nem létezik!';
    }
    
?>

A fenti kódban az "isset" nevű függvényt használjuk. Ez logikai formában visszaadja (true/false), hogy a paraméterben megadott változó be van-e állítva, azaz létezik-e:

 

bool isset($valtozo);

Egy egyszerű feltétel (if) segítségével kiíratjuk a változót ha létezik, vagy hibaüzenetet ha nem (else).

A fenti kód futtatásával ellenőrizhetjük, hogy egy sima link segítségével meghívott második oldal nem látja az első oldalon létrehozott változókat. 

Viszont, ha a linket kiegészítjük a következő módon, akkor megtesszük az első lépést az adatok átadása felé:

oldal1.php:

<?php

    $valtozo1 = "Teszt";
    $valtozo2 = "SimplePHP";
    
?>
<a href="oldal2.php?valtozo1=Teszt">Oldal 2</a>

A lényeg az "oldal2.php" után lévő "?valtozo1=Teszt" rész. Ha most megnézzük a böngészőnkben a második oldal URL sorát, akkor láthatjuk, hogy ott is megjelent a link után a "?valtozo1=Teszt" rész.

Most a "valtozo1" és az értéke belekerül egy asszociatív tömbbe, amit Szuper globális változónak (Super global variable) hívunk. Ez azért érdemelte ki a "szuper globális" nevet, mert az egész oldalon bárhol elérhető (példánkban az oldal2.php-n), és már akkor hozzárendelődik az oldalhoz, mielőtt egyetlen sornyi PHP kód is feldolgozásra került volna.

Több ilyen változó is létezik, a mi példánkban, amikor link útján továbbítjuk a változókat, a $_GET nevezetű használandó.

Most pedig lássuk, hogy tudunk ehhez a változóhoz hozzáférni.

olda2.php:

<?php

    $valtozo1 = $_GET['valtozo1'];

    if (isset($valtozo1)) {
        echo $valtozo1;
    } else {
        echo '$valtozo1 nem létezik!';
    }
    
    echo "<br />"; // Sortörés
    
    if (isset($valtozo2)) {
        echo $valtozo2;
    } else {
        echo '$valtozo2 nem létezik!';
    }
    
?>

És végre! A valtozo1 megkapta az értékét, ami az oldal1.php-n hozzárendelt "Teszt" szöveg volt. Tehát, a lényeg: a linkek segítségével továbbított változók a $_GET szuper globális változóhoz rendelődnek hozzá.

Jó, ez már félsiker. Most azt nézzük meg, hogyan tudunk több változót továbbítani egyszerre. Térjünk vissza az első oldalunkhoz:

oldal1.php:

<?php

    $valtozo1 = "Teszt";
    $valtozo2 = "SimplePHP";
    
?>
<a href="oldal2.php?valtozo1=Teszt&valtozo2=SimplePHP">Oldal 2</a>

A megoldást az "&" jel jelenti. Ez után írhatjuk a következő változónkat, ahogy a fenti példa mutatja. Természetesen, még több változót is hozzárendelhetünk, csak válasszuk el az "&" jellel őket.

Most már megvan a két változónk, a második oldalon is használhatjuk őket.

oldal2.php:

<?php

    $valtozo1 = $_GET['valtozo1'];
    $valtozo2 = $_GET['valtozo2'];

    if (isset($valtozo1)) {
        echo $valtozo1;
    } else {
        echo '$valtozo1 nem létezik!';
    }
    
    echo "<br />"; // Sortörés
    
    if (isset($valtozo2)) {
        echo $valtozo2;
    } else {
        echo '$valtozo2 nem létezik!';
    }
    
?>

A következő lépés, hogy a linkekhez a változók értékeit dinamikusan rendeljük hozzá, az első oldalon. A megoldás egyszerű használjuk a jól bevált "echo" függvényt.

oldal1.php:

<?php

    $valtozo1 = "Teszt";
    $valtozo2 = "SimplePHP";
    
?>
<a href="oldal2.php?valtozo1=<?php echo $valtozo1; ?>
&valtozo2=<?php echo $valtozo2; ?>">Oldal 2</a>

Tehát, a változók értékeit "<?php" és "?>" közé elhelyezett "echo" függvénnyel írjuk ki, így ha változik a két változó értéke, akkor a link is velük együtt változik.

A poszt címében biztonságos linkeket ígértem. Próbáljuk ki a következő kódot.

oldal1.php:

<?php

    $cegnev = "Procter & Gamble";
    
?>
<a href="oldal2.php?cegnev=<?php echo $cegnev; ?>">Oldal 2</a>

oldal2.php:

<?php

    $cegnev = $_GET['cegnev'];

    if (isset($cegnev)) {
        echo $cegnev;
    } else {
        echo '$cegnev nem létezik!';
    }
    
?>

Ha futtatjuk a kódot, eredményül "Procter " szöveget kapjuk. Hová tűnt a második fele? A problémát a névben lévő "&" karakter okozza, mert ahogy korábban láthattuk, ezzel választjuk el a változókat egymástól. Ezt a linkek számára fenntartott karakternek hívjuk, és nem ez az egyetlen.

Fenntartott karakterek:

! # $ % & ' ( ) * + , / : ; = ? @ [ ] 

Igen, ezek mind gondot okoznak. Szerencsére PHP-ben ezt egyszerű orvosolni, csak használjuk az "urlencode" függvényt, ami a problémás karaktereket biztonságos formátumra konvertálja.

oldal1.php:

<?php

    $cegnev = "Procter & Gamble";
    
?>
<a href="oldal2.php?cegnev=<?php echo urlencode($cegnev); ?>">Oldal 2</a>

Így már megfelelő az eredmény.

Ha megnézzük a második oldalon a böngészősávban a linket, ilyen formában látjuk:

 

oldal2.php?cegnev=Procter+%26+Gamble

Ez a link megfelelő formátuma, ami már a helyes eredményt adja.

Ennyi volt mára. A témával azonban még nem végeztünk, mert az oldal2.php jelen formájában számos biztonsági kockázattal jár, ezeket is orvosolnunk kell. Ezért ezt a témát még folytatni fogjuk...

Szólj hozzá

link echo if else urlencode isset