Scrierea scripturilor
În această secțiune, este luată în considerare în mod special cu scrierea scripturilor marcate.
Capturarea evenimentelor de la alte servere
Dacă apare o fereastră cu cadre pentru a captura evenimente în pagini de la alte servere, utilizați metoda enableExternalCapture într-un scenariu semnat care solicită privilegii UniversalBrowserWrite.
Utilizați această metodă înainte de a apela metoda captureEvents. De exemplu, utilizând codul următor, o fereastră poate capta toate evenimentele Clic din toate cadrele sale.
Izolarea unui strat nemarcat în interiorul unui recipient marcat
Pentru a crea un strat nemarcat în interiorul unui recipient etichetat, trebuie să efectuați câțiva pași suplimentari pentru a vă asigura că scripturile din cuvântul neimaginat funcționează corect.
Simboluri internaționale în scripturile marcate
Script-uri care conțin caractere internaționale (internaționale), nu poate fi etichetat, deoarece procesul de transformare a personajelor din setul de caractere locale invalidează semnătura. Pentru a rezolva această limitare:
Funcții de import și export
Este posibil să aveți nevoie de interfețe pentru a apela în containere clasificate (ferestre și straturi). Pentru aceasta, utilizați instrucțiunile de import și de export. Exportarea numelui funcției îl face disponibil pentru import prin scripturi care se află în afara containerului, fără a verifica containerul.
Puteți importa și exporta numai funcții - ca funcții de nivel superior (asociate cu obiectul ferestrei) și metode ale altor obiecte. Nu puteți importa sau exporta în întregime obiecte sau proprietăți care nu sunt funcții.
Importarea unei funcții în domeniul dvs. de aplicare creează o funcție nouă cu același nume ca și funcția importată. Apelarea unei astfel de funcții apelează funcția corespunzătoare din containerul clasificat.
În scriptul marcat care definește funcția pe care doriți să o accesați la alte scripturi, utilizați instrucțiunea de export. Sintaxa acestei instrucțiuni este:
unde fiecare expr trebuie să se rezolve singură în numele funcției. Operatorul de export marchează fiecare funcție importată.
În scriptul în care doriți să importați funcția, utilizați instrucțiunea de import. Sintaxa acestei instrucțiuni este:
Executarea importului expr.funName evaluează expr și importează funcția funName a obiectului în domeniul de aplicare curent. Este o eroare dacă expr nu este evaluată în obiectul, în cazul în care nu există nici o funcție numită funName sau în cazul în care funcția există, dar nu este marcat ca fiind importate. Executarea importului expr importă toate funcțiile importate din expr.
În acest exemplu, există trei pagini într-un set de cadre. Fișierul containerAccess.html definește acest set de cadre și apelează funcția definită de utilizator când este încărcat setul de cadre. O pagină, secureContainer.html. conține un script etichetat și exportă funcția. O altă pagină, acces.html. importă funcția exportată și o apelează.
Deoarece acest exemplu exportează o funcție care nu include sau nu necesită privilegii extinsă. puteți exporta o funcție care include privilegii. Dacă faceți acest lucru, trebuie să fiți foarte atenți să nu acordați accidental accesul la hacker.
Fișierul containerAccess.html conține următorul cod:
Fișierul secureContainer.html conține următorul cod:
Fișierul access.html conține următorul cod:
Dacă ați semnat script-uri la pagini găzduite pe site-ul dvs., aveți posibilitatea să copiați JAR-fișier cu site-ul dvs. și puneți-l pe un alt site. Deoarece scripturile marcate în sine nu s-au schimbat, vor continua să lucreze sub semnătura dvs.
Dacă doriți să împiedicați acest lucru, puteți face scripturile să funcționeze numai de pe site-ul dvs.
Apoi, dacă fișierul JAR și scriptul sunt copiate pe un alt site, acestea nu vor mai funcționa. Dacă persoana care a copiat scriptul o schimbă pentru a ocoli verificarea sursei de script, semnătura este dezactivată.
Fiți atent cu ceea ce exportați
Când exportați o funcție din scriptul marcat, transferați de fapt încrederea în orice script care vă apelează funcția. Aceasta înseamnă că sunteți responsabil pentru exportul de interfețe care pot fi utilizate într-un mod nedorit. De exemplu, următorul program exportă un apel eval. care pot funcționa în temeiul privilegiilor extinse.
Cod minim de bază de coduri de încredere
În jargonul de securitate, baza de cod de încredere (TCB) este un set de cod care are privilegii pentru a efectua acțiuni limitate. O modalitate de a spori securitatea este de a reduce dimensiunea TCB. care va oferi mai puține posibilități pentru atacuri sau erori.
De exemplu, următorul cod, dacă este executat într-un script marcat cu aprobarea utilizatorului, deschide o fereastră nouă care conține istoricul browserului:
TCB în acest exemplu este întregul scenariu, deoarece este emis la început și nu este anulat oriunde. Puteți reduce TCB. rescriind programul după cum urmează:
După aceasta TCB este doar o buclă care conține acces la proprietatea istoriei. Puteți exclude apelurile Java inutile. schimbarea privilegiului prin introducerea funcției:
Privilegiile se schimbă automat atunci când writeArray readuce controlul, deci nu trebuie să o faceți în mod explicit.
Utilizarea minimului necesar pentru a rezolva problema
O altă modalitate de reducere a posibilității de penetrare și de apariție a erorilor constă în folosirea doar a minimului necesar pentru realizarea acestui acces. De exemplu, codul anterior a solicitat UniversalBrowserAccess. care este macro-ul țintă care conține UniversalBrowserRead și UniversalBrowserWrite. Numai UniversalBrowserRead este necesar pentru a citi elemente din matricea de istoric. astfel încât să puteți rescrie codul de mai sus și îl puteți face mai sigur: