joi, 8 ianuarie 2009

Profiling-ul aplicatiilor web in Java

"4% din cod ocupa 50% din timpul de rulare al unui program" - Donald Knuth

Deci se merita sa gasim cei 4% pentru ca optimizarea lor va avea efecte substantiale. Jamon este un tool care ne permite monitorizarea operatiilor dintr-o aplicatie web Java, si una din metodele de a se integra intr-o aplicatie web este sub forma unui filtru. Standardul J2EE specifica prezenta unor filtre intr-o aplicatie web, care permit interceptarea tuturor request-urilor si efectuarea unor actiuni la interceptare. Sunt necesare doar cateva linii de cod (in afara de plasarea jar-ului Jamon la locatia potrivita), si le puteti gasi la sfarsitul articolului. Frumusetea solutiei oferite de el este ca nu este nevoie sa schimbati codul aplicatiei deja scrise, are performante foarte bune (pot spune ca l-am vazut implementat in productie cu succes) si este de un real ajutor!

Ce stie sa monitorizeze? Timpul de rulare, exceptiile aruncate, si diverse statistici matematice legate de acestea, pentru:
  • request-uri HTTP
  • accesul la baza de date, printr-un driver JDBC de tip proxy, care are rolul de a intercepta apelurile catre baza de date, sa le dea mai departe catre driver-ul care trebuie sa le execute, si sa monitorizeze timpul de acces
  • apelurile catre metodele oricarei interfete Java: creaza un proxy dinamic la runtime, care monitorizeaza apelurile dvs. si le da mai departe; o metoda de a implementa acest lucru este folosind API-ul Dynamic Proxy, care are suport nativ in JVM-urile recente
Cum arata monitorizarea unui cod folosind Jamon? Foarte simplu!
Monitor mon = MonitorFactory.start(opName);
/* Code being timed */
mon.stop();

miercuri, 7 ianuarie 2009

Utility computing

Azi m-am dus sa platesc chiria la garsoniera, intretinerea, curentul, si factura pentru puterea de calcul inchiriata de la Amazon luna asta. Ceeeeeee?? Da, ati citit bine. Puterea de calcul se poate inchiria si ea cu ora, dupa nevoi. Amazon a lansat EC2, Elastic Compute Cloud, o infrastructura cu foarte multa putere de calcul din care puteti inchiria o bucatica (sau mai mult, dupa nevoi), contra unui tarif orar.

Daca vreti ca urmatoarea data cand un site serios publica un link catre site-ul dvs., server-ul web din sufragerie cu 512 MB RAM si un Apache antic si exploit-abil la maxim sa nu ia foc pentru ca a incercat sa serveasca 10 clienti simultan, aveti nevoie de conceptul de "elastic computing". Si Amazon, pentru ca nu-i sta gandul numai la vandut carti, va arata viitorul internetului si al interfetelor web. Care este mult mai mult decat HTML/CSS/Javascript..

Configurezi o masina virtuala, iti instalezi pe ea ce soft-uri vrei, o uploadezi la Amazon. Controlezi prin intermediul unui web-service pe cate "instante" sa ruleze, si ai controlul individual asupra instantelor (via un shell, unde ai acces root, sau prin web-service, din care pot fi chiar si resetate!). Instantele sunt de mai multe tipuri, cea mai ieftina fiind: Small Instance (Default) 1.7 GB of memory, 1 EC2 Compute Unit (1 virtual core with 1 EC2 Compute Unit), 160 GB of instance storage, 32-bit platform. Asta te costa $0.10/h pentru Linux si $0.125/h pentru Windows.

Vrei ca atunci cand ai oprit instanta datele tale sa ramana inregistrate pentru posteritate? Nimic mai simplu, exista Elastic Block Store care este un storage expus ca un block device catre instante, caruia i se poate face back-up si replicare automat. Practic, nu te intereseaza unde sunt stocate datele tale, dar sunt accesibile din toate instantele la modicul pret de $0.1 / GB / luna (da, nu ti le tin la nesfarsit decat daca platesti :D). Mai platesti si $0.1 pentru fiecare milion de request-uri I/O asupra "discului" respectiv.

Accesarea unei instante se traduce in trafic pe internet. Nimic mai simplu, esti taxat si pentru asta. $0.10/GB pentru trafic incoming si $0.17/GB pentru trafic outgoing. Ai nevoie si de adrese IP? Bani sa ai, ca Amazon ti le da si pe-alea... Iti mai cumperi si domeniu, introduci intrarea DNS care mapeaza host-ul catre IP-urile date de Amazon si ai un hosting de toata frumusetea.. platit cu ora! Si cu disponibilitate 99.95%.

Nu va speriati de numere. Daca faceti un calcul simplu, o sa vedeti ca iesiti mult mai ieftin daca cumparati aceste servicii de la ei, decat sa:
  • cumparati propriile server-e
  • aveti grija sa le ventilati (deja de la cateva calculatoare incolo trebuie o instalatie de aer conditionat mai serioasa)
  • platiti un om care sa le "monitorizeze" - sysadmin-ul (nu uitati ca la noi taxele reprezinta peste 50% din costurile salariale)
  • platiti omul suficient de bine a.i. sa fie dispus sa se trezeasca noaptea ca sa nu aveti downtime prea mare..
Sigur, puteti sa cumparati servicii de hosting obisnuite. Dar ele nu sunt facute pentru site-uri web care scaleaza. Si nu beneficiaza de suport tehnic 24/7 profesionist. E o solutie care s-a demonstrat ca functioneaza, nu trebuie sa faceti experimente. Nu e timp de asta.

..si e nemaipomenit pentru start-up-uri, pentru ca nu presupune o investitie initiala mare. Spor la facut website-uri scalabile si de succes!

sâmbătă, 3 ianuarie 2009

MD5 a cazut

La multi ani, 2009!

De revelion, cercetatorii in domeniul securitatii au demonstrat ca MD5, creat de faimosul Ronald Rivest, unul din co-autorii Cormen-ului, nu este sigur pentru a fi folosit in PKI (Public Key Infrastructure). Folosind un atac bazat pe o coliziune de hash MD5, au reusit sa creeze un CA fals care sa garanteze pentru un website rauvoitor. Combinat cu DNS cache poisoning, si cu o metoda recenta descoperita de Dan Kaminski de a face acest lucru, un rau-voitor va poate fura datele cartii de credit astfel:
  1. Isi creaza un CA fals, care va garanta autenticitatea unui website fals
  2. Isi alege "tinta", sa spunem www.bcr.ro
  3. Otraveste cache-ul unui server DNS la care apelati cu un IP fals pentru hostname-ul bcr.ro
  4. Gazduieste la acel IP un webserver care livreaza o pagina foarte asemanatoare cu victima, care expune un certificat public semnat de CA-ul fals
  5. Cand deschideti o conexiune sigura criptata HTTPS pentru a introduce datele card-ului dvs., raufacatorul le va prelua si va efectua tranzactii in locul dvs.
Gasiti mai multe detalii (tehnice) mai jos.

Ce e un certificat digital si la ce foloseste? Un certificat este un fisier care contine niste date de identificare publice, si o semnatura a unui Certification Authority (prescurtat de acum CA), care garanteaza veridicitatea datelor. Daca reusesti sa strecori datele dorite de tine si sa falsifici semnatura CA-ului, poti sa te dai drept cine vrei:) Un exemplu real-life ar fi cartea de identitate: contine numele tau si niste elemente de siguranta ale Politiei Romane ca sa garanteze ca e (aproape) imposibil sa fabrici tu unul.

Ce este o pereche (cheie privata, cheie publica)? Cele doua chei sunt 2 numere folosite in algoritmii de criptare asimetrici, astfel incat:
  • data fiind cheia publica, este foarte greu de reconstituit cheia privata (necesita un efort computational enorm - vezi de exemplu problema logaritmului discret)
  • un mesaj criptat cu cheia publica poate fi decriptat doar folosind cheia privata
O analogie putin fortata cu real-life ar fi ca unui infractor ii este greu sa fabrice uneltele necesare pentru realizarea elementelor de siguranta de pe o carte de identitate, chiar daca el detine o C.I.

Ce este un rezumat al unui mesaj? Ce este MD5?
Rezumatul unui mesaj este un numar, de lungime fixata, calculat folosind un algoritm determinist pe baza unui mesaj de lungime oricat de mare. In limbaj popular, este folosit termenul "hash". MD5 este o astfel de functie de hash.

Cum poate fi folosita o astfel de pereche pentru semnarea unui mesaj?
Daca cheile au fost generate cu un algoritm potrivit, atunci cheia privata poate fi folosita pentru a calcula un numar bazat pe un rezumat al mesajului, iar cheia publica pentru a valida faptul ca cel care a semnat mesajul detine intr-adevar cheia privata. Observam ca trebuie ca algoritmul de semnare trebuie sa aiba proprietatea ca este greu de "fabricat" o semnatura dat fiind un mesaj, sau greu de fabricat un mesaj plauzibil data fiind o semnatura.

Cum folosesc browser-ele un certificat? Pentru o conexiune sigura (HTTPS), browser-ul va examina certificatul pe care il publica un site pentru a stabili ca la IP-ul de la celalalt capat al conexiunii se afla "cine trebuie". Pentru ca user-ul este interesat sa transmita date "sensibile", el le va cripta folosind cheia publica expusa in certificat, si detinatorul cheii private (si numai el!) le va putea decripta. Singura problema ramasa este asocierea cheii publice cu website-ul (hostname-ul). Aici intervine certificatul publicat de site, el fiind semnat de un CA.

Si cine imi garanteaza ca acest CA e de incredere? Exista 2 tipuri de ca: root CA si celelalte. Root CA sunt mari si cunoscute, iar certificatele lor sunt incluse in browser-e. Pentru a determina ca un CA e de incredere, un browser urmeaza algoritmul:
  • daca certificatul CA-ului curent se afla in lista mea de root CA, inseamna ca e de incredere
  • daca certificatul CA-ului curent este semnat de un alt CA, atunci ce mai am de verificat este CA-ul care a semnat, si reiau algoritmul pentru el
Bun, si pana la urma, care e problema? Pai totul se bazeaza pe sistemul CA-urilor. Tu te bazezi pe ele ca sa verifici ca un site este cine pretinde ca este. Daca cineva gaseste o metoda sa creeze un CA malitios, acesta poate garanta pentru un website care nu are certificatul corect. Algoritmul de semnare al certificatului unui CA folosea pana nu demult MD5, care este vulnerabil la atacuri de tipul "coliziune": poate fi fabricat un mesaj asemanator cu cel initial astfel incat hash-urile MD5 sa coincida. Asadar, poate fi fabricat un certificat asemanator cu cel initial, cu acelasi hash MD5, si atunci cele doua vor avea aceeasi semnatura digitala, doar ca in cel falsificat am introdus ce informatii am dorit noi. Deci fara a sti cheia privata, am semnat un mesaj in care am pus continutul dorit de noi.

marți, 30 decembrie 2008

Time-tracking

Nici un proiect web 2.0 nu va avea succes daca nu va fi gata la timp, si nu va fi executat intr-un mod organizat. Cititi articolul lui Razvan de pe site ca sa va puneti in tema cu solutia pe care o foloseste el. Si credeti-ma, la el functioneaza :)

Te simti aparat de un "captcha"?

Captcha este imaginea enervanta de pe site-uri, scrisa stramb de nu o puteti descifra si voi, menita sa impiedice calculatoarele sa-si creeze automat conturi pe site-urile respective. Pentru ca daca au reusit acest lucru, veti fi mai devreme sau mai tarziu tinta unui spamming intens, sau al unui DOS / DDOS attack.

Vazand pe site-ul unor colegi binevoitori asa ceva: http://interfeteweb.schibucuresti.ro/news.php, mi-am adus aminte ca am citit pe Slashdot ca nu ar fi chiar complicat sa recunosti multe clase de captcha, ba mai mult s-au gasit niste rusi care sa recunoasca pe cel de la Gmail cu eficienta de 20%. Astfel, ei au reusit sa economiseasca foarte multi bani, deoarece plateau niste negrisori sa citeasca Captcha cu 1 cent / bucata.

Ca sa va ingroziti si mai tare, iata 2 dintre site-urile pe subiect care mi-au placut:
Pe scurt, se pare ca captcha-ul colegilor mei ar fi chiar foarte simplu de recunoscut automat. Cu prima ocazie, o sa incerc si eu de curiozitate. Desi captcha este o idee extraordinara, din pacate de multe ori ea este doborata de o executie slaba / amatoriceasca:

"Like any security system, design flaws in a system implementation can prevent the theoretical security from being realized. Many CAPTCHA implementations, especially those which have not been designed and reviewed by experts in the fields of security, are prone to common attacks."

luni, 29 decembrie 2008

Heatmap - cat de "fierbinte" e site-ul tau?

Mi-am adus astazi aminte de o idee geniala pe care am vazut-o cu cateva luni in urma: heatmaps. Pe scurt, se inregistreaza folosind JavaScript unde se da fiecare click pe pagina si astfel se pot evidentia grafic zonele unde se face click mai des (sau unde sta mouse-ul mai des). Fiindca atunci cand user-ul face click, se si uita unde (hopefully..), zonele cele mai "fierbinti" sunt candidatii ideali pentru:
  • a plasa continutul pe care vreti sa-l promovati
  • a identifica elementele grafice care au cel mai mare succes
Una din solutiile online apreciate este: www.crazyegg.com. Dispun atat de servicii platite cat si de un serviciu free, care permite monitorizarea a 4 pagini si a unui maxim de 6000 de afisari / luna. Suficient pentru noi. In interfata Google Analytics puteti vedea ceva in aceeasi idee, "Site Overlay", ca un entry in meniul "Content".

Instalarea CrazyEgg este foarte simpla, dupa inregistrarea la ei pe site si setup-ul de acolo, se include un script in template-ul siteului, tot la sfarsit, in zona unde ati pus si Google Analytics.

Pana data viitoare, cand va voi arata primele rezultate ale heatmap-ului, va doresc "La multi vizitatori"!

Cum sa-ti afli pozitia pe google?

Am investit 30 de minute azi dimineata pentru a gasi un program / site care sa-mi calculeze automat pozitia pe google. Peste jumatate nu functionau, iar din cele care functionau, nu dadeau rezultate bune. Sfatul meu este sa luati calea cea mai sigura:

http://www.google.ro/search?hl=ro&q=interfete+web&btnG=Căutare+Google&meta=&num=100

Adaugand sectiunea bold la sfarsit, il fortati pe nenea Google sa afiseze rezultatele cate 100 pe pagina. Good old FireFox va poate asista apoi cu keyword search (Ctrl-F). In caz ca nu apareti pe prima pagina (cum e si cazul nostru:) ) , insistati pe paginile urmatoare.