piątek, kwietnia 23, 2010

Otwarcie Google

Firma Google zbiera cięgi za brak przejrzystości. Dlatego uruchomiła stronę wyświetlającą wszystkie swoje serwisu wybrane przez danego użytkownika - http://rcardon.free.fr/websign/wakka.php?wiki=DownloadPage

Projekty e-Faktury

Na świecie jest wiele projektów otwartych z efakturą. Jednym z nich jest projekt eID powiązany z administracją Belgii. Założycielem i Architektem jest Frank Cornelis (zaczął pracę w projekcie openxades). Strona domowa - http://code.google.com/p/eid-mw/. Innym projektem jest:

  1. openxades
  2. projekt estoński (na bazie http://www.openxades.org/files/JDigiDoc-2.0-eng.pdf)
  3. projekt kataloński
  4. projekt polski- PEMI
  5. samodzielny projekt - http://rcardon.free.fr/websign/wakka.php?wiki=DownloadPage
  6. Linki  nie rozpoznane (jeszcze):
    1. http://www.openoces.org/
    2. http://www.rgagnon.com/javadetails/java0480.html
    3. http://java.sun.com/developer/technicalArticles/J2SE/security/
    4. http://java.sun.com/j2se/1.5.0/docs/guide/deployment/deploymentguide/keystores.html
    5. http://java.sun.com/j2se/1.5.0/docs/guide/security/p11guide.html
    6. http://www.openxades.org/pipermail/openxades/2006October/000075.html
    7. http://projectestic.uji.es/

Do tego dochodzi świetne źródło informacji na temat podpisu –portal OPENPDF - http://openpdf.com/ebook/xades-java-pdf-6.html

Projekty e-Faktury

Na świecie jest wiele projektów otwartych z efakturą. Jednym z nich jest projekt eID powiązany z administracją Belgii. Założycielem i Architektem jest Frank Cornelis (zaczął pracę w projekcie openxades). Strona domowa - http://code.google.com/p/eid-mw/. Innym projektem jest:

  1. openxades
  2. projekt estoński
  3. projekt kataloński
  4. projekt polski- PEMI

czwartek, kwietnia 22, 2010

Docs wg MS

Do tej pory portal Docs kojarzył się z Google-em teraz ma go tez Microsoft - http://docs.com/

Uruchamianie apletów u klienta

Na podstawie dokumentacji SUN-a – jest to fragment większej całości dokumentacji sunowskiej  pt. “Applets”. Uruchomienie aplety odbywa się albo poprzez wyspecyfikowanie charakterystyk apletu w znaczniku “APPLET” (lub w nowej edycji HTML 4 “OBJECT”), lub w znaczniku “JNLP” (zastosowanie technologii JNLP). Aplet ładuje się u klienta podczas uruchomienia strony HTML która go zawiera. Model ochrony klienta powoduje, że tylko podpisane aplety są uruchamianie poza piaskownicą przeglądarki. Aplety które mają mieć większe prawa dostępu do zasobów lokalnych muszą być podpisane przez certyfikat. Podczas uruchamiania aplet pyta o zgodę na dostęp do zasobów. Bez zgody użytkownika aplet nie ma dostępu do zasobów lokalnych komputera. Uwaga: dodatkowa konfiguracja maszyny wirtualnej java jest możliwa poprzez przystawkę Java Control Panel w pasku podczas uruchamiania strony z apletem.

W przypadku apletów nie podpisanych (“gołych”) zaleca się wykorzystanie protokołu JNLP do definiowania zakresu praw dostępu do zasobów lokalnych. JNLP ma specjalne ustawienia  do definiowania zakresu dostępu do lokalnych zasobów. Do korzystania z JNLP potrzebna jest konfiguracja serwera www (uczulenie na tworzenie nagłówków MIME o typie JNLP) lub podstawienie pod nazwę pliku JNLP plik z rozszerzeniem PHP. Oto przykład:

<?php

header("Content-Type: application/x-java-jnlp-file");

readfile('uruchomPodpis.jnlp');

?>

plik jnlp:

<applet name="CA",
        jnlp_href = 'uruchomPodpis.php',
        width = 300,
        height = 300 >
    <PARAM NAME=Server-Library VALUE=
https://dvcl4.coig.com:10066/podpisAplet/ext>
    <PARAM NAME=Properties-File VALUE=cryptoapplet.properties>
</applet
>

“Goły” aplet może niewiele. Może m.in. – połączyć się ze serwerem  z którego została załadowana strona. Aplet załadowany z lokalnych zasobów (a więc ktoś go tam zainstalował) nie ma żadnych ograniczeń.

Aplety nie podpisany załadowane poprzez JNLP mają większe prawa m. in. mogą czytać i pisać do lokalnych zasobów. Uwaga: wśród parametrów konfiguracyjnych nie ma mowy o uruchamianiu procesu zewnętrznego np. jakieś aplikacji desktopowej (takie sztuczki może dokonać wyłącznie aplet podpisany).

Wywołanie nawet podpisanych apletów z poziomu kodu JS na stronie HTML powoduję ograniczenie zakresu działania apletu tak jakby był niepodpisany.

Z przykładu zamieszczonego w rozdziale “Invoking Applets Methods from javascript code” widać, że jest bardzo łatwo sterować metodami zawartymi w aplecie z punktu widzenia JS. Sytuacja odwrotna tj. dostanie się do elementów strony HTML czy też skryptów na niej jest również możliwa dzięki technologii LiveConnect. Funkcjonalność ta zawarta jest w pakiecie ‘netscape.javascript’ lub można ją włączyć poprzez wyspecyfikowanie pakietu ‘…/jre/lib/plugin.jar’

Ciekawa definicja apletu na stronach pomocy Eclipse – “An applet is a bean that is designed to be run inside a Web browser and inherits from java.applet.Applet or javax.swing.JApplet .”

Przygotowanie stacji użytkownika do skłądania podpisu

    Instalacja oprogramowania niezbędnego do obsługi podpisu na stacji klienckiej

  1. Środowisko pracy - Windows Client (od XP przez Vista do W7).
  2. Instalacja sterowników do obsługi czytników kart inteligentnych (tzw. Smart Card - SC):
    • Najniższy poziom - programowanie CryptoCard Suite ze strony firmy Crypto Tech. Jest to prawdziwy kombajn funkcjonalny. Potrafi m.in. sprawdzić poprawność komponentów sprzętowych i programowych, zainstalować certyfikat w repozytorium, ustawić parametry wielopodpisu. Dodatkowo instaluje się jako usługa MS Windows dzięki czemu po włożeniu karty do czytnika automatycznie rejestruje ją w repozytorium.
    • Na tej bazie należy zainstalować oprogramowanie firmy dostarczajacych certyfikaty:
      • Sigillum - nic (dziwne) - korzysta ze sterownika sprzętowego CCPKIP11.dll wgrywanego po cichu przez CCS
      • KIR - nic (trzeba to jeszcze sprawdzić)
      • Unizeto/Certum - najpierw sterownik do czytnika np. ACR38, potem aplikację proCertum Card Manager. Wszystko jest dostępne na stronie CERTUM. Korzysta ze sterownika cryptoCertumPKCS11.dll
  3. Całość sprawdzamy przy pomocy CCS. Wynik powinien być taki:
  4. clip_image001
  5. Struktura obsługi kart kryptograficznych w MS Windows jest taka (idąc od dołu w górę):
    • SC Base - wbudowany komponent systemu operacyjnego (sterownik sprzętowy w postaci .DLL)
    • Warstwa standardów kart inteligentnych. Są dwa niezależne standardy:
      • PKCS#11 (promowany przez środowisko Java) - API do obsługi kart, bazuje bezpośrednio na sterowniku sprzetowym (taki jest standard zaimplementowany w języku Java)
      • CSP + Crypto API (promowany przez MS) - warstwa dostawców usług kryptograficznych oraz API do korzystania z nich z poziomu aplikacji
    • System operacyjny - MS Windows - ma jeszcze dodatkową warstwę służącą do przechowywania informacji o dostępnych certyfikatach w tzw. repozytorium. Do obsługi jego służy polecenie: certmgr.msc. Windows ma dodatkowe narzędzia wspierające weryfikację certyfikatów końcowych i pośrednich które są zintegrowane z narzędziami do zarządzania. W przypadku rozwiązań Java (np. w postaci implementowanej przez KIR) są one przechowywane jawnie bezpośrednio w pliku. Udostępnia funkcje kryptograficzne (crypto API) poprzez technologię CAPICOM (stara, już nie zalecana dla Vista i W7 ale wciąż poprawnie na nich działająca) oraz poprzez platformę .NET
    • Aplikacje - w każdym języku programowania są dostępne biblioteki z funkcjami do obsługi SC bądź poprzez platformę MS .NET bądź JSE. Dodatkowo można na poziomie poleceń systemu wykonywać skrypty korzystające z CAPICOM (instalując CAPICOM SDK z witryny MS - tworzy się katalog z przykładowymi skryptami) lub przy pomocy PowerShell (korzysta ze wszystkich dobrodziejstw .NET)

środa, kwietnia 21, 2010

Kurs PHP i nie tylko

Na stronach SITEPOINT jest świetny kurs programowania w PHP i korzystania z bazy MySQL - http://articles.sitepoint.com/article/publishing-mysql-data-web/2

Nauka JPA wg. Oracle - http://www.oracle.com/technology/products/enterprise-pack-for-eclipse/troubleticket/part_1_jpa/jpatutorial.htm?msgid=8667883&eid=4835439881&lid=1

Wybieranie danych z Google przy pomocy openssl - http://code.google.com/intl/pl/apis/gdata/articles/using_cURL.html

Deployment JAVA Applet - http://java.sun.com/docs/books/tutorial/deployment/applet/deployingApplet.html i http://www.javaworld.com/javaworld/jw-05-2008/jw-05-newapplet.html?page=4

Tworzenie PDF w ActionScript - http://www.alivepdf.org/

Forum CISCO - https://supportforums.cisco.com/community/etc/netpro-polska

Zły filtr XSS w IE8 - http://blogs.zdnet.com/security/?p=6221&tag=nl.e019

Co nowego  w VS 2010 - http://blogs.techrepublic.com.com/programming-and-development/?p=2475&tag=nl.e019

Biill Gates - http://blogs.zdnet.com/BTL/?p=33259&tag=nl.e019

Konfiguracja HD - http://www.pcworld.pl/news/358144_3/Jak.optymalnie.skonfigurowac.twardy.dysk.html

Napraw za darmo - http://www.pcworld.pl/news/358172/7/Napraw.swoje.Windows.z.programem.Microsoft.Fix.It.html

Integracja appletu z .NET - http://java.sun.com/developer/technicalArticles/appletAspIntegration/index.html

Web Start - http://java.sun.com/docs/books/tutorial/deployment/webstart/index.html

Rgagnon - http://www.rgagnon.com/howto.html

…………………………..

poniedziałek, kwietnia 19, 2010

Google API dla programistów

Google API dla programistów
Na tej stronie jest rozkład jakich API udostępnia Google:
  1. Biblioteki otwarte ajaksa - Ajax Library API - są ładowane przy pomocy google.load(). Ładnie to zrobione np. biblioteke jQuery podzielono na jądro jQUery - do manipulowania DOM i CSS oraz jQueryUI - do zapewnienia efektownego interfesju. Ciekawy link do tutoriali o JS.
  2. Biblioteka wizualizacyjna - http://code.google.com/intl/pl/apis/visualization/
  3. Spis wszystkich API  - http://code.google.com/intl/pl/more/
  4. Google Data Protocol - http://code.google.com/intl/pl/apis/gdata/
  5. Google Documents List - http://code.google.com/intl/pl/apis/documents/overview.html - praca z dokumentami (przykład upload-u dokumentu z .NET)
  6. Fusion tables - http://code.google.com/intl/pl/apis/fusiontables/
  7. Market dla aplikacji - http://www.google.com/enterprise/marketplace/
  8. Dostęp do arkuszy - http://code.google.com/intl/pl/apis/spreadsheets/
  9. Język programowania GO - http://golang.org/doc/go_tutorial.html
  10. Bomba! - http://www.offisync.com/ - pozwala miłośnikom MS Worda na używanie tego edytor i jednocześnie stosowanie Google Docs jako repozytorium dokumentów. Nacisk położono na wsparcie pracy grupowej. 
 

Ciekawostki

  1. ALA serwis jest składnicą ciekawych i nietrywialnych pomysłów z zakresu przeglądarek i Internetu. Są tam podrozdziały jak: scripting, server side, html, css itd.
  2. Taki pomysł – do testowania można używać FireBug (z wkładką FirePHP) lub w IE8 wbudowanego debuggera (lub nieco okrojoną wersję FireBuga).
  3. Biblioteka BASE2 autorstwa Dean’a Edwadrds jest najmniejszym (niskopoziomowym) wspólnym mianownikiem wyrównującym różnice implementacyjne w JS dla różnych przeglądarek.
  4. Informacja o pracach badawczych w MS – m.in.  nad nową przeglądarką Gazelle.
  5. Jak powstają ataki CSS - http://crypto.stanford.edu/cs155/papers/CSS.pdf (dużo informacji na ten temat znajduje się w OWACS). Generalnie cookie można łatwo wyłudzić…
  6. Więcej o bezpieczeństwie:
    1. Strona w Stanford - http://crypto.stanford.edu/cs155/
    2. Badania w Stanford w zakresie bezpieczeństwa - http://seclab.stanford.edu/websec/ z kursami!!!
    3. Podręcznik bezpłatny do kryptografii - http://www.cacr.math.uwaterloo.ca/hac/
    4. http://www.collinjackson.com/
  7. Blog pracownika Gartner’a - http://blogs.gartner.com/ray_valdes/2009/07/08/google-chrome-microsoft-gazelle-and-the-cloud-oriented-os/ – na temat ogłoszenia przez Google prac nad OS Chrome. Z punktu widzenia informatyka przeglądarka Chrome (17 mln linii kodu w C++) zawiera wiele zaawansowanych technik wykorzystywanych również w OS np. izolacja (sandbox), wielowątkowość (wielozadaniowość), komunikacja między procesami (IPC) – jest to około 700 tyś wierszy. Kompetencje wykorzystane w pisaniu tak zaawansowanej technologicznie przeglądarki można wykorzystać przy tworzeniu OS. Ale tu należy pamietać, że OS to również obsługa urządzeń I/O a tuż już trzeba mieć zaplecze w postaci sterowników do urządzeń napisanych przez firmy tworzące te urządzenia. Ale tę “dziurę” można zalatać polegając na wsparciu jądra z Linux’a. MS też wykorzystuje elementy wielozadaniowości w swych IE 8 i dlatego też rozpoczyna prace badawcze nad nową przeglądarką Gazelle, podobną do Chroma i OS Chrome. OS Chrome startuje od zera na bazie przeglądarki - http://news.cnet.com/8301-27080_3-10292435-245.html?tag=nl.e703
  8. Książki do Java - http://www.mindviewinc.com/Books/ –Ekcela – nie tylko Java ale również J2EE.
  9. Jak zostać programistą:
    1. http://samizdat.mines.edu/howto/HowToBeAProgrammer.html
    2. http://norvig.com/21-days.html
  10. Zasoby ARITMA:
    1. Forum - http://www.artima.com/forums/forum.jsp?forum=1
    2. Blog - http://www.artima.com/weblogs/viewpost.jsp?thread=261930
    3. AIR - http://www.artima.com/articles/air_15.html
  11. Bezpieczeństwo – nowa inicjatywa THAWTE mająca na celu upowszechnienie PKI w firmach - http://reddevnews.com/whitepapers/2009/03/thawte-dev-starter-kit/asset.aspx

JSON i bezpieczeństwo

Wyjściem z sytuacji jest wsparcie natywne w przegladarkach (ma je IE i FF) oraz wykorzystanie go w frameworkach (Yahoo, jQuery, dojo i mootools). Rozwój JSON wspiera ECMA na stronie http://wiki.ecmascript.org/doku.php.

Wejściem do zagadnień JSON-a jest rozbiegówka na wiki - http://en.wikipedia.org/wiki/JSON#Native_JSON

JSON jest niebezpieczny ponieważ używa albo ‘eval’ (var myObj = eval( '(' + jsontext + ')' );) albo skryptu Crockforda - http://www.json.org/json.js.  Jedno i drugie jest mało bezpieczne. Oto zwięzła definicja wg. yahoo:

JSON is a very simple text format based on JavaScript's object notation. The notation contains these basic elements:

  • Objects. Objects begin and end with curly braces ({}).
  • Object members. Members consist of strings and values, separated by colon (:). Members are separated by commas.
  • Arrays. Arrays begin and end with braces and contain values. Values are separated by commas.
  • Values. A value can be a string, a number, an object, an array, or the literals true, false, or null.
  • Strings. Strings are surrounded by double quotes and contain Unicode characters or common backslash escapes.

Obecnie JSONa wspiera wiele j. programownia w tym PHP i VFP.

Nowe podejście do drukowania

Wg. firmy Google, która chce wdrożyć nowy typ systemu operacyjnego OS Chrome, największą przeszkodą we wdrożeniu przetwarzania w chmurze (gdzie każde urządzanie ma dostęp do zasobów w Internecie) był system wydruków (a nawet cały ekosystem składający się z setek różnych sterowników do drukarek nawet pochodzących z tej samej firmy). Dodatkowo sterowniki te musiały być przygotowywane pod różne systemy operacyjne a nawet ich wersje. Propozycja Google jest taka  - stworzenie platformy Google Cloud Print – która przyjmowała by dane do wydruku i sama (zamiast lokalnego systemu operacyjnego), centralnie kierowała wydruk na wybraną drukarkę i pilnowała by procesu wydruku. Zamierzenia są śmiałe, ale jest parę wątpliwości:

  • bezpieczeństwo – kto pozwoli sobie na udostępnienie KAŻDEGO swojego wydruku firmie trzeciej (tj. Google)
  • zaczyna się zarysowywać mroczne widmo Wielkiego Brata – kontrolującego każdą informację wychodzącą na wydruk
  • co z prywatnością i bezpieczeństwem
  • co zapewnieniem poufności i jaka jest gwarancja niezmienności danych wysyłanych na wydruk
  • poważnie należy się zastanowić czy jest zapewniona globalna w obszarze Internetu skalowalność – wraz ze wzrostem ilości użytkowników i ilości wydruków
  • czy będzie kontrola  i zabezpieczenie przed atakami typu DDS (lub wypuszczenie w Internet ogromnego wydruku na 1000 stron – to marnotrawstwo pasma) na taki serwer drukarkowy
  • czy usługa będzie zawsze bezpłatna czy też po iluś kopiach trzeba będzie zapłacić extra

Wizja jest śmiała – HP zainteresowała się tym pomysłem – przecież nic nie ryzykuje a ponadto umożliwia sobie wzrost sprzedaży drukarek dla właścicieli choćby skromnych telefonów komórkowych.

Podobna wizja jest już od dawna zrealizowana w Windows np. mój komputer nie ma drukarki lokalnej ale mogę skierować wydruk z niego na drukarkę  sieciową lub na inny komputer który udostępnia swoją drukarkę.