lt.geologyidea.com
Daugiau

„Javascript“ programa veikia gerai ... ir tada ne

„Javascript“ programa veikia gerai ... ir tada ne


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.


Šis klausimas tikriausiai netelpa į šios svetainės gaires dėl daugelio veiksnių, todėl man nesvarbu.

Sukūriau GIS žiniatinklio programą adresu http://matthewiannowlin.com/planning/thesis. Aš naudojau „JavaScript“ API. Tam tikru momentu atsirado problema, kai maždaug 4 iš 5 kartų „Esri“ medžiaga nebus įkelta. Taigi žemėlapis ir visi valdikliai. Jei atnaujinsiu pakankamai kartų, pagaliau įkelsiu visą puslapį. Tada jis puikiai veikia.

Kai žiūriu į konsolės žurnalą, matau šią klaidą, kai „Esri“ valdikliai neįkeliami:

[Klaida] TypeError: null nėra objektas (vertinama „e.renderer.toLowerCase“)
ia (init.js, 33 eilutė)
fa (init.js, 33 eilutė)
g (init.js, 35 eilutė)
(anoniminė funkcija) (init.js, 40 eilutė)

Net nežinau, ko paklausti, bijau. Be to ... koks velnias? Manau, kad tai tapo problema, nes kodas tampa sudėtingesnis ir (arba) vadinu daugiau valdiklių.

Štai keletas atsitiktinių minčių: ar tai turi ką nors bendro su daiktų įkėlimo laiku? Ar tai kažkaip susiję su dojo/ready ar dojo/DomReady? Arba analizuojant.


Manau, kad tai supratau. Arielio Fleslerio „jQuery“ slinkties naudojimas įskiepiui prieštaravo kažkam dojo kode, kurį „ArcGIS“ naudojo savo „JavaScript“ API.

Taigi dabar man tiesiog reikia išsiaiškinti, kaip sklandžiai pereiti prie div taip, kad neprieštarautų API kodui.


Perkėlus į „Office 365“, „Outlook“ neprisijungia arba žiniatinklio paslaugos neveikia

Negalite naudotis tokiomis funkcijomis, kaip „Out of Office“, susitikimų pasiekiamumo, pašto patarimų, internetinio archyvo ar bet kurios kitos žiniatinklio paslaugų funkcijos, kuri priklauso nuo automatinio aptikimo.

Kai atidarote „Outlook“, gaunate šį klaidos pranešimą:

„Outlook“ negali prisijungti. Patikrinkite, ar esate prisijungę prie tinklo ir naudojate tinkamą serverio ir pašto dėžutės pavadinimą. Jūsų profilyje esančioje „Microsoft Exchange“ informacijos tarnyboje trūksta reikiamos informacijos. Pakeiskite savo profilį, kad įsitikintumėte, jog naudojate tinkamą „Microsoft Exchange“ informacijos paslaugą.


Žymių kūrimo automatizavimas naudojant „Acrobat JavaScript“

Pateikė Thomas Parkeris ir#150 2008 m. Rugpjūčio 7 d

Taikymo sritis: „Acrobat 7.0“ ir naujesnės versijos
Įgūdžių lygis: Vidutinis ir pažengęs
Būtinos sąlygos: Pagrindinis „Acrobat JavaScript“ programavimas

PDF žymės paprastai sukuriamos konvertuojant iš pradinio formato arba rankiniu būdu naudojant „Acrobat“. Tačiau yra situacijų, kai nė vienas iš šių metodų netenkina. Pvz., Dokumentai, kurie konvertuojami be žymių, arba dokumentai, kurie per tam tikrą laikotarpį buvo sukurti prieš išplatinant. Tokiais atvejais „Acrobat“ siūlo du būdus, kaip automatiškai sukurti žymes naudojant „JavaScript“.

Kodėl automatizuoti žymių kūrimą?

Automatika taupo laiką ir sumažina žmonių klaidas. Kadangi žymėms reikalinga etiketė, jas sukurti nėra taip paprasta, kaip kai kurias kitas „Acrobat“ užduotis, tačiau vis tiek gali būti naudinga automatizuoti. Probleminė problema yra ta, iš kur atsiranda žymių etiketės? Šis paprastas reikalavimas apriboja dokumentų, kuriuose žymių automatizavimas yra prasmingas, rūšis. Geriausia situacija, kai žymių etiketes galima įsigyti iš tam tikro paruošto šaltinio, galbūt iš puslapio teksto. Pavyzdžiui, jei kiekvieno puslapio pavadinimas yra toje pačioje vietoje, galima naudoti įprastus „Acrobat JavaScript“ metodus, kad antraštės būtų pašalintos iš puslapio. Kita situacija, kai automatinis žymių kūrimas yra naudingas, yra anksčiau minėtų dokumentų, pagamintų iš gabalų, kūrimo darbo eiga, kuri bus šio straipsnio pavyzdys.

Sukurtas dokumentas yra PDF formatas, turintis standartinį formatą ir apimantis kelis dokumentus iš skirtingų šaltinių, kurie yra sutvarkyti ir sujungti kartu, nebūtinai vienu metu. Į šią kategoriją įtraukti dokumentai apima įvairių rūšių ataskaitinius dokumentus, tokius kaip investicijų suvestinė, mokesčių paketas, įmonių naudos ataskaita, įrodymų paketas arba FDA pateiktas dokumentas. Visi šie dokumentai yra standartinio formato, tačiau turi skirtingą turinį. Šiems tikslams galima sukurti ir automatiškai atnaujinti standartinį žymių rinkinį, kuris bus sukurtas dokumentų kūrimo proceso metu.

Žymių kūrimo metodai

Kaip minėta anksčiau, yra du būdai, kaip sukurti žymes. Kiekvienas turi skirtingus privalumus ir trūkumus. Akivaizdžiausias metodas yra bookmark.createChild () funkcija. Ši funkcija sukuria naują žymę po esama žyme. Visuose PDF dokumentuose, net ir neturinčiuose žymių, yra nematoma aukščiausio lygio žymė doc.bookmarkRoot. Taigi mums nereikia jaudintis dėl pirmosios PDF žymės sukūrimo, bookmark.createChild () veikia kuriant bet kokią mums reikalingą žymę. Šia funkcija lengva naudotis ir ji sukuria žymą tiksliai tokioje padėtyje, kokia ji turi būti. Šios funkcijos trūkumas yra tas, kad ji gali sukurti tik „JavaScript“ vykdančias žymes. Negalima nustatyti jokių kitų žymių veiksmų iš automatizavimo scenarijaus. Tai gerai veikia, jei norime, kad naujoji žymė paleistų scenarijų, tačiau tai nepadeda padaryti nuo vietos nepriklausomų puslapio naršymo žymių.

Kai žyma sukuriama rankiniu būdu, naudojant „Acrobat“ žymių skydelio mygtuką & ldquoNauja žymė ir rdquo, jos veiksmas automatiškai nustatomas kaip & ldquoGo to Page & rdquo, o paskirties vieta yra dabartinis puslapio rodinys (puslapio numeris, mastelio keitimas ir slinkimas). Puslapio arba žymės perkėlimas į kitą vietą neturi jokios įtakos jo veikimui. Žymė visada pereis į tą patį puslapio rodinį. Tai yra nuo padėties nepriklausoma puslapių naršymo funkcija ir ji yra svarbi kuriant dokumentus, nes sukūrus žymę puslapiai gali būti pridedami arba perkeliami, o tai gali pakeisti kitų dokumento puslapių vietas (ir puslapių numerius).

Taip pereiname prie antrojo žymių kūrimo metodo, naudojant meniu elementą & ldquoNewBookmark & ​​rdquo. Šis metodas sukuria žymę lygiai taip pat, kaip tai daroma rankiniu būdu, t. Y. Sukuriama žyma su veiksmu & ldquoGo To Page & rdquo, nukreipiančiu į dabartinį puslapio rodinį. Tai yra vienintelis būdas naudoti „Acrobat JavaScript“ automatizuoti žymių kūrimą nepriklausomai nuo vietos navigacijai. Tačiau su juo dirbti yra šiek tiek sunkiau nei kitu metodu.

Meniu elementas & ldquoNaujoji knyga žinoti, kur žymių hierarchijoje ji ką tik sukūrė žymę. Norėdami naudoti šį metodą, mums reikia kodo, kad surastume naujai sukurtą žymę ir pavadintume ją. Taip pat turime manyti, kad žymė buvo sukurta tinkamoje vietoje, kad vartotojas ją perkels vėliau arba parašys kodą, kad perkeltų į tinkamą vietą. Paprastumo dėlei čia pateiktame pavyzdyje manoma, kad vartotojas nustatė žymių pasirinkimą taip, kad nauja žymė būtų sukurta tinkamoje vietoje.

Standartinės žymių sistemos kūrimas, 1 pavyzdys

Sukurto dokumento pradinėje žymių sistemoje yra aukščiausio lygio žymės ir galbūt keletas vaikų pavyzdžių. Šiame pavyzdyje žymių sistema pridedama projekto pradžioje prieš pridedant tikrojo turinio puslapių. Kadangi šiuo metu naršyti nereikia, scenarijus naudoja bookmark.createChild () funkcija. Pridėjus tikrojo turinio puslapius, paskirties vietas rankiniu būdu nustato dizaineris arba kitas scenarijus. Žinoma, tai būtų galima padaryti kitaip, pakeitus kodą, kad būtų naudojamas meniu & ldquoNewBookmark & ​​rdquo elementas, tačiau čia siekiama parodyti, kaip naudojamas bookmark.createChild () funkcija.

Šiuos scenarijus galima nukopijuoti ir paleisti iš „Acrobat JavaScript Console“ arba įdėti į aplanko lygio scenarijų ir paleisti naudojant įrankių juostos mygtuką. Informacijos apie įrankių juostos mygtuko kūrimą rasite straipsnyje apie saugos taikymą PDF rinkmenai.

Pirmoji scenarijaus dalis yra hierarchinis žymių etikečių rinkinys, aBkMkNames. Jis apibrėžia sukurto dokumento organizavimą. Masyvo įrašai, kurie yra paprastas tekstas, yra to lygio žymė. Masyvo įrašai, kurie yra kitas masyvas, reiškia hierarchijos pakopą, kur pirmasis įrašas yra dabartinio lygio žymė, o visi tolesni įrašai yra antrinio lygio antrinės žymės. Šio tipo & ldquoarray masyvuose ir rdquo struktūroje leidžia bet kokį hierarchijos gylį. Pavyzdiniame kode yra įrašų, apibrėžiančių mokesčių paketą, tačiau tai gali būti bet kas.

Antroji scenarijaus dalis yra rekursinė funkcija „MakeBkMks“ (), tai daro tikrąjį žymių kūrimą. Rekursinė funkcija yra funkcija, kuri gali skambinti pati. Tai svarbu tvarkant hierarchines duomenų struktūras, pvz., Žymių masyvą.

Funkcija naudoja du įvestis, žymės pirminę ir to lygio žymių pavadinimų masyvą. Pati funkcija tvarko tik vieną hierarchijos lygį. Jis perkelia visas žymių etiketes ir sukuria naują žymę. Jei jis susiduria su žemesniu lygmeniu, jis paskambina sau ir perduoda kito lygio parametrus.

Paskutinė scenarijaus dalis pradeda visą procesą. Skambina „MakeBkMks“ (), pravažiuojant bookmarkRoot ir visas žymių etikečių masyvas. Išbandykite, pirmiausia sukurdami arba atidarydami dokumentą be žymių. Tada nukopijuokite aukščiau esantį kodą į „Acrobat JavaScript Console“ ir paleiskite jį.

Sukurkite naują pavadintą žymę, 2 pavyzdys

Šiame scenarijuje vartotojas renkasi iš iš anksto nustatytų žymių etikečių sąrašo. Tada sukuriama žymė dabartiniam puslapio rodiniui ir įdedama į žymių hierarchiją tiesiai po šiuo metu pasirinkta žyma. Šis scenarijus reikalauja, kad vartotojas prieš paleidžiant scenarijų pasirinktų žymę arba vėliau perkeltų naujai sukurtą žymę.

Šis scenarijus yra geras ankstesnio scenarijaus, kuris sukuria žymių sistemą, palydovas. Sukūrus žymių sistemą, puslapiai pridedami prie PDF ir šiems puslapiams reikia pridėti naujų žymių. Kadangi dokumentas yra struktūrizuotas, daugelis šių pridėtų puslapių turės bendrą kilmę, todėl tikslinga turėti bendrą vardų sąrašą. Pavyzdžiui, ankstesniame pavyzdyje esantis mokesčių paketas turi pirminę & ldquoTax tvarkaraščių žymę. & Rdquo Visos šios formos jau žinomos, todėl tikslinga turėti greitą tvarkaraščio formų pavadinimų sąrašą. Tai yra pavyzdys, kurį mes naudojame čia. Tačiau šis scenarijus gali būti naudojamas bet kurioje situacijoje, kai naudojamas standartinis žymių pavadinimų sąrašas.

Norint sukurti žymes su tikromis paskirties vietomis, naudojamas meniu elementas & ldquoNaujoji knyga ir rdquo. Kaip minėta anksčiau, šis meniu elementas turi tam tikrų trūkumų. Akivaizdu, kad ji įdeda naują žymę žemiau šiuo metu pasirinktos žymės, o žymių pasirinkimo negalima aptikti ar valdyti naudojant „JavaScript“. Taigi, norint rasti naują žymę, reikia pagalbinės funkcijos. Čia rasite paieškos funkcijos kodą:

Ši funkcija peržiūri visas žymes viename žymių hierarchijos lygyje, „oBkMkParent“ir grąžina atitinkančią žymę cFindName. Kadangi ši funkcija tikrina tik vieno žymių hierarchijos lygio pavadinimus, ji rekursyviai vadina save kiekvieną kartą, kai susiduria su žyme su vaikais.

Prieš pereinant prie pagrindinio kodo, yra dar viena problema. Kai žymė sukuriama naudojant meniu & ldquoNewBookmark & ​​rdquo elementą, ji veikia redagavimo režimu ir yra sufokusuota klaviatūroje. Tai nėra gerai automatizavimui. Fokusas pašalinamas sukuriant antrąją žymę ir tada ją ištrinant. Kartais tai neveikia, o fokusavimą reikia perkelti rankiniu būdu, spustelėjus žymes. Tačiau net ir turint šiuos apribojimus bei problemas automatizavus žymių kūrimą, galima žymiai pagerinti darbo eigos našumą ir visiškai pašalinti rašybos klaidas, todėl tai verta pastangų.

Pirmojoje scenarijaus dalyje rodomas iššokantis žymių etikečių meniu. Tai galima pakeisti į savo sąrašą. Jei vartotojas iš meniu pasirenka vardą, sukuriamos dvi naujos žymės. Kaip minėta aukščiau, antroji žymė yra klaviatūros fokusavimo pašalinimas nuo pirmosios žymės. Dabar viskas, ką reikia padaryti, yra nustatyti naujos žymės pavadinimą. Kad tai padarytumėte, žyma turi būti toje vietoje, kur yra FindBookmarkByName () funkcija. Galiausiai ta pati funkcija naudojama surasti antrą naują žymę ir ją ištrinti. Jei viskas klostėsi teisingai, tinkamoje vietoje bus nauja žymė su teisingu pavadinimu. Jei viskas įvyko ne taip, bus nauja žyma ir ji bus pavadinta teisingai, bet jūs tai žinosite, nes ji vis tiek bus sufokusuota klaviatūroje. Tokiu atveju turite spustelėti naują žymę ir tada ją išjungti.

Šį kodą galima išbandyti naudojant „Acrobat JavaScript Console“. Gamybos atveju kodas turėtų būti įdėtas į aplanko lygio scenarijų ir pakeistas, kad būtų paleistas naudojant „Acrobat“ įrankių juostos mygtuką.

Nuorodos

Abiejų pavyzdžių kodą rasite šiame faile:
MakeBookmark_Example.pdf.

Daugiau informacijos apie žymių funkcijas rasite „Acrobat JavaScript Reference“ ir „Acrobat JavaScript Guide“.
https://www.adobe.com/devnet/acrobat.html

Spustelėkite skirtuką Dokumentacija ir slinkite žemyn iki „JavaScript“ skyriaus.


Apribojimai

Yra tik vienas rimtas dinaminio antspaudo scenarijaus apribojimas. Antspaudų failai nevykdo „JavaScript“ kaip įprastas PDF failas. Pavyzdžiui, nėra dokumentų ar puslapio įvykių. Dokumento scenarijuje negalima apibrėžti kintamųjų ir funkcijų. Vieninteliai scenarijai, kuriuos garantuojama vykdyti, yra antspaudo laukų skaičiavimo scenarijai. Viskas, kas būtina šiam scenarijui vykdyti, turi būti scenarijuje.

Kitas, mažiau svarbus apribojimas yra tas, kad įvykis.rc reikšmė neturi reikšmės dinaminiame antspaudo skaičiavimo scenarijuje. Jis neužkerta kelio laukui įgyti priskirtą vertę, kaip tai darytų įprastas skaičiavimo scenarijus.


7 atsakymai 7

Manau, kad esate labai sutrikęs dėl to, ką daro CORS ir SOP. nė vienas iš jų nėra susijęs su šiomis atakomis.

Yra daug būdų, kaip apeiti kliento pusės patvirtinimą. HTTP yra tik baitų srautas, o naudojant HTTP 1.x jie yra net žmogaus skaitomas tekstas (bent jau antraščių atveju). Dėl to nereikalinga suklastoti ar manipuliuoti užklausomis. Štai keletas būdų, kaip tai padaryti, sugrupuoti pagal grubias kategorijas:

Apeiti patvirtinimą naršyklėje

  • Eikite į savo svetainę ir įveskite netinkamas vertes. Naudokite naršyklės kūrimo įrankius, kad pašalintumėte patvirtinimo įvykius arba manipuliuotumėte jų vykdymu, kad bet kokiu atveju patikrintumėte. Pateikite formą.
  • Naudokite naršyklės kūrėjų konsolę, kad iš svetainės būtų siunčiamos užklausos tarsi per patvirtintą formą, bet su nepatvirtintomis įvestimis (tiesiog tiesiogiai pasinaudokite užklausą pateikiančia funkcija).
  • Naudokite naršyklės kūrimo įrankius, kad & cituotumėte ir iš naujo išsiųstumėte & quot; užklausą, o prieš siųsdami iš naujo, pakeiskite galiojančias turinio reikšmes į netinkamas.
  • GET užklausoms: tiesiog įveskite bet kurį URL su netinkamais parametrais į vietos juostą.
  • POST užklausoms, kuriose autentifikavimui naudojami ne tos pačios svetainės slapukai: sukurkite tinklalapį, kuris POST siunčia jūsų serveriui su numatytomis reikšmėmis (įskaitant bet kokį CSRF apsaugos raktą), bet su netinkamomis vertėmis, įkelkite jį į naršyklę ir pateikite.

Apeiti patvirtinimą naudojant ne naršyklės įrankius

  • Nustatykite naršyklę paleisti perimantį tarpinį serverį (kaip ir dauguma saugumo pramonės, dažniausiai naudoju „Burp Suite“, tačiau galite naudoti ir kitus, pvz., „Fiddler“). Užfiksuokite siunčiamą užklausą, sugadinkite laukus, kad jie taptų negaliojantys, ir išsiųskite juos.
  • Vėl naudokite perimantį tarpinį serverį, tačiau šį kartą pakartokite ankstesnę užklausą su pakeistomis, netinkamomis reikšmėmis („Burp“ tai yra būtent tas įrankis, skirtas kartotuvui).
  • Dešiniuoju pelės mygtuku spustelėkite užklausą naršyklės kūrimo įrankių tinklo istorijoje, pasirinkite & quot; Kopijuoti kaip cURL & quot;, įklijuokite gautą curl komandą į komandų eilutę, redaguokite patvirtintus laukus, kad jie taptų negaliojantys, paspauskite Enter, kad išsiųstumėte.

Kenkėjiškų užklausų kūrimas nuo nulio

  • Naudodami „Burp Repeater“, nurodykite savo svetainės protokolą, domeną ir prievadą. Pridėkite reikiamas antraštes, įskaitant visus slapukus ar kitas antraštes, kurių reikia autorizavimui. Pridėkite norimus parametrus su netinkamomis reikšmėmis. Spustelėkite „Siųsti“.
  • Naudodami „curl“ siųskite užklausą į savo svetainę su reikiamomis antraštėmis ir bet kokiu norimu turiniu, įskaitant netinkamas vertes.
  • Naudodamiesi „ncat“, atidarykite ryšį su savo svetaine, naudodami TLS, 443 prievade. Įveskite HTTP viršutinę eilutę, antraštes ir turinį (juk tai tik tekstas, nors prieš siunčiant jis bus užšifruotas). Jei reikia, atsiųskite failo pabaigos įvestį (paprastai serveris tiesiog nedelsdamas atsakys).
  • Parašykite nedidelį scenarijų/programą bet kuria kalba su TCP arba HTTP kliento biblioteka (nuo „JS“, veikiančio „Node“ iki visiškai sukompiliuotos „golang“ dvejetainės), kuri sukuria užklausą su visomis būtinomis antraštėmis ir netinkamais laukais ir siunčia ją į jūsų serverį . Paleiskite scenarijų/programą.

SOP taikoma tik tada, kai užklausa siunčiama naudojant naršyklę IR užklausa yra iš tinklalapio, priglobto kitoje kilmės vietoje (domeno, protokolo ir prievado derinys) nei užklausos paskirties vieta. Net ir tada SOP pirmiausia apsaugo nuo to, kad pradinis puslapis matytų atsakymą, o tai neužkerta kelio atakoms. Jei esate užpuolikas, bandantis įveikti kliento pusės patvirtinimą, galite tiesiog nusiųsti užklausą iš kilmės vietos, kurią puolate, ir SOP yra visiškai nesvarbi. Arba tiesiog nusiųskite užklausą iš kažko, kas nėra naršyklė (pvz., Tarpinis serveris, garbanos ar pasirinktinis scenarijus), nė vienas iš jų net neturi SOP.

CORS yra būdas iškišti skyles SOP (CORS to nedaro papildyti bet koks saugumas - tai būdas iš dalies sušvelninti SOP saugumo funkciją), todėl tai net nesvarbu, nebent SOP yra aktuali. Tačiau daugeliu atvejų galite pateikti įvairių šaltinių užklausą su netinkamais parametrais (pvz., Kai aš sukuriu savo atakos puslapį ir nukreipiu į jį naršyklę, tada naudoju ją savo svetainei pateikti neteisingą užklausą), nes dažniausiai užklausų, SOP riboja tik tai, ar matote atsakymą - galite siųsti užklausos kryžminę kilmę, net jei serveris visiškai neleidžia CORS - ir dažnai matant atsakymą nereikia.

Po autentifikavimo lengva ištrinti leidimo žetonus (slapukus, antraščių reikšmes, bet kokias) iš naršyklės (tiesiog išnagrinėkite tinklo srautą kūrimo įrankiuose arba naudokite tarpinį serverį). Atminkite, kad norint patvirtinti net kyla abejonių, užpuolikas turi turėti galimybę naudotis jūsų svetaine per naršyklę, o tai, ko gero, reiškia, kad jie gali autentifikuoti. Arba tiesiog pateikite autentifikavimo užklausą naudodami „curl“ ar bet ką, pašalinkite grąžintą žetoną iš atsakymo ir naudokite jį kenkėjiškoms negaliojančioms užklausoms, kurių visai nereikia naršyklei!

Naršyklė negali nieko padaryti (kalbant apie užklausų siuntimą į serverį), ko negaliu padaryti iš apvalkalo raginimo su kai kuriomis įprastomis atviro kodo paslaugomis.

REDAGUOTI: Kaip pažymi @chrylis-cautiouslyoptimistic, tai apima ir kilmės antraštės suklastojimą užklausoje. Nors kilmės antraštė paprastai nėra sukonfigūruojama naršyklėje - ją automatiškai nustato naršyklė, kai pateikiamos tam tikros rūšies užklausos - ją galima redaguoti išsiuntus užklausą (perimant arba iš naujo paleidžiant užklausą) arba tiesiog pirmiausia padirbk. Bet kokia apsaugos priemonė, pagrįsta šios antraštės buvimu, nebuvimu ar verte, bus veiksminga tik tuo atveju, jei užpuolikas netiesiogiai pateikia užklausą per netyčinės aukos naršyklę (kaip CSRF atveju), paprastai todėl, kad užpuolikas gali t autentifikuoti svetainėje arba nori atakuoti per kito vartotojo paskyrą. Visais kitais atvejais užpuolikas gali tiesiog pasirinkti, kokią vertę, jei tokią turi, suteikti kaip kilmę.

REDAGUOTI 2: Kaip minėjo @Tim, tokie dalykai kaip SOP ir kovos su CSRF priemonės yra skirtos apsaugoti Vartotojas svetainės užpuolimo, kurį sukėlė kažkas kitas internete (kitas tos pačios svetainės vartotojas arba pašalinis asmuo, norintis išnaudoti jūsų prieigą prie svetainės). Jie visiškai nesuteikia jokios apsaugos, kai įgaliotas vartotojas yra užpuolikas, o taikinys yra pati svetainė arba visi jos vartotojai, pvz., Saugomas XSS, SQL įterpimas ar kenkėjiškų failų įkėlimas (tai, ką žmonės kartais daro pabandykite užkirsti kelią patvirtindami klientą).


Nepageidaujamų skambučių košmaras per dieną užliejo šimtus keistų telefono skambučių

Šiuo atveju taip pat gali būti kaltas greitis, kuriuo korinio ryšio operatoriai perdirba telefono numerius. Ponia Mungus ką tik iš naujo suaktyvino turimą „iPhone“ numeriui, kuris bus naudojamas griežtai jos verslui. Per kelias valandas po SIM įjungimo telefonas reguliariai skambėjo skambinant iš nežinomų asmeninių telefono numerių. Prireikė maždaug dviejų savaičių, kol numirė, nes skambinantieji suprato, kad atsakytas balso paštas yra visiškai kitoks. Laimei, telefonas buvo įjungtas likus kelioms savaitėms iki ketinimo paskelbti numerį, todėl didelių sunkumų nekilo.

Atrodo, prisimenu prieš daugelį metų, kad fiksuotojo ryšio ir korinio ryšio paslaugų teikėjai išimdavo iš apyvartos išjungtus numerius kelias savaites, net mėnesius, todėl nauji numerio vartotojai turėjo daug mažesnę tikimybę sulaukti daugybės dabar neteisingo numerio skambučių. Panašu, kad neveikiančio numerio pasikeitimas trunka tik dienas ar valandas-niekada nežinai, koks bus „Pandoros dėžutė“ naujas telefono numeris. Tai galėjo būti pagrindinė šio incidento priežastis - tiesiog labai nesėkmingas pasirinkimas „perdirbto telefono numerio ruletėje“

Dar praėjusių metų kovo mėnesį įmonė, kurioje dirbau, atsiuntė mane pas klientą Čikagoje (aš gyvenu Argentinoje). Man buvo duota SIM (AT & ampT), kuri buvo atidaryta priešais mane. Man buvo pasakyta, kad 10 val. Ir 14 val. Jau turėjau 3 praleistus skambučius (telefoną visada tyliu, išskyrus kelis svarbius kontaktus).
1 pranešdamas man, kad & quotyour sūnus & ltname & gt šiandien neėjo į mokyklą. & Quot (spėju, perdirbtas telefono numeris), kitas - kruizui, trečias - man paskambinti XXXXXXXXXX numeriu, nes & ltreason neprisimenu & gt.

Iš esmės tai yra audito problema - galimi šlamšto skambučiai, nes PSTN mazgai nesaugo pakankamai informacijos, kad būtų galima tinkamai sekti telefono skambučio pradžios tašką.

Taisyklė, pagal kurią visi SS7 dalyviai turėtų sekti šią informaciją porą savaičių, suteiktų galimybę teisėsaugai nustatyti, kuris įėjimo į telefono tinklą taškas naudojamas tam tikram šlamšto siuntėjui (nes tai beveik visada yra jų naudojamos VoIP paslaugos). Grėsmė atsijungti nuo PSTN VoIP teikėjui tikrai suteiktų pakankamai motyvacijos išvalyti savo paslaugas ir užkirsti kelią šlamšto siuntėjams.

Aš tik ketinau paklausti apie tai. Dirbau korinio ryšio operatoriuose, tačiau turėdamas TIK pakankamai SS7 ekspozicijos, kad galėčiau sekti skambučių klaidas. Aš nepakankamai žinau jungiklių saugojimo ar audito galimybes, kad galėčiau pasakyti, kad tai lengva, sunku ar įmanoma.

Bet tikrai atrodo, kad mes pasiekiame tašką, kurio mums reikia. Jei to nepasiekėte prieš kurį laiką.

Prašymas tam, kuris dirba dirbtinio intelekto srityje.

suteikite mums galimybę perduoti šiuos skambučius balso pokalbių robotui. Siekdami, kad jie kuo ilgiau kalbėtų.

Kartais tai darau pati - 10 minučių praleidau kalbėdamas su kažkokiu vaikinu, kuris pažadėjo duoti man pigesnę elektros energiją (aš esu išjungtas iš saulės tinklo), tačiau jis greitai sensta. Būkite mandagūs (jie gauna minimalų atlyginimą), bet gaiškite laiką.

Automatizuokite tai ir greitai išnyks. Viskas apie matematiką.

Nors atrodo, kad eikvoti savo įmonių laiką yra kelias, jūs tikrai keliate darbuotojui sielvartą. Jie vertinami pagal našumą ir gali būti lengvai įžeisti už tai, kad praleido 10 minučių ir neuždarė sandorio. Bendradarbiai ir vadovai manys, kad praleido pakankamai laiko „susituokti“, ir viskas buvo veltui. Tuo tarpu „xyz“ sėkmės rodiklis yra 50% ir 10% laiko praleidžia prie telefono, tai reiškia, kad jie gali pasiekti daugiau žmonių.

Stengiuosi nešvaistyti nei jų, nei mano laiko. Man labiau rūpi darbuotojas, o ne įmonės numeris. Gaila, kad darbuotojų diena gera ar bloga priklauso nuo to, kaip jie padeda/sugadina tuos skaičius. Aš rimtai sakau, kad jei jų skaičius nepagerės, jie bus tiesiog atleisti. ilgas pokalbis telefonu be rezultatų gali prarasti gerą žmogų savo darbą.

Kadangi negirdžiu apie tokius dalykus, vykstančius Vokietijoje (iš šeimos, draugų ir naujienų), bet aš juos patiriu beveik kasdien JAV, manau, kad tai įmanoma tik laukiniuose laukiniuose vakaruose, vadinamuose JAV. Civilizuotose šalyse tokie dalykai galimi tik paskambinus už šalies ribų ir padirbant skambutį už šalies ribų.

Tam tikru momentu vienas iš robotų buvo užprogramuotas būti tikrai priešiškas ir gynybinis.

Į neatpažintą numerį atsakiau linksmindamasis, žinodamas, kas tai bus. Po šios antros ilgos pauzės robotas pradėjo apie kažką kalbėti. Taigi paklausiau, kokia data.

Tai vėl pristabdė mano klausimą, tada pasakė & kvota, kad tu iš manęs tyčiojiesi? & Quot; ir padėjo ragelį.

Aš net neatsiliepiu į telefoną, jei skambantis numeris nėra mano kontaktų sąraše.

Kitas žingsnis, kurį ketinu atlikti, yra iš anksto nustatyti balso paštą su atjungtais tonais, kad pamatytumėte, ar tai padeda išbraukti mano numerį iš skambučių sąrašų.

Aš tai padariau su savo namų telefonu ir atsakikliu. Puikiai veikė. Anksčiau per savaitę gaudavau keliolika šlamšto skambučių, bet jau ne vienerius metus. O skambinantys žmonės net nepastebi.

Jums tereikia pirmųjų trijų tonų. Midi versijas galite rasti internete.

Ar tai veikia? Nes jūs manote, kad tas tonas turėtų būti išsiųstas nedelsiant, nes priešingu atveju skambėjimo tonas reiškia, kad jis galioja.

Linkiu „Google“ akcijų rinkikliui blokuoti vietovės kodą. Mano lg telefonas tai padarė. Štai dabar, jei norite man paskambinti, naudokite „WhatsApp“ arba signalą, nes nepavyks, nebent esate mano adresų knygoje. Balso kokybė taip pat yra geresnė, nes tinklai neveiks hd balso, nebent šiuo metu neturite mobiliojo ryšio operatoriaus telefono.

Turiu HD balsą „t-mobile“ su „iPhone“. Perkelta iš AT & ampT.

Aš sutikčiau. Atrodo, kad tai daugiausia JAV problema. Tačiau naudojama technologija nedaug skiriasi ES, JAV ar trečiojo pasaulio šalyje, ypač jei reikia turėti protokolą „teisėtiems“ ryšiams tvarkyti. Tai, kad jūsų draugai ir šeima nėra to aukos, dar nereiškia, kad jie to nesuvokia

Aš sutikčiau. Atrodo, kad tai daugiausia JAV problema. Tačiau naudojama technologija nedaug skiriasi ES, JAV ar trečiojo pasaulio šalyje, ypač jei reikia turėti protokolą „teisėtiems“ ryšiams tvarkyti. Tai, kad jūsų draugai ir šeima nėra to aukos, dar nereiškia, kad jie to nesuvokia

Išbandykite šį eksperimentą JAV:
Pabandykite gauti vaikų pornografiją, paslėptą už tokio skambinančio asmens klastotės, ir pamatysite, kaip greitai vyriausybė jus sulauks.

Ne - tokia neteisėta situacija (kad įstatymai vykdomi tik kartais) yra įmanoma tik JAV.

Aš net neatsiliepiu į telefoną, jei skambantis numeris nėra mano kontaktų sąraše.

Kitas žingsnis, kurį ketinu atlikti, yra iš anksto nustatyti balso paštą su atjungtais tonais, kad sužinotumėte, ar tai padeda išbraukti mano numerį iš skambučių sąrašų.

Aš tai padariau su savo namų telefonu ir atsakikliu. Puikiai veikė. Anksčiau per savaitę gaudavau keliolika šlamšto skambučių, bet jau ne vienerius metus. O skambinantys žmonės net nepastebi.

Jums tereikia pirmųjų trijų tonų. Midi versijas galite rasti internete.

Ar tai veikia? Nes jūs manote, kad tas tonas turėtų būti išsiųstas nedelsiant, nes priešingu atveju skambėjimo tonas reiškia, kad jis galioja.

Linkiu „Google“ akcijų rinkikliui blokuoti vietovės kodą. Mano lg telefonas tai padarė. Štai dabar, jei norite man paskambinti, naudokite „WhatsApp“ arba signalą, nes nepavyks, nebent esate mano adresų knygoje. Balso kokybė taip pat yra geresnė, nes tinklai neveiks hd balso, nebent šiuo metu neturite mobiliojo ryšio operatoriaus telefono.

Turiu HD balsą „t-mobile“ su „iPhone“. Perkelta iš AT & ampT.

Jei tai nebūtų tikslinė ataka, nustebčiau. Pardavimų agentai, ypač nekilnojamojo turto agentai, yra žmonės, kurie priklauso nuo savo telefono, norėdami susisiekti, įsigyti ir aptarnauti klientus. Konkuruojantys agentai ar agentūros, naudodami lengvai prieinamus įrankius, galėtų labai lengvai surengti DDoS ataką arba bent jau pasamdyti tą, kuris galėtų.

Vietos teisėsauga yra apgailėtinai nepasirengusi tam, kas greičiausiai bus vis dažnesnė.

Gali būti, kad jūsų teikėjas turi duomenų nutekėjimą. Aš beveik įtariu, kad „Cricket“ arba nutekėjo, arba kažkas iš vidaus pardavinėjo naujai suaktyvintų ar perkeltų numerių sąrašus, nes iš tikrųjų, kai mano šeima pakeitė mūsų teikėją iš „AT & ampT“ į „Cricket“ (jų MVNO), mes staiga pradėjome gauti daugybę šlamšto skambučių kiekvienu mūsų numeriu, dažnai iš tų pačių šlamšto siuntėjų. Dabar turiu retkarčiais ištrinti numerius iš savo telefono blokuojamojo sąrašo, kad atsirastų vietos naujų numerių antplūdžiui, ir net tada, kai blokuoju keitimu, o ne konkrečiu numeriu.

Vieną dalyką, kurį žinau apie telemarketininkus, yra tai, kad jei neteisingas telemarketingo sielvartas jums paskambino, galite patekti į jų & quotshit sąrašą & quot. Tada gausite 5 ar daugiau skambučių per dieną tiek laiko, kiek jie nori. Ši keršto taktika nėra neįprasta ir jie tai daro žmonėms daugiau metų, nei galite įsivaizduoti.

Aš tą patį patyriau per pastaruosius porą mėnesių, nors beveik ne tokio masto kaip moteris iš straipsnio. Tekstai ir telefono skambučiai, tekstai šaukia asmenį, vardu Sharon, ir čia nėra Sharono.

Mano taip pat sumažėjo per pastarąsias porą savaičių, tačiau vidutiniškai gaunu bent 5 per dieną dabar, kai buvo daug sunkiau. Turiu 2 skirtingus šlamšto/sukčių blokatorius, kurie, atrodo, veikia pakankamai gerai. Ne tobula, bet bent jau padoriai. Ir aš pranešiau apie skambučius savo vežėjui per jų automatinę paslaugą.

Tai skaudu net ir nevedant verslo, galiu tik įsivaizduoti siaubą, kurį patyrė moteris.

Savo telefone turiu skambučių valdymo ir skambučių blokavimo programą ir ji neleidžia žinomiems šlamšto siuntėjams skambinti.
Tai derinama su „Netrukdyti“ nustatymais, todėl tik mano kontaktai turi prioritetą ir skamba.
Taip pat peradresuoju visus neatsakytus skambučius į „Google Voice“ numerį. Tokiu būdu gaunu el. Laišką su įrašo diktatu ir tekstinį pranešimą, kai įrašomas balso paštas.
Tai būtų buvęs puikus būdas filtruoti teisėtus skambučius iš „& quot“ fakso skambučių.
Įsivaizduočiau, kad „Google“ turi didesnę balso pašto talpyklą nei jos mobiliojo ryšio teikėjas.

Kaip peradresuoti nežinomus skambučius į „Google Voice“?

Panašu, kas nutiko mums, kai namuose gavome antrą eilutę (kad vaikai neužkabintų telefono). Kai tik linija buvo suaktyvinta, mums paskambino kažkas, klausdamas, kada bus kitas „susitikimas“. Pasakiau jai, kad ji turi neteisingą numerį, ir padėjau ragelį. Tada per ateinančias tris dienas nuolat skambinome ir klausėme apie „susitikimus“. Skambinantieji niekada savanoriškai nepateikė jokios kitos informacijos, kad man būtų aišku, apie ką jie kalba, nepaisant to, kad paklausiau, kokie buvo šie susitikimai.

Finally, the woman from the first call called again and asked if I was aware of the "One True Religion". I got into an argument with her about the existence of God she used a favourite of the Intelligent Design crowd - the Watchmaker Analogy. Being an archaeologist, I've had countless run-ins with bible-humpers and Young Earth types, so I countered with the classic rebuttals made by Hume and Darwin. Eventually, she told me that I was a lost cause and hung up.

It turns out that this phone number had formerly belonged to a Jehovah's Witness Kingdom Hall. That's what all the malarkey about "meetings" was about. The calls petered out a couple of months later, so there weren't any lasting issues, unlike the problem I mentioned in my earlier post.

"How do you forward unknown calls to Google Voice?"

An "unknown caller" wouldn't be a legitimate caller.
Why would you want to forward it? Calls forwarded to Google Voice would only be the ones with numbers. Whether "spoofed" or not.
Kim France was worried that she would miss calls from clients. A client or customer wouldn't show up as "Unknown Caller".
It would have a number associated with it.

This is easy to fix. It's not complicated. You have to look at this from an economic perspective and not a technical one.

Robocalling is effectively free for the scammer -- the cost is born by the recipient, not the sender. Which is the exact reason why it's a nuisance, just like spam email. THE DIFFERENCE between this and spam email -- is that you CAN in fact cost them money for calling you.

If you go through to a human and talk to them (acting like you'll buy something) for as long as possible until they hang up on you, then you're helping the situation. That means it costs them money to call you . They have to pay the human. If it costs them money and you don't buy anything, you're part of the solution .

Think of it as crowdsourced robo-killer human economic enforcers.

How are robocalling costs born by the recipient?

Do you have a job? How much time do you spend *not* at it? Now figure that the robocaller is using up time you could be spending doing literally anything else. That's your cost right there.

I would agree. This seems to be a USA problem mainly. However the technology involved is not much different in EU, USA or a third world country, specially if there has to be protocol to handle "legacy" connections. The fact that your friends and family are not victims of this does not mean they are inmune to it

It just means that most places move the burden. You don't try to penalise the spam services (though you do if you can catch them). You penalise the organisations that advertise *through* the spam services. If those people want your money, then they have to leave a simple trail to follow in order to get it.

Of course, that only applies to at least semi-legitimate services. There will always be complete fraudsters. But here in NZ, the government department responsible for enforcing anti-spam regulations actually goes to quite some lengths to track down the true fraudsters including passing their cases to Interpol when they are outside the country. I've met with them a few times in my professional capacity as the SMS technical service owner at one of the cellular companies here, although these days we have a couple of teams who do agency liaison.

I've had this same problem (although not as crazy) and finally I just installed a free program on Android called "Mr. Number". There's a setting that blocks all calls not in my contacts list. It sends them to voicemail and I have yet to get a voicemail from the spoofers. If it's a legitimate phone call they can leave a message. Works great. It would be cool to see Robokiller come to Android though!

"How do you forward unknown calls to Google Voice?"

An "unknown caller" wouldn't be a legitimate caller.
Why would you want to forward it? Calls forwarded to Google Voice would only be the ones with numbers. Whether "spoofed" or not.
Kim France was worried that she would miss calls from clients. A client or customer wouldn't show up as "Unknown Caller".
It would have a number associated with it.

Well, now I have to take that back.
My cousin and I have been experimenting using Google Voice and Hangouts to reduce minutes on our phones using Wi-Fi calling.
He called me and it was listed on my phone as "unknown caller", but the call was still forwarded to Google Voice and I received the email with the dictation of his message.
Only the phone didn't ring because "Unknown caller" isn't in my contacts. Now since I hardly get any "Unknown Calls" I created a contact and we'll see if that works.

Anyway "Unknown caller" will get forwarded to Google Voice.
Any unanswered call will get forwarded.

"How do you forward unknown calls to Google Voice?"

An "unknown caller" wouldn't be a legitimate caller.
Why would you want to forward it? Calls forwarded to Google Voice would only be the ones with numbers. Whether "spoofed" or not.
Kim France was worried that she would miss calls from clients. A client or customer wouldn't show up as "Unknown Caller".
It would have a number associated with it.

Well, now I have to take that back.
My cousin and I have been experimenting using Google Voice and Hangouts to reduce minutes on our phones using Wi-Fi calling.
He called me and it was listed on my phone as "unknown caller", but the call was still forwarded to Google Voice and I received the email with the dictation of his message.
Only the phone didn't ring because "Unknown caller" isn't in my contacts. Now since I hardly get any "Unknown Calls" I created a contact and we'll see if that works.

Anyway "Unknown caller" will get forwarded to Google Voice.
Any unanswered call will get forwarded.

If you have an iPhone, you can also use FaceTime Audio (VoIP calling). This also works for phones that don't have Wi-Fi calling, if you're in a place with no cellular service, or plans which still bill Wi-Fi calls to your plan.

Does Android have an equivalent VoIP mode for voice calling?

Off the subject, but no iPhone, using Android Nexus 6P.
If two people are on home Wi-Fi and calling over the Internet, how can cell providers charge for any minutes?
Unless using Data which wouldn't make much sense.
Skype is another way to use VOIP, but lately has been going downhill. Microsoft can't keep their hands off of anything that is running and works fine.

While it does seem like wasting their companies time is the way to go you are really causing the employee some grief. They are judged based on performance and could easily be berated for spending 10 minutes and not closing the deal. Co-workers and managers will surmise that they spent enough time to get 'married' and than it was all for nothing. Meanwhile xyz here has a success rate of 50% and spends 10% the time on the phone meaning they can reach more people.

I try to not waste their time nor mine. I am more concerned about the employee than the company numbers. Too bad the employees day good or bad depend on how they help/hurt those numbers. I am dead serious when I say that if their numbers don't improve they will just get fired. long time on the phone with no results may lose a good person their job.

It is still wasting the company's time. If enough of their employees get enough people not converting to sales, their cost of doing business goes up and their profit margins will shrink, ideally to the point of going negative. If they fire or make working unpleasant to employees who are just unlucky in getting do-gooders trying to mess with criminal behavior, then they will get hiring and retention problems. Making everyone involved in robocalling so miserable they quit isn't a bug, it's Plan B!

The more friction we can add to the business, the more we erode its profitability, and the less incentive there is for people to run these illegal businesses. If we don't have a technical fix in sight, making it unprofitable is the best culture-wide weapon in our arsenal.

Also, do we worry about people in criminal enterprises losing their jobs now? Should we not shut down drug cartels, even if their underage runners lose their income? There is no moral right for someone to retain employment in a criminal enterprise. In fact, they have a moral duty to quit, and the faster we can get them to do so, the better for their souls and our patience.

Doupé hopes the caller verification system will eventually be integrated into the core backbone of the SS7 signaling protocol. With Doupé's prototype, an authentication token is added to each message so the call recipient can verify that the caller owns the phone number, similar to the green security lock displayed by Web browsers in the URL bar of HTTPS-enabled websites.

"The idea is you call somebody and simultaneously when you make that call you send them an SMS message with this authentication token," he said. "That way when they receive the call, they can do all the crypto to verify that you actually own this number that you're calling from."


CSS and JavaScript are accessible?

CSS and JavaScript don't have the same immediate importance for accessibility as HTML, but they are still able to help or damage accessibility, depending on how they are used. To put it another way, it is important that you consider some best practice advice to make sure that your use of CSS and JavaScript doesn't ruin the accessibility of your documents.

Let's start off by looking at CSS.

Correct semantics and user expectation

It is possible to use CSS to make any HTML element look like anything, but this doesn't mean that you should. As we frequently mentioned in our HTML: A good basis for accessibility article, you should use the appropriate semantic element for the job, whenever possible. If you don't, it can cause confusion and usability issues for everyone, but particularly users with disabilities. Using correct semantics has a lot to do with user expectations — elements look and behave in certain ways, according to their functionality, and these common conventions are expected by users.

As an example, a screen reader user can't navigate a page via heading elements if the developer hasn't appropriately used heading elements to markup the content. By the same token, a heading loses its visual purpose if you style it so it doesn't look like a heading.

The rule of thumb is that you can update the styling of a page feature to fit in your design, but don't change it so much that it no longer looks or behaves as expected. The following sections summarize the main HTML features to consider.

"Standard" text content structure

Headings, paragraphs, lists — the core text content of your page:

Some typical CSS might look like this:

  • Select sensible font sizes, line heights, letter spacing, etc. to make your text logical, legible, and comfortable to read.
  • Make sure your headings stand out from your body text, typically big and bold like the default styling. Your lists should look like lists.
  • Your text color should contrast well with your background color.

Emphasised text

Inline markup that confers specific emphasis to the text that it wraps:

You might want to add some simple coloring to your emphasised text:

You will however rarely need to style emphasis elements in any significant way. The standard conventions of bold and italic text are very recognisable, and changing the style can cause confusion. For more on emphasis, see Emphasis and importance.

Abbreviations

An element that allows an abbreviation, acronym, or initialization to be associated with its expansion:

Again, you might want to style it in some simple way:

The recognized styling convention for abbreviations is a dotted underline, and it is unwise to significantly deviate from this. For more on abbreviations, see Abbreviations.

Links

Hyperlinks — the way you get to new places on the web:

Some very simple link styling is shown below:

The standard link conventions are underlined and a different color (default: blue) in their standard state, another color variation when the link has previously been visited (default: purple), and yet another color when the link is activated (default: red). In addition, the mouse pointer changes to a pointer icon when links are moused over, and the link receives a highlight when focused (e.g. via tabbing) or activated. The following image shows the highlight in both Firefox (a dotted outline) and Chrome (a blue outline):

You can be creative with link styles, as long as you keep giving users feedback when they interact with the links. Something should definitely happen when states change, and you shouldn't get rid of the pointer cursor or the outline — both are very important accessibility aids for those using keyboard controls.

Form elements

Elements to allow users to input data into websites:

You can see some good example CSS in our form-css.html example (see it live also).

Most of the CSS you'll write for forms will be for sizing the elements, lining up labels and inputs, and getting them looking neat and tidy.

You shouldn't however deviate too much from the expected visual feedback form elements receive when they are focused, which is basically the same as links (see above). You could style form focus/hover states to make this behavior more consistent across browsers or fit in better with your page design, but don't get rid of it altogether — again, people rely on these clues to help them know what is going on.

Lentelės

Tables for presenting tabular data.

You can see a good, simple example of table HTML and CSS in our table-css.html example (see it live also).

Table CSS generally serves to make the table fit better into your design and look less ugly. It is a good idea to make sure the table headers stand out (normally using bold), and use zebra striping to make different rows easier to parse.

Color and color contrast

When choosing a color scheme for your website, make sure that the text (foreground) color contrasts well with the background color. Your design might look cool, but it is no good if people with visual impairments like color blindness can't read your content.

There is an easy way to check whether your contrast is large enough to not cause problems. There are a number of contrast checking tools online that you can enter your foreground and background colors into, to check them. For example WebAIM's Color Contrast Checker is simple to use, and provides an explanation of what you need to conform to the WCAG criteria around color contrast.

Pastaba: A high contrast ratio will also allow anyone using a smartphone or tablet with a glossy screen to better read pages when in a bright environment, such as sunlight.

Another tip is to not rely on color alone for signposts/information, as this will be no good for those who can't see the color. Instead of marking required form fields in red, for example, mark them with an asterisk and in red.

Hiding things

There are many instances where a visual design will require that not all content is shown at once. For example, in our Tabbed info box example (see source code) we have three panels of information, but we are positioning them on top of one another and providing tabs that can be clicked to show each one (it is also keyboard accessible — you can alternatively use Tab and Enter/Return to select them).

Screen reader users don't care about any of this — they are happy with the content as long as the source order makes sense, and they can get to it all. Absolute positioning (as used in this example) is generally seen as one of the best mechanisms of hiding content for visual effect, because it doesn't stop screen readers from getting to it.

On the other hand, you shouldn't use visibility :hidden or display :none , because they do hide content from screen readers. Unless of course, there is a good reason why you want this content to be hidden from screen readers.

Pastaba: Invisible Content Just for Screen Reader Users has a lot more useful detail surrounding this topic.

Accept that users can override styles

Accept that users can override your styles

It is possible for users to override your styles with their own custom styles, for example:

  • See Sarah Maddox's How to use a custom style sheet (CSS) with Firefox for a useful guide covering how to do this manually in Firefox, and How to use a custom style sheet (CSS) with Internet Explorer by Adrian Gordon for the equivalent IE instructions.
  • It is probably easier to do it using an extension, for example the Stylish extension is available for Firefox, Safari, Opera, and Chrome.

Users might do this for a variety of reasons. A visually impaired user might want to make the text bigger on all websites they visit, or a user with severe color deficiency might want to put all websites in high contrast colors that are easy for them to see. Whatever the need, you should be comfortable with this, and make your designs flexible enough so that such changes will work in your design. As an example, you might want to make sure your main content area can handle bigger text (maybe it will start to scroll to allow it all to be seen), and won't just hide it, or break completely.


What is WAI-ARIA?

Let's start by looking at what WAI-ARIA is, and what it can do for us.

A whole new set of problems

As web apps started to get more complex and dynamic, a new set of accessibility features and problems started to appear.

For example, HTML5 introduced a number of semantic elements to define common page features ( <nav> , <footer> , etc.) Before these were available, developers would use <div> s with IDs or classes, e.g. <div > , but these were problematic, as there was no easy way to easily find a specific page feature such as the main navigation programmatically.

The initial solution was to add one or more hidden links at the top of the page to link to the navigation (or whatever else), for example:

But this is still not very precise, and can only be used when the screenreader is reading from the top of the page.

As another example, apps started to feature complex controls like date pickers for choosing dates, sliders for choosing values, etc. HTML5 provides special input types to render such controls:

These are not well-supported across browsers, and it is also difficult to style them, making them not very useful for integrating with website designs. As a result, developers quite often rely on JavaScript libraries that generate such controls as a series of nested <div> s or table elements with classnames, which are then styled using CSS and controlled using JavaScript.

The problem here is that visually they work, but screenreaders can't make any sense of what they are at all, and their users just get told that they can see a jumble of elements with no semantics to describe what they mean.

Enter WAI-ARIA

WAI-ARIA (Web Accessibility Initiative - Accessible Rich Internet Applications) is a specification written by the W3C, defining a set of additional HTML attributes that can be applied to elements to provide additional semantics and improve accessibility wherever it is lacking. There are three main features defined in the spec:

  • Roles — These define what an element is or does. Many of these are so-called landmark roles, which largely duplicate the semantic value of HTML5 structural elements e.g. role="navigation" ( <nav> ) or role="complementary" ( <aside> ), but there are also others that describe different pages structures, such as role="banner" , role="search" , role="tabgroup" , role="tab" , etc., which are commonly found in UIs.
  • Savybės — These define properties of elements, which can be used to give them extra meaning or semantics. As an example, aria-required="true" specifies that a form input needs to be filled in order to be valid, whereas aria-labelledby="label" allows you to put an ID on an element, then reference it as being the label for anything else on the page, including multiple elements, which is not possible using <label for="input"> . As an example, you could use aria-labelledby to specify that a key description contained in a <div> is the label for multiple table cells, or you could use it as an alternative to image alt text — specify existing information on the page as an image's alt text, rather than having to repeat it inside the alt attribute. You can see an example of this at Text alternatives.
  • Valstybės — Special properties that define the current conditions of elements, such as aria-disabled="true" , which specifies to a screenreader that a form input is currently disabled. States differ from properties in that properties don't change throughout the lifecycle of an app, whereas states can change, generally programmatically via JavaScript.

An important point about WAI-ARIA attributes is that they don't affect anything about the web page, except for the information exposed by the browser's accessibility APIs (where screenreaders get their information from). WAI-ARIA doesn't affect webpage structure, the DOM, etc., although the attributes can be useful for selecting elements by CSS.

Pastaba: You can find a useful list of all the ARIA roles and their uses, with links to futher information, in the WAI-ARIA spec — see Definition of Roles.

The spec also contains a list of all the properties and states, with links to further information — see Definitions of States and Properties (all aria-* attributes).

Where is WAI-ARIA supported?

This is not an easy question to answer. It is difficult to find a conclusive resource that states what features of WAI-ARIA are supported, and where, because:

  1. There are a lot of features in the WAI-ARIA spec.
  2. There are many combinations of operating system, browser, and screenreader to consider.

This last point is key — To use a screenreader in the first place, your operating system needs to run browsers that have the necessary accessibility APIs in place to expose the information screenreaders need to do their job. Most popular OSes have one or two browsers in place that screenreaders can work with. The Paciello Group has a fairly up-to-date post that provides data for this — see Rough Guide: browsers, operating systems and screen reader support updated.

Next, you need to worry about whether the browsers in question support ARIA features and expose them via their APIs, but also whether screenreaders recognize that information and present it to their users in a useful way.

  1. Browser support is generally quite good — at the time of writing, caniuse.com stated that global browser support for WAI-ARIA was around 88%.
  2. Screenreader support for ARIA features isn't quite at this level, but the most popular screenreaders are getting there. You can get an idea of support levels by looking at Powermapper's WAI-ARIA Screen reader compatibility article.

In this article, we won't attempt to cover every WAI-ARIA feature, and its exact support details. Instead, we will cover the most critical WAI-ARIA features for you to know about if we don't mention any support details, you can assume that the feature is well-supported. We will clearly mention any exceptions to this.

Pastaba: Some JavaScript libraries support WAI-ARIA, meaning that when they generate UI features like complex form controls, they add ARIA attributes to improve the accessibility of those features. If you are looking for a 3rd party JavaScript solution for rapid UI development, you should definitely consider the accessibility of its UI widgets as an important factor when making your choice. Good examples are jQuery UI (see About jQuery UI: Deep accessibility support), ExtJS, and Dojo/Dijit.

When should you use WAI-ARIA?

We talked about some of the problems that prompted WAI-ARIA to be created earlier on, but essentially, there are four main areas that WAI-ARIA is useful in:

  1. Signposts/Landmarks: ARIA's role attribute values can act as landmarks that either replicate the semantics of HTML5 elements (e.g. <nav> ), or go beyond HTML5 semantics to provide signposts to different functional areas, e.g search , tabgroup , tab , listbox , etc.
  2. Dynamic content updates: Screenreaders tend to have difficulty with reporting constantly changing content with ARIA we can use aria-live to inform screenreader users when an area of content is updated, e.g. via XMLHttpRequest, or DOM APIs.
  3. Enhancing keyboard accessibility: There are built-in HTML elements that have native keyboard accessibility when other elements are used along with JavaScript to simulate similar interactions, keyboard accessibility and screenreader reporting suffers as a result. Where this is unavoidable, WAI-ARIA provides a means to allow other elements to receive focus (using tabindex ).
  4. Accessibility of non-semantic controls: When a series of nested <div> s along with CSS/JavaScript is used to create a complex UI-feature, or a native control is greatly enhanced/changed via JavaScript, accessibility can suffer — screenreader users will find it difficult to work out what the feature does if there are no semantics or other clues. In these situations, ARIA can help to provide what's missing with a combination of roles like button , listbox , or tabgroup , and properties like aria-required or aria-posinset to provide further clues as to functionality.

One thing to remember though — you should only use WAI-ARIA when you need to! Ideally, you should visada use native HTML features to provide the semantics required by screenreaders to tell their users what is going on. Sometimes this isn't possible, either because you have limited control over the code, or because you are creating something complex that doesn't have an easy HTML element to implement it. In such cases, WAI-ARIA can be a valuable accessibility enhancing tool.

But again, only use it when necessary!

Pastaba: Also, try to make sure you test your site with a variety of tikras users — non-disabled people, people using screenreaders, people using keyboard navigation, etc. They will have better insights than you about how well it works.


If you ping to the name of your computer which ip address do you see in the results? Is that the ip address of your network connection? If that is the case, then you probably have to open up port 80 on your windows firewall. (I assume the site(s) on your IIS are running on port 80.) The firewall has to allow incoming traffic on port 80.

Windows Firewall can not get out to your DNS to resolve your computer name back to 127.0.0.1

You can also put the computer name in the c:windowssystem32driversetchost file along with the 127.0.0.1 address.


Administrators

How can I have my site listed in the Moodle app site finder?

Please refer to our Moodle app guide for admins for instructions.

How can I debug errors in the app?

Go to the More tab and then to Settings > General. Enable "Display debug messages". This will show an explanatory message when an error occurs, alternatively, you can do a full debugging via: https://docs.moodle.org/dev/Moodle_Mobile_debugging_WS_requests

I can connect with my iPhone but not with my Android phone

This usually happens when the site is using https and the certificate is not correctly configured or it is using an old protocol, please use these pages to check this certificate: https://www.geocerts.com/ssl_checker and https://www.ssllabs.com/ssltest/analyze.html

I can connect with my Android but not with my iPhone (or iOS device)

This is usually a server configuration problem caused by this bug: "access-control-allow-origin cannot contain more than one origin"

iOS-based apps do not allow the following header to contain more than one item "Access-Control-Allow-Origin", for example, a header like this: Access-Control-Allow-Origin: *, https://mydomain.com will cause problems

This HTTP header is not valid, according to the specification you can only specify a domain or a "*", this is failing only in iOS (probably because the native Safari implementation is more restrictive): https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin

Please, review if you have a Proxy/Firewall/Web Server adding automatically values to that HTTP header. Once this server misconfiguration issue is solved, you will be able to access to your site using the app in iOS

I can't get the app to work. Ką aš galiu padaryti?

Assuming you have enabled mobile services on your site, please check:

  1. If your site uses an SSL certificate, it must be a trusted certificate, not self-signed. Please use these tools or a similar one to check that your certificate is fine: SSL Checker and SSL Server Test. All the checks must be ok, including the "Certificate Chain Complete". Otherwise the app might work on iOS but not on Android.
  2. Debugging is disabled (in Site administration > Development > Debugging)
  3. The ADOdb debug option is disabled if you are using the external database auth or enrolment plugin (in Plugins > Authentication > External database ir į Plugins > Enrolment > External database).
  4. SHA-1 https certificates are not supported anymore in Chrome, this means that the Android version of the app won't work for your site. If your site doesn't work in desktop Chrome or Chromium it won't work in the Android app. See https://blog.chromium.org/2014/09/gradually-sunsetting-sha-1.html for more information
  5. If you are using IIS check that Anonymous access is not disabled for the /webservice directory.
  6. If you are using a web application firewall like StackPath, Barracuda, Cloudflare, Juniper, etc. try to temporary disable it to check if that's the cause. If so, you'll have to whitelist these endpoints: login/token.php, webservice/*, lib/ajax/*, media/player/vimeo/wsplayer.php and /tokenpluginfile.php

If you still have a problem, please post in the Moodle for mobile forum.

I cannot access with old users, but I can with recently created ones!

Please, do a "Purge all caches" via the Moodle administration settings, this will solve the problem.

I can't view the courses tab as an administrator

The Moodle app only displays courses you are enrolled in. If you want to view a course as an admin, you need to enrol in it.

My Moodle site uses a SSO auth method (Shibboleth, CAS, Google OAuth, etc) and the app is not working

See the section 'Mobile authentication' in the Moodle app guide for admins for details of how to configure it.

If configured the app is still not connecting: If your site uses an SSL certificate, it must be a trusted certificate, not self-signed. Please use this tool or a similar one to check that your certificate is fine: SSL Checker. All the checks must be OK, including the "Certificate Chain Complete".

If your SSO method is unable to authenticate when using an "embedded browser" (it gives an authentication error), please check if it works with a "browser window". If it does work with the browser window then it means your SSO is performing an HTTP redirect, and these kind of redirects aren't supported by the app (the request is redirected by the browser not passing the POST parameters). Unfortunately, this is something we cannot control in the Mobile app (it can't be handled via JavaScript). For further information, see http://stackoverflow.com/questions/228225/prevent-redirection-of-xmlhttprequest and http://stackoverflow.com/questions/4168784/ajax-redirection-handling

There are only 2 possible solutions: set the authentication via a "browser window" instead of an embedded one (please notice this won't work in the Linux desktop app), or remove the redirect from the SSO auth method.

SSO is not working with my custom auth plugin

SSO should work in any plugin if the plugin handles correctly the $SESSION->wantsurl, this is the way SSO works when it is launched via the app:

  • It launchs this URL https://yourmoodle/local/mobile/launch.php?service=local_mobile&passport=abc in the device browser (Moodle 3.2 onwards the URL is /tool/mobile instead local/mobile)
  • If the user is not logged in, the browser will redirect the user to the login page
  • If the auth plugin used implements correctly the handling of the wantsurl session var, once the user has logged in, the browser should redirect back to the https://yourmoodle/local/mobile/launch.php?service=local_mobile&passport=abc URL that will launch the mobile app via the custom URL protocol

Custom auth plugins may be failing in the last step,not redirecting back to local/mobile, this will happen only if the plugin does not support correctly the $SESSION->wantsurl.

The SAML plugin works correctly but some modifications of that plugin may not work if important lines are changed.

I am having problems requesting an airnotifier access key

If you have registered your site but are still unable to request an access key, please register your site on the Moodle Apps Portal https://apps.moodle.com once your site is registered there, an Airnotifier access key will be automatically generated for you.

Push notifications are not working

I configured 'QR code access' to automatic login, but the app still asks for credentials

Automatic authentication only works for Pro and Premium sites. You can see the app plans in this site.

I you're getting an error saying that the device you're using to connect isn't in the same network as the device that displays the QR code but both devices are connected to the same network, please check the section: ipmissmatch: 'Client IP address mismatch'.

Some users are asked to reauthenticate too often when they browse the site

This can happen if the app is sending too many variables to a WebService, e.g. because a course has a large number of sections and/or activities. This error will be fixed in the 3.9.3 version of the app, but you can increase the value of max_input_vars į php.ini to fix it in your server.

Klaidų pranešimai

'Can not find data record in database table external_functions'

This error usually happens due to a bad configuration or setting value in your Moodle site, please check:

  1. The user quota global setting should be an integer. For more details, see the discussion How to enable Moodle Mobile App for all accounts.
  2. The usermaxuploadfilesize should be an integer, please try to decrease the size. It can be configured in Site Administration > Security > Site Policies > Maximum uploaded file size. The default value (Site upload limit) depends on the PHP configuration, you might have to change the value of upload_max_filesize ir post_max_size tavo php.ini failą.
  3. The user "lang" field in the database is set to a correct value and existing language installed in the site. Some times the lang field is set via external systems to incorrect values or pointing to a language pack that was uninstalled. Please, note that to fix this you need direct access to the database and your 'user' and 'course' table.

'Cannot connect: Verify that you have typed correctly the URL and that your site uses Moodle 2.4 or later'

  1. Mobile services are enabled for the site.
  2. The user is entering the correct URL for the site (see FAQ above)
  3. For https sites, the certificate is valid (see FAQ above)

'We lost connection you need to reconnect. Your token is now invalid.' on my custom version of the Moodle app

  1. You have followed all the steps listed in Moodle Mobile Developing a plugin tutorial
  2. You have enabled the moodle/webservice:createtoken for the authenticated user

'No permission to create web service token for the service local_mobile' when attempting to log in as an admin

You need to create a token for the admin account (only) as follows:

  1. Eiti į Site administration > Plugins > Web services > Manage tokens
  2. Click Add
  3. Enter the admin username and select 'Moodle app additional features service' (i.e. do NOT leave it as 'Moodle app web service')
  4. Click the 'Save changes' button.

'Invalid response value detected' when accessing the site

The user quota global setting should be an integer. For more details, see the discussion How to enable Moodle Mobile App for all accounts.

' Invalid response value detected: Invalid external api response: the value is "", the server was expecting "raw" type"

This usually happens when there is a field with value NULL in a table in the database that should not be there. This may happen if your Moodle has been upgraded over many years and the database schema is broken.

To fix it, you can do the following:

  • Detect the field that is causing the problem (it should be indicated before the error message)
  • Fix the field, for example, for the password field in the lesson table: UPDATE mdl_lesson SET password = WHERE password IS NULL (remember that your table prefix can be different than mdl_)

'Invalid response value detected' when accessing My Courses or Course Overview

This usually happens when a course uses a language that isn't installed in the site. Please make sure that all courses use valid languages. This can be easily checked in the database, table "course", there is a column named "lang".

'A required parameter (username) was missing'

This may happen if your site implements HTTP redirects the request is redirected by the browser not passing the POST parameters.

The solution is to change the HTTP redirect and use an HTML page with a meta tag or JavaScript redirect.

'Invalid json in request: No error'

There is a bug in Moodle 3.3 that can cause this error. Please update to Moodle 3.3.2.

'Cannot get course contents'

This usually happens when the course is using a course format plugin that was uninstalled from the server or that was not properly installed.

Please, reinstall again the course format plugin.

'Access control exception' or 'Your authentication token is invalid or has expired'

If this error appears as soon as you enter the username and password for a new site, then it probably means that the token expiration time is badly configured. This is how to fix it:

  1. Eiti į Site administration > Security > Site security settings.
  2. Find the setting named User created token duration.
  3. If the value is set to 0 or it's too low, please set it back to a valid value (the default value is 12 weeks).
  4. Click the 'Save changes' button.

Ipmismatch: 'Client IP address mismatch'

This error can appear when a user opens your site in a browser while using the app. This happens if your site is behind a proxy and you're using one of these Moodle versions o higher: 3.5.11, 3.6.9, 3.7.5, 3.8.2, 3.9.0.

  1. Eiti į Site administration > Administration > Server > HTTP.
  2. Find the setting named Ignore reverse proxies (reverseproxyignore).
  3. Enter the IP of your proxy (or range of IPs).
  4. Click the 'Save changes' button.

I think I found a bug with the app. Where can I report it?

  1. Log in to the Moodle Mobile tracker (you'll need to create a tracker account if you've not done so previously)
  2. Check whether the issue has already been reported by doing a search
  3. If not, report the bug by clicking the 'Create Issue' link at the top right of the page, selecting 'Moodle app' as the project
  4. Add a detailed description providing as much information as possible (Moodle version, app version, device model and operating system, etc. ), then click the Create button

How can I get the app in my language?

The Moodle app automatically detects your mobile's language and displays in the same language (if the translation exists). Otherwise, you can set the app language in App settings > General.

If the Moodle app is not yet available in your language, please contribute a translation! See Translating Moodle Mobile for details of what to do.