A PHP htmlentities funkciója

A PHP htmlentities funkciója

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: &lt; vagy &#60;

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á: "&lt;script&gt;"

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!

      &lt;script type="text/javascript"&gt;

      window.location = "http://www.example.com/"

      &lt;/script&gt;

 

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. &lt;

2. &Gt;

3. &gt;

 


 

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.

Szeretne értesülni, ha új cikk jelenik meg Számtek rovatunkban? Iratkozzon fel értesítőnkre!

E-mailben értesíteni fogjuk Önt az új cikkekről. Feliratkozáshoz kérjük adja meg a nevét és az e-mail címét.

Hozzászólások

Kapcsolódó cikkek

A PHP htmlentities funkciója
Számtek
  • Erdsoft
  • 2019.09.13.
  • LXXIV. évfolyam 36. szám
A PHP htmlentities funkciója
Számtek
  • Erdsoft
  • 2019.08.30.
  • LXXIV. évfolyam 35. szám
Facebook

Támogatóink