Pookyho Deník

Nemá smysl se rozčilovat, stejně bude brzo pátek.

Javascript ist heute die meistens benutzte Programmiersprache des Welt. Er hat lange Weg von kleine und verachten Sprache zu dem größte und alle-benutzen Sprache gekommen. Heute kann man nicht ohne diese Sprache funktioniere. Es gibt viele Tutorials und große Menge von Javascript Bibliothek aber nicht viele geht um Sache wie man gute Code geschrieben sollte.

Ich habe lange Zeit versuchten gute Tutorial finden, wie soll man Javascript-Module schreiben. Es dauert mich Lange Zeit und ich muss wirklich viele „nicht-so-gut“ Muster sehen zu die Beste finden. So jetzt ich möchte mit ihr mein Entdeckung teilen.

Javascript ist immer jung und es gibt keine „universale“ Standarte für Javascript-Coding-Style. Es gibt viele verschiedene Möglichkeiten, wie gute Code schreiben aber ich will hier zeigen, welche ich dachte, die beste ist.

  1. Alles ist über Scope

Wenn man Javascript-Code schreiben möchte, muss man verstehen, was Scope ist. Im kurz – Scope ist kleine namespace für jede Funktion. Für dise Grund wir sind erlauben im jede Funktion verschiedene variablen mit gleiche Name ohne Kollision zu machen. Es hat Vorteile und auch Nachteile – ich versuche das einfach durch Beispiele erklären.

Local scope & Global scope

var x = 5; // global scope – immer verfügbar

var fn = function(){

var y = 9, x = 15; console.log(x, y); // 15, 9 }

console.log(x); // 5 console.log(y); // error – nur local scope

Hier, im diese einfache Funktion Deklaration, haben wir zwei Variablen mit Name `x`. Jede Variable ist aber in andere Scope. Das ist wichtig. Ohne das kann wir leicht überschreiben Variable `x` im Global Scope aus Funktion oder umgekehrt. Auch, wenn wir wollen `x` irgendwo benutzen, sollen wir wissen, welchem `x` wir wollen und mit welcher `x` wir arbeiten.

Eine Speziale Variable verbinden mit Scope heißt `this`. Im jede Scope ist auch wichtig zu verstehen, was this bedeutet, deshalb this bezieht im welche scope wir sind! Wir kann this übersetzen wie „da“ oder „diese“ (Funktion).

var fn = function(){

var x = 5; var self = this; // wir speichern scope im Variable

console.log(x); // 5 – local scope fn()

var fn2 = function(){

var x = 9; // local scope fn2() var y = this.x + self.x; // wir nehmen fn x und fn2 x zusammen console.log(y); // 14 } }

  1. Modules

Modules im Javascript sind einbisschen gleich wie Klassen. Modul soll ein kleine selbständige Teile sein, welcher wir kann benutzen ohne zu andere Teile versehren. Jede Modul soll privat und public Methode und Variable haben und deshalb wir brauchen zu jeder Module selbst Scope hat. Es ist nicht einfach diese Struktur verstehen, wenn jemand nicht gut Javascript kennst.

Unsere module ist speicher im Variable „Additions“. Diese Modul ist mit Closure gebaut. Closure ist anonymous Funktion welcher wird gleich ausführen sein.

Hier ist Beispiele:

/** Das ist Closure **/ function(){ // local scope }(); /** Closure mit züruck geben Object **/ var Additions = (function(){ return {}; }());

Jetzt wir haben Grundlage für unsere Modul. Wir haben Module-Scope und wir kann züruck
geben Object. So jetzt wir machen Variable und Funktion im unsere Module.

/** Module mit private Variablen und Funktion ** var Additions = (function(){ var a = 1; var b = 2; var c = null; var fn = function(){ } return {}; }()) console.log(Additions.a) // errpr

So jetzt brauchen wir aber auch public Methode und Variable. Wie macht das? Ziemlich einfach, wir müssen nur referenz dürch unsere Object züruckgeben.

/** Module mit public Variablen **/ var Additions = (function(){ var a = 1; var b = 2; var c = null; var fn = function(){ } return { a: a, b: b, c: c, fn: fn }; }()) console.log(Additions.a); // 1

Und alles zusammen:

var Additions = (function($){

var self = {}; // einfach Object für public Eingang

self.a = null; // public verfügbar Variable self.b = null; // public verfügbar Variable

var c = null; // private Variable

/** * Init Methode * @param options {} **/ self.init = function(options){

// Im diese init Funktion sollte des Variablen Initialisier // und auch verbinden Methode zu DOM-Objekte

$(„.counter-up“).click(self.increaseCounter).trigger(„click“);

};

self.increaseCounter = function(){

return true; };

var privateMethod = function(){ return true; }

// geben unsere public Object züruck return self;

})(jQuery); Additions.init(); // Jetzt wir Initialize unsere Modul

Javascript Modules sind nicht perfekt. Es gibt viele unterschiede Möglichkeit, wie kann man ihn schreiben und alle Möglichkeiten haben Vortaile und Nachteile. Mit diese Grosse von Javascript Bibliothen und Ökosystem brauchen wir mehr Abstraction und deshalb jede Module sollte selbst Scope benutzen. Es ist ohne Zweifel.

Wenn man Lust hat, mehr über Scope und Modules hier finden kann:



Knihovna OpenSSL je svobodná implementace rodiny protokolů, pro šifrování a v drtivé většině využívána na webových serverech Apache a Ngnix pro zajišťování šifrovaného přenosu (TLS/SSL).

Celá bezpečnost dnešního internetu je postavena na PKI, certifikátech a asymetrickém šifrování. Využívá se téměř všude, kde potřebujete ověřovat vaši identitu a nebo potřebujete ověřit vaše data. V současné době asymetrické šifrování není možné prolomit (pokud použijete dostatečný velký klíč) a je považováno za bezpečné.

Samotné šifrování ovšem nestačí, jako hlavní nebezpečí celého systému šifrování je útok nazvaný „Man in middle“. Tedy útočník, který stojí mezi vámi a tím pro koho tyto data šifrujete. Díky tomu, že internet je decentralizovaný (peer to peer), může útočník snadno odchytávat vaše data a opět je přeposílat aniž byste cokoliv poznali. PKI infrastruktura byla vymyšlena k tomu, aby se tomuto útoku dalo zabránit a bylo možné ověřit, s kým skutečně komunikujeme. Proto tu máme certifikáty a HTTPS.

Heartbleed, krvácíme a velmi.

heartbleed.com

Jak už jsem se zmínil, Heartbleed bug byl objeven 8. dubna a v současné době je již opraven. Všichni správci serverů jsou vyzváni aby aktualizovali svoji verzi openSSL na 1.0.1g a nebo na některou ze starších verzí.

V úterý se na internetu strhla strhla skutečná lavina reakcí na tento bug – viz. Twitter

twitter.com/search?q=%23Heartbleed

A tato publicita je skutečně oprávněná. Samotný bug byl totiž v kodu již od 11. prosince 2011 – tedy více jak 2 roky! než byl odhalen. Tento bug nebyl nijak triviální, díky špatné práci s pamětí umožňoval útočníkovi přečíst blok 64kb paměti a to opakově. Díky čemuž mohl útočník kompletně vyluxovat pamět severu se všemi citlivými daty – privátními klíčy, hesly, čímkoliv s čím server zrovna pracoval. Pro kompletní analýzu doporučuji tento článek:

blog.existentialize.com/diagnosis-of-the-openssl-heartbleed-bug.html

a nebo rychlejší vysvětlení na XKCD: xkcd.com/1354/

Pro bezpečnost je tohle noční můra. Přes 2 roky, bylo ohromné množství serverů vystaveno útoku, který jim dovolil zjistit citlivá data a nezanechat jedinou stopu. Mnoho bezpečnostních analytiků volá po zneplatnění všech certifikátů, které mohli být odcizeny a vydání nových – toto by se týkalo přes 2/3 internetu ale patrně k tomu opravdu dojde.

Apple – „goto fail“ bug

A tohle není jenom jedna záležitost. V letošním roce se událi ještě další zájímavé věci.

22. února byla v implementaci Apple iOS SSL nalezena chyba – takzvaný bug „goto fail“.

Samotný bug spočíval v duplikaci řádku „goto fail“, který se měl vyskytovat pouze v podmínce. Školácká chyba, které se smál celý internet ale tato chyba ve zdrojovém kódu umožňovala přeskočit jakoukoliv bezpečnostní kontrolu a kdokoliv se mohl vydávat za koho chtěl.

gotofail.com/

GnuTLS bug

Opět to samé, v implementaci TLS byla nalezena chyba, která tu byla již od roku 2005 a umožňovala útočníkovi aby byl jeho certifikát ověřen i když nebyl pravý. Jednalo se opět o chybu programátora, která souhrou okolností nevyhodila chybu ale nechala program dál pokračovat.

Tento bug byl opraven v březnu 2012.

blog.existentialize.com/the-story-of-the-gnutls-bug.html

Co to vlastně znamená?

Nejsem paranoidní člověk ale chci se podělit o jeden logický závěr. Pokud si někdo z vás vzpomene na aféru Snowden, určitě bude vědět kam mířím. Tato aféra se roku 2012 vyznačovala tím, že Edward Snowden vynesl tajná data o agentuře NSA.

Z těchto dat vyplynulo, že s touto agenturou spolupracují největší softwarové firmy jako Apple, Google, Microsoft či Yahoo a poskytují jim svá data. Stejně tak se samotná NSA snaží odposlouchávat hovory Evropských státníků jako je Angela Merkelová či francouzský prezident Holland.

www.theguardian.com/world/2013/oct/26/nsa-surveillance-brazil-germany-un-resolution

Kromě toho NSA hledala cesty, jak prolamovat stávající šifry a číst šifrovaný obsah. Jedním z jejich cílů byl také ovlivňovat jednotlivé skupiny které připravují standardy či je implementují aby jejich implementace obsahovali díry, které by mohli využít pro rozšifrování zprávy.

falkvinge.net/2013/11/17/nsa-asked-linus-torvalds-to-install-backdoors-into-gnulinux/
arstechnica.com/security/2014/01/how-the-nsa-may-have-put-a-backdoor-in-rsas-cryptography-a-technical-primer/

Celá aféra NSA by byla na dlouho ale v dané době to byli skutečně neuvěřitelné informace. Mnoho bezpečnostních analytiků a i států se začlo na svoji bezpečnost skutečně zaměřovat a vzniklo mnoho iniciativ, které začli provádět audit klíčových knihoven jako je PGP nebo právě openSSL.

Po dvou letech mediální humbuk utichl, veřejnost už to nezajímá ale já si dovolím tvrdit, že odhalení těchto bugů je výsledkem právě aféry Snowden a snahy ostatních firem zkotrolovat jejich implementace a zabránit těmto únikům – stejně tak můžeme spekulovat, jestli tyto bugy nejsou přímou zásluhou NSA.


Komentáře 1

Ahoj Čtenáři!

Tohle je můj první článek na blogu. Rozhodl jsme se začít, protože bych si rád vylepšil svoje komunikační dovednosti, podělil se o svoje znalosti a taktéž zážitky.

Doufám, že se vám budou líbit.

Martin