
Előző leckénkben megismerkedtünk a PHP POST és GET módszereivel, valamint megtanultuk, hogyan küldhetőek át az információk a szerverre a segítségükkel. Ma a biztonságra helyezzük a hangsúlyt, és a htmlentities funkcióval fogunk foglalkozni.
Minden olyan esetben, amikor lehetővé tesszük a felhasználók számára, hogy tartalmakat tegyenek közzé a weboldalon, fontos, hogy nagyon óvatosak legyünk. Semmiképp sem szabad olyan biztonsági hibákat elkövetni, amelyek lehetővé teszik a rossz szándékú felhasználók számára, hogy kihasználják a gyengeségeket. Azokban az esetekben, amikor a felhasználó által bevitt szöveg a nyilvánosság számára is látható, nem árt elgondolkodni a htmlentities funkció alkalmazásán, mely megakadályozza, hogy olyan HTML-kódokat és scripteket futtassanak a rosszakarók, amelyek veszélyesek a többi látogatóra nézve.
PHP — a HTML-entitásokká való átalakítása
Először is fussuk át gyorsan, mik az entitások. A HTML-ben több olyan karakterrel találkozhatunk, amely a tagek része is lehet. Ilyen például a < és a > jel. Ezeknek a karaktereknek a megjelenítésére szolgálnak az entitások. Az entitás így fest: &entitás_neve; vagy &#entitás_száma;. A „kisebb, mint” (angolul „less than”) jelet így írhatjuk fel entitásként: < vagy <
A htmlentities funkció megragad egy stringet, és ugyanazt a stringet adja vissza, azzal, hogy a HTML-t HTML-entitásokká alakítja. Például a "<script>" stringet a következővé alakítaná: "<script>"
Azzal, hogy a < és a > jeleket entitásokká alakítja, a funkció valójában megakadályozza a böngészőt abban, hogy HTML-elemként kezelje őket, és azt is, hogy a kód lefusson, ha felhasználók által bevitt dolgokat jelenítünk meg az oldalon.
Elsőre talán egy kicsit bonyolultnak tűnhet, de ha belegondolsz abba, hogyan működnek a böngészők, fázisonként, talán egy kicsit egyszerűbb lesz megérteni az elméletet. Nézzük, milyen módon alakítja át a htmlentities funkció az adatokat, három különböző szinten: a PHP-ben, a nyers HTML-ben és a böngészőben. A példánkban alkalmazott string egy olyan rossz script, amely a látogatókat a rosszindulatú felhasználó saját weboldalára irányítja.
PHP-kód:
// Egy elképzelt bejegyzés egy rosszindulatú felhasználótól
// mindenkit az example.com oldalra irányít, ha a kód lefut a böngészőben
$user_input = 'Megtámadtam a weboldaladat, hahaha!
<script type="text/javascript">
window.location = "http://www.example.com/"
</script>';
// Gondoskodjunk a biztonságról!
$user_input_entities = htmlentities($user_input);
// Most már megjeleníthetjük
echo $user_input_entities;
A fenti script így jelenne meg:
Biztonságos nyers HTML-kód:
Megtámadtam a weboldaladat, hahaha!
<script type="text/javascript">
window.location = "http://www.example.com/"
</script>
Ha nem használtuk volna a htmlentities funkciót, hogy a HTML-kód karaktereit biztonságos entitásokká alakítsuk, a nyers HTML-kód a látogatót az example.com oldalra irányítaná, és a következőképp festene.
Veszélyes nyers HTML-kód:
Megtámadtam a weboldaladat, hahaha!
<script type="text/javascript">
window.location = "http://www.example.com/"
</script>
A fenti két kódot (biztonságos és veszélyes) látnánk, ha megnéznénk a weboldal forráskódját. Ha azonban laikus felhasználóként néznénk a weboldalt a böngészőben, a következő történne:
Biztonságos megjelenítés:
Megtámadtam a weboldaladat, hahaha! <script type="text/javascript"> window.location = "http://www.example.com/" </script>
Veszélyes megjelenítés:
Azt a spamoldalt látnánk, amelyre a rosszindulatú felhasználó irányított bennünket. Valószínűleg valamilyen nem tesztelt növényi étrend-kiegészítő vagy fogyást elősegítő tabletta weboldalára kerülnénk.
Tipp: Ahhoz, hogy a HTML-entitásokat visszaalakítsuk karakterekké, a html_entity_decode() funkciót alkalmazhatjuk.
Mikor érdemes használni a htmlentities funkciót?
Minden olyan esetben, amikor lehetővé tesszük a látogatóknak, hogy valamilyen tartalmat tegyenek közzé a weboldalon, érdemes megtagadni tőlük a lehetőséget, hogy HTML-t használjanak. Ezzel ugyan számos olyan nagyszerű dolgot is megakadályozunk, amelyre a felhasználók képesek lennének, mint például az erősen személyre szabott tartalom, de sok gyakori támadástól is megvédhetjük weboldalunkat. A tapasztaltabb programozók pontosan meghatározhatják azoknak a tageknek a futtatását, amelyeket veszélyesnek ítélnek, ez azonban meghaladja mai leckénk kereteit.
Összegzés
Reméljük, nem találtad túlzottan bonyolultnak a htmlentities funkciót! A lecke végére érve biztosan egyetértesz velünk abban, hogy érdemes megtanulni a használatát (és használni is a funkciót). Ne feledd, minden alkalommal, amikor lehetővé teszed a felhasználók számára, hogy tartalmat tegyenek közzé az oldaladon, valójában hozzáférést adsz nekik a honlapodhoz. Mindig fontos, hogy komolyan vedd a biztonságot, és megtedd a megfelelő óvintézkedéseket.
NYEREMÉNYJÁTÉK
Rovatunk elsődleges célja, hogy közelebbről is bemutassa a legismertebb webtechnológiákat. Azok között az olvasók között, akik minden héten követik rovatunkat, azaz velünk tanulják a programozás alapjait és kitöltik a feladatsort, a sorozat végén egy laptopot sorsolunk ki.
A játék heti kérdése
Mire alakítja át a htmlentities funkció a > jelet?
1. <
2. ≫
3. >
Néhány szó rólunk:
Az ErdSoft (www.erdsoft.com) 2011-ben alakult meg. Csapatunkat a fiatalos lendület, a szakértelem, a folyamatos tanulás és tapasztalatgyűjtés jellemzi. Ügyfeleinknek igyekszünk teljes körű szolgáltatást nyújtani — bátran fordulhatnak hozzánk, legyen szó webfejlesztésről, alkalmazásokról, SEO-optimalizálásról, grafikai tervezésről, marketingről vagy szövegírásról. Csapatunk sikerét mi sem bizonyítja jobban, mint a több száz elkészült weboldal és a számos elégedett ügyfél Szerbiában, Magyarországon és az Egyesült Királyságban.