piątek, czerwca 01, 2007

Gear czyli przekładnia (nadzieja SaaS):
Nowa inicjatywa Google polegająca na zaoferowaniu aplikacji klienckiej do przeglądania online Internetu i zapamiętywania informacji lokalnie spotkała się z dużym echem. Za ZDNet ( What Google Gears means for SaaS developers by ZDNet's Phil Wainewright -- Gears is almost a defensive announcement, an admission that the browser needs to move up a gear (pun intended) if it's going to stay relevant to the needs of Web application users.):
Wymagania aplikacji web2 są tak duże (powoli funkcjonalnością przypominają aplikacje klienckie), że możliwości obecnych przeglądarek już niewystarczające. Rozszerzenie funkcjonalności przeglądarek internetowych raczej nie wchodzi w rachubę (zmiany w JS przebiegają b.powoli ponieważ muszą być zgodne ze standardem). Dlatego buduje się rozszerzenia - programy klienckie do pobrania ze strony twórcy aplikacji (zabezpieczone - podpisane cyfrowo z certyfikatem). Ale tu nie tylko chodzi o offline expirience (praca w trybie lokalnym, bez połączenia z Internetem), a raczej o pełne RCA: multimedia, grafika, dostęp do zasobów lokalnych (pliki i urządzenia), szybką reakcję, dostęp do pakietów biurowych. Jednym słowem - greater client-side functionality.
Już mamy na rynku takie technologie: Yahoo Widget, Silverlight czy Apollo, na razie są one niszowe. Wszystkie one niebezpieczne ponieważ "wpuszczają" programy z Internetu do lokalnego komputera.
Chodzi o zbudowanie czegoś pośredniego między aplikacjami uruchamianymi w środowisku przeglądarki a "pełnokrwistą" aplikacją desktop-ową.
Google ma szanse na powodzenie z uwagi na swój autorytet jako pioniera wprowadzającego nowe i udane rozwiązania. Google może pociągnie i nada rozpędowi tą inicjatywę.


Lista tematów:
  1. search.live.com - czasami dobrze jest poszukać zgodnie z nastawieniem MS (jak oni patrzą na problem)
  2. myEclipse -środowisko do Java już za 30 $ rocznie
  3. CodeGear Borland - daje środowisko do tworzenia aplikacji w PHP (ok.250 Eu)
  4. Ciekawy link do historycznej dyskusji Jobs/Gates
  5. Strona do prototype - http://prototypejs.org/
    1. Tutorial - http://prototypejs.org/learn
  6. Przegląd darmowych frameworków do tworzenia tabel (grid) w JS (po stronie klienta) - smashingmagazine.
  7. Enterprise Grid - nitobi
  8. Mootools - przykłady - http://www.chrisesler.com/mootools/index.html
  9. Studium użyteczności - http://www.usability.gov/
  10. Serwer a la furl - http://swik.net/json/del.icio.us%2Ftag%2Fjson/JSON+in+Java/82uu
  11. KompozEr - nowy, poprawiony NVU.
  12. Why Google is more dangerous than Microsoft by ZDNet's Donna Bogatin -- Why Google is More dangerous than Microsoft
  13. Video prezentacje techniczne - http://www.bestechvideos.com/2007/05/31/microsoft-mix07-partying-with-php-and-the-microsoft-platform/
  14. Lekcje Ajaxa - http://www.ajaxlessons.com/2006/03/07/ajax-workshop-4-live-data-with-json-prototypejs/
  15. Blogi - http://blogs.zdnet.com/

czwartek, maja 31, 2007

Nowości AJAX-owe:
  1. Super tutorial o nauce AJAX-a - Max Kiesler.
  2. Biblioteka obsługi SSH w .NET - http://www.tamirgal.com/home/dev.aspx?Item=sharpSsh
  3. Powyższa biblioteka bazuje na innej bibliotece firmy Mentalis. Tutaj są projekty: http://www.mentalis.org/soft/projects.qpx
  4. Ciekawe książki na http://www.infoq.com/minibooks/ruby/
  5. Instruktaż stosowania - http://msdn.microsoft.com/vstudio/express/beginner/

poniedziałek, maja 28, 2007

JSON tu i tam:

  1. Serwer - PHP
    1. $i = array(
      array("id" => 1, "name" => "sumardi"),
      array("id" => 2, "name" => "hassan"),
      array("id" => 3, "name" => "ruby")
      );
    2. echo json_encode($i);
    3. Zwróci - [{"id":1,"name":"sumardi"},{"id":2,"name":"hassan"},{"id":3,"name":"ruby"}]
  2. Klient - JS
    1. for(var i = 0; i < json.length; i++)
      {
      console.info(json.id + " " + json.name);
      }

Ataki na logowanie:

  1. Można logować się do systemu poprzez podanie konta/hasła w czystej postaci, ale to ma swoje wady - podatność na in-the-middle attack tzn. można się podszyć pod dane konto stosując "lewy" serwer DNS (aby temu zapobiec często używa się OpenDNS), wszystko widać w czasie transmisji i w bazie (w kolumnach gdzie się przechowujekont/hasło)
  2. Można hashować hasło po stronie klienta (biblioteka jsSHA2.js na stronie http://anmar.eu.org/,

<form onsubmit="pwField.value = b64_sha256(pwField.value);">

Co to daje? Brak wiedzy o haśle, a nawet jego długości. Wady - musi być włączony JS w przeglądrce, atak słownikowy, atak replay atack (wystarczy podstawić hash zamiast hasła) dlatego podczas transmisji stosuje się tunel SSL.

  1. Można do tego dodać dane specyficzne dla użytkownika np.: <form onsubmit="pwField.value = b64_hmac_sha256(userId.value, pwField.value);">
  2. Wykorzystanie schematu pytanie-odpowiedź (challenge-response) zwanej też CHAP (http://pajhome.org.uk/crypt/md5/auth.html implementacja MD5 i SHA1) - hasło po stronie klienta jest hashowane dodatkowo przy pomocy informacji przysłanej przez serwer

Formaty informacji zakodowanej:

  1. Uwaga - do podpisywania i sprawdzania potrzebne są biblioteki kryptograficzne. Można wyróżnić trzy rodzaje:
    1. CAPICOM - lokalny ActiveX, który można po specjalnych zabiegach uruchamiać w przeglądarce IE, zaleta jest automatyczna dostępność (element CAPICOM jest zawsze obecny w MS Windows XP)
    2. Sigillum - ale nie wiem jak ją dostarczyć do klienta (wpakować do portalu jako "element do pobrania" i zainstalowania)
    3. AspCrypt - automatycznie instaluje się w trakcie wejscia na stronę, działa tylko w IE i w środowisku serwera MS IIS, wydatek ok. 250 USD
  2. PKCS#7 - Informacja jest zakodowana wraz z certyfikatem i kluczem publicznym w tzw. kopercie ("envelope"), można ją odczytać pod warunkiem posiadania klucza prywatnego zawartego w kopercie certyfikatu. Możliwe jest składanie też wielu podpisów. Do odcyfrowania takiej koperty wystarczy jeden klucz prywatny. Public-Key Cryptography Standards (PKCS) are RSA Data Security, Inc.'s series of de-facto standard formats for public-key cryptography. Among all the PKCS standards, PKCS#7 is probably the most widely used one. It describes a general syntax for data that may have cryptography applied to it, such as digital signatures and digital envelopes.
  3. The S/MIME secure mail standard uses PKCS#7 for its digitally signed and encrypted messages. Certificate requests and certificate store (.spc) files also normally use the PKCS#7 format. Every PKCS#7 blob usually encapsulates some content (such as an encrypted message or signed hash value) and one or more certificates used to encrypt or sign this content.

  4. CMS - ...

  5. XML-SIG - ...

  1. Szyfrowanie w .NET (można ją również odczytać ze strony):
  • Odpowiada za to przestrzeń System.Security.Cryptography.
  • Szyfrowanie/Odkodowanie danych jednostronne (służy autentykacji):
  • Obliczanie funkcji HASH. Wiele sytuacji wymaga przechowywania hasła bez jego znajomości. W ym celu korzysta się z tej funkcji do zapamiętania "skrótu" hasła w polu w bazie zamiast samego hasła. Minusem tego rozwiązania jest, że nie wiadomo jakie jest hasło (jeżeli ulegnie zapomnieniu, to trzeba wygenerować je na nowo). Zapewnia ona: a) mapowanie długich nazw na ich krótkie skrótu, b) skróty dla różnych łańcuchów wejściowych są praktycznie zawsze różne, c) nie można odtworzyć łańcucha wejściowego na podstawie znajomości skrótu. Są dwie implementacje tej metody: SHA1 i MD5.
  • Hash z jądrem (salted hash) - wadą poprzedniego rozwiązania jest to, że dwa łańcuchy we. produkują te same skróty. Można temu zapobiec "dosalając" dane wejsciowe innymi, specyficznymi dla użytkownika danymi np. e-mail, data uruodzenia. Jednak praktycznie stosuje się do tego generator liczb pseudolosowych, aby zapobie atakowi słownikowemu.
  • Szyfrowanie/Odkodowanie danych dwustronne. Rozróżniamy dwa sposoby: symetryczne i asymetryczne.
  • Szyfrowanie symetryczne (używając klucza prywatnego), szybkie zaszyfrowanie danych we. kluczem którego zna tylko odbiorca i nadawca (i tu leży główna słabość, klucz musi być tajny). Stosowane algorytmy: DES, RC2, Rijndael, and TripleDES.
  • Szyfrowanie asymetryczne (używając klucza publicznego, a właściwie pary: klucz publiczny/klucz prywatny), wada - bardzo obciążające procesor. Nadaje się tylko dla małych porcji informacji.
  • Rozróżniamy dwa komplementarne scenariusze:
  • Susan wysyła dane do Boba szyfrując dane jego kluczem publicznym, Bob i tylko on (ponieważ ma drugi element pary - klucz prywatny) może dane rozszyfrować. Metoda ta zapewnia szyfrowanie informacji.
  • Susan wysyła dane do Boba szyfrując je swoim kluczem prywatnym, Bob korzystając z ogólnie dostępnego klucz publicznego Susan może odczytać informację (ale nie tylko on). Ta metoda zapewnia niezaprzeczalność otrzymanej informacji.

Zasoby na poniedziałek:

  1. http://www.onlamp.com/pub/a/onlamp/2007/04/05/the-lighttpd-web-server.html - serwer lighttp, specjalna odmiana serwera wzorowana na Apache, ale bardzo lekka. Ogrzebano moduł fastCGI. Apache czasami jest bardzo wolny i ma różne implementacje wieloprocesowości tzw MPM (multi-processing-model): a) prefork - zawczasu generuje pulę procesów i nią zarządza (powoduje to duży narzut na RAM - 30 MB) lub b) worker - stosuje wielowątkowość (można zyskać na szybkości działania, ale serwer i jego wszystkie komponenty i moduły muszą być tzw. threadsafe. Apache 2.0 i mod_php są, ale inne moduły już nie). Autorem jest Niemiec, Jan Kneschke (2003).
  2. http://ajaxwidgets.com/AllControlsSamples/ - Gaia projektAJAX
  3. www.dzone.com - ciekawy, szczególnie snippety: http://snippets.dzone.com/
  4. Jak naprawdę rozpocząć przygodę z Eclipse i Tomcat-em - http://www.devarticles.com/c/a/Java/Getting-Started-with-Java-Web-Development-in-Eclipse-and-Tomcat/3/