sobota, kwietnia 21, 2007

Linki z soboty:
  1. http://dbachrach.com/blog/2007/04/15/spotlight-like-search-as-you-type-with-css-ajax-js/ - ciekawe podejście i wykorzystywanie js. Zawiera również odnośnik do przykładów editInPlace.
  2. Przykłady:
  3. function hideSearchTypes (i,j) {
  4. var theDiv = document.getElementById(j).getElementsByTagName(‘li’);
  5. for(var d = 1; d < theDiv.length; d++) {
  6. var theID = ‘res-’+i+‘-’+d;
  7. document.getElementById(theID).style.display = ‘none’;
  8. }
  9. }
Inny przykład:
  1. <form id="search_form" action="" method="get">
  2. <input type="text" value="" name="q" id="q" autocomplete="off" onkeyup="doSearch();" />
  3. <input type="image" id="search_image" onclick="doSearch();return false;" src="search_icon.png" alt="Search" />
  4. </form>
  5. <div id="searchResultsDiv">
  6. Start typing. Your results will show below instantly.
  7. </div>
Biblioteka google - http://code.google.com/p/jslibs/wiki/JavascriptTips - przeznaczone do obsługi biblioteki seamonkey (silnika JS w Mozilli)

  1. Binary with XmlHTTPRequest

    var req = new XMLHttpRequest();
    req.open('GET', "http://code.google.com/images/code_sm.png",false);
    req.overrideMimeType('text/plain; charset=x-user-defined');
    //req.overrideMimeType('application/octet-stream');
    req.send(null);
    var val = req.responseText;
    Print( escape(val.substr(0,10)) );

poniedziałek, kwietnia 02, 2007

Linki poniedziałek 2 kwietnia
http://worrydream.com/MagicInk/
http://www.mozilla.org/js/spidermonkey/tutorial.html - emulator JS napisany w C
http://developer.mozilla.org/en/docs/Introduction_to_the_JavaScript_shell - powłokado uruchamiania skryptów w JS
http://www.spket.com/features.html - nowe IDE dla JS w środowisku Eclipse
http://code.google.com/p/clipperz/ - biblioteka funkcji kryptograficznch w JS
http://www.clipperz.com/learn_more/crypto_foundations - więcej informacji na ten temat
http://erik.eae.net/archives/2005/09/15/00.18.07/
http://erik.eae.net/archives/2005/09/14/13.42.07
http://blogs.msdn.com/ie/archive/2005/09/13/465338.aspx

sobota, marca 31, 2007

Pomysły Ajaxowe: na bazie http://www.miniajax.com/
http://prototype-window.xilinus.com/download.html
http://orangoo.com/labs/GreyBox/
http://www.pjhyett.com/posts/190-the-lightbox-effect-without-lightbox
http://www.amcharts.com/pie/
http://www.robertnyman.com/ask/content.php
http://www.solutoire.com/plotr
http://livepipe.net/projects/control_modal/

piątek, marca 30, 2007

Komunikat
W związku z planowanym wprowadzeniem szerszego wykorzystania bezpiecznego podpisu cyfrowego w aplikacjach internetowych Portalu AS wynikają następujące problemy techniczne:
  1. Wsparcie dla platform systemów operacyjnych MS Windows (koniec życia niektórych wersji klienckich)
  2. Wsparcie dla różnych przeglądarek internetowych (standaryzacja wersji)
  3. Bezpieczny dostęp do lokalnych zasobów komputerów klienckich
Proponujemy następują rozwiązania powyższych problemów:
  1. W związku z zakończeniem w zeszłym roku wsparcia technicznego firmy MS dla MS Windows 98 oraz zaleceniami wystawcy certyfikatów firmą Sigillum sugerujemy szybkie przejście na nowsze wersje klienckich systemów operacyjnych tj. zalecamy MS Windows XP SP2 (koniecznie z aktualizacją SP2) lub MS Vista
  2. Dostęp do Internetu możliwy jest poprzez różnego rodzaju oprogramowanie użytkowe. Szczególnie rozpowszechnione jest, z uwagi na dostępność, programowanie narzędziowe zwane przeglądarkami Internetowymi. Nie są one wszystkie w pełni zgodne ze standardami W3C i WASP. Dlatego zalecamy użycie wbudowanej (i zintegrowanej z systemem) w system operacyjny MS Windows, a więc dostępną od zaraz, przeglądarki MS Internet Explorer w wersji 7. Stosowanie jej powoduje zwiększoną ochronę i automatyczną comiesięczną aktualizację pod kątem różnych zabezpieczeń przed atakami z sieci. Dodatkowo pozwala na pełną i lepszą obsługę oprogramowania dostarczonego i rozwijanego przez firmę Sigillum (można wykorzystać całą jej funkcjonalność). Zwiększy to też ergonomię i szybkość pracy tj. w odniesieniu do funkcjonalności Portalu AS pozwoli na składanie bezpiecznego podpisu cyfrowego w przeglądarce bez konieczności instalowanie i uruchamiania oprogramowania dodatkowego (obecnie do podpisania zamówienia konieczny jest program kliencki Klient Portalu AS popularnie zwany 'liskiem'). Oczywiście można stosować do obsługi Portalu AS inne przeglądarki internetowe w tym przypadku zalecamy oprogramowanie Firefox ("ognisty lisek") w wersji 2 lub wyżej. Może jednak nastąpić pewna utrata funkcjonalności i komfortu pracy np. do podpisania dokumentu trzeba będzie zainstalować dodatkowe oprogramowanie, które należy ściągnąć na naszej witryny.
  3. Przez dostęp do lokalnych zasobów należy rozumieć przede wszystkim obsługę podpisu cyfrowego na karcie inteligentnej i czytnika kart. Wszystkie przeglądarki mają wbudowany "szlaban" na dostęp do zasobów lokalnych użytkownika. Gdyby tego nie było, złośliwe oprogramowanie z Internetu mogłoby spowodować niewyobrażalne szkody w zasobach na komputerze użytkownika Internetu np. od przechwycenie kont i haseł dostępu do banku, poprzez kradzież dokumentów aż po zniszczenie zawartości dysków twardych (i wszystkich danych). Dlatego próba dostępu do czytnika kart oraz zawartości na kartach inteligentnych (certyfikat i klucz prywatny) z poziomu przeglądarki jest utrudniona. Dlatego należy stosować "zaufane" przeglądarki oraz "zaufane" oprogramowanie systemowo-narzędziowe, w przypadku platformy Microsoft jest to przeglądarka MS Internet Explorer, oprogramowanie obsługi kryptografii firmy Microsoft MS CAPICOM wersja 2 lub wyżej, platforma MS .NET oraz homologowane biblioteki do składania podpisu cyfrowego firmy Sigillum. Istnieje dodatkowa możliwość obsługi podpisu cyfrowego poprzez napisanie programu klienckiego uruchamianego lokalnie i wysyłającego dane (podpisane dokumenty) do serwera internetowego. Tak właśnie działa Klient Portalu AS. Po jego zainstalowaniu na komputerze lokalnym macie Państwo możliwość składania podpisu pod dokumentami zamówień. Udostępniamy teraz nową wersję tego oprogramowania. Nowa wersja pozwala bezpiecznie przeglądać i podpisywać nie tylko te dokumenty związane z zamówieniami ale również inne np. korekty do zamówień. Dodatkową cechą nowej wersji jest jej specjalizacja - można tylko przeglądać i podpisywać dokumenty, dlatego nikomu nie będzie się "myliło" w jakim środowisku pracuje (przeglądarce internetowej gdzie wszystko "działa" z wyjątkiem podpisu czy w "lisku" gdzie "kuleje" awizacja i upoważnienia). Teraz uruchomienie nowej wersji Klienta Portalu AS pozwala tylko podpisywać. Ta nowa wersja jest dedykowana szczególnie dla użytkowników, którzy chcą stosować inne wersje przeglądarek internetowych oprócz MS IE 7.

poniedziałek, marca 19, 2007

Znowu WS security w wykonaniu Oracle
http://www.oracle.com/technology/oramag/oracle/05-jan/o15web.html
  • WS posługuje się protokołem HTTP, dlatego wszystkie metody zabezpieczenia tego całego protokołu (czyli na poziomie warstwy transportowej) nadal obowiązują (autentykacja bazowa, SSL). Niestety rozwiązania te mimo, że są skuteczne (efektywne) ale niewygodne z uwagi na potrzebę zabezpieczenia samej koperty SOAP (a więc na znacznie niższym poziomie szczegółowości). Wynika to z dwóch przesłanek
    1. dane zawarte w kopercie przechodzą wiele kroków pośrednich, wynikających z potrzeb integracji rozwiązań i niepożądanym jest aby były zapisane w "czystym" tekście.
    2. koperty SOAP skaczą po całym Internecie, nie można zagwarantować gdzie się znajdą (przesłanka mniejszej wagi)
  • Z tego wynika potrzeba zabezpieczenia kopert SOAP niezależnie od protokołu (zamiast HTTP może być wybrany inny protokół np. SMTP) oraz potrzeba zawarcie w kopercie obok danych również dodatkowych informacji o zabezpieczeniach i adresacie przesyłki
  • OASIS wydało w 2004 rekomendację w tym zakresie pt. "WS-Security", wprowadzając mechanizmy zabezpieczeń na trzech poziomach:
    1. authentication tokens - żetony autentykacji pozwlające na wysłanie w nagłówku komunikatu SOAP pary użytkownik/hasło lub certyfikatu X.509,
    2. XML encryption - pozwala na szyfrowanie danych całego lub części komunikatu (w przypadku O Appication Server 10g rel. 10.1.3 są to 3DES, AES-128 i AES-256.
    3. XML Digital Signature - podpis cyfrowy (hash) treści przy pomocy DSA-SHA1, RSA-SHA1/MD5 lub HMAC-SHA1

wtorek, marca 13, 2007

AJAX=JAVA
Tworzenie aplikacji w Javie na serwerze niezmiennie polega na posiłkowaniu się frameworkiem. mamy do wyboru JSP (wzmocnione przez STRUTS lub SPRING), lub bardziej skomplikowany TAPESTRY lub WICKET. W prostych apliakcjach można posłużyć się prostymi środkami np:


Można np. wybrać DWR (Direct Web Remoting) jako implementację AJAX-a. Jest to klasyczne podejście polegające na odwróceniu kota ogonem tj. wywoływaniu na serwerze klas do generowania JS po stronie klienta (podobne podejścia prezentuje SAJAX czy XAJAX) tak samo jak Google GWT. Unika się konieczności programowania w dwóch językach (JS po stronie klienta i Java po stronie serwera)


niedziela, marca 11, 2007

Bezpieczenstwo WS wersja IBM
  1. https://www6.software.ibm.com/developerworks/education/dw-rt-secureservices/section6.html -Build Secure WS - świetny wstęp zawiera odwołanie do dokumentacji (handbook ), a w niej jest szczegółowy opis. IBM wychodzi trochę przed orkiestrę implmentując obok standardowego podejścia -document SOAP, drugie rozwiazanie rpc SOAP. Dodatkowo w komunikatach stosuje mapowanie danych z XML na odpowiedniki w Javie.
  2. Kolejny zasób to mapa drogowa bezpieczeństwa WS - też IBM
  3. Wymogi bezpieczeństwa WS:
    1. WS wymaga autentykacji (dowiedz, że jesteś tym za kogo się powołujesz) - do tego celu używa się:
      1. bazowej autentykacji lub
      1. opartej na żetonach (Kerberos lub PKI) - UsernameToken 1.0, X.509 Certificate Token 1.0
      1. Autentykacja bazowa wymaga stosowania SSL z uwagi na jawność przesyłanie konta i hasła. Robi się to przy pomocy konsoli administratora, proces podobny do MS WSE.
    1. Poufność - uzyskuje się poprzez szyfrowanie dokumentu XML lub jego części i dodanie węzła <wsse:Security>. Szyfruje się kluczem symetrycznym, który przesyła się do odbiorcy zaszyfrowany jego kluczem publicznym. Odbiorcy odszyfrowuje swoim kluczem prywatnym otrzymany zaszyfrowany klucz symetryczny i już może odszyfrować nim treść <body>.
    2. Integralność - można zaszyfrować treść (body) komunikatu lub klucz symetryczny służący do szyfrowania, bądź znacznik czasu (timestamp).
  4. Maszynką do uruchamiania i tworzenia aplikacji jest WebSphere Application Server V6.0 i nowy 6.1. Mechanizmy implementacji WS w obu maszynach wirtualnych są różne (standard się rozwijał + inne wersje JVM). Konfiguracja WS-Security odbywa się przy pomocy Rational Application Developer (RAD). Wszystko działa ale widać, że jest to sklecone z wielu klocków wyciągnietych z technologii open source (HTTP Apache, AXIS).
  5. Tu wypada porównać IBM z MS:
  • Microsoft ma narzędzia SPÓJNE, ZINTEGROWANE w miarę SZYBKIE i co najważniejsze PROSTE (przeznaczone dla zwykłych śmiertelników, chociaż brnąc głebiej w ich technologie też zaczynają się "schody"
  • IBM ma narzędzia ROZMAITE (pochodzące z różnych źródeł), CUDZE (zakupione jak Rational lub "podebrane" jak Apache, AXIS czy JAVA), WOLNE i BARDZO SKOMPLIKOWANE (chociaż trzeba im przyznać, że naśladując MS dużo robią aby można tworzyć oprogramowanie przy pomocy WIZARDÓW)

piątek, marca 09, 2007

Dywagacje na temat certyfikatu
  1. Czy można korzystać z certyfikatu kwalifikowanego (podpisu) nie instalując do w repozytorium (np. gdy ma się go na karcie)
  2. W naszej firmie i innych, które nam ufają warto postawić serwer PKI. Można wtedy wystawiać certyfikaty własne (trzeba im wtedy zaufać). Zbyszek mi przygotuje środowisko
  3. To samo w odniesieniu do Kerberosa
  4. Sprawdzanie ważności certyfikatu to jest niełatwa sprawa, trudno tu bez przygotowania zrobić coś poprawnie. Można jednak pokusić się o jakieś rozwiązanie:
    1. Użytkownik dostaje dane podpisane certyfikatem jakiegoś innego użytkownika. Jak możne zweryfikować jego ważność?
    2. Weryfikacja może być:
      1. online - poprzez sprawdzenie listy CRL:
        1. ze strony poprzez usługę OCSP - niektóre firmy wystawiające certyfikat jej nie świadczą
        2. poprzez kontakt ze stroną zawierającą CRL - zapamiętaniu jej lokalnie
      2. offline - poprzez weryfikację na liście CRL w cache repozytorium. Do repozytorium ściągnąć aktualną listę można poprzez automatyczą aktualizację po kliknięciu na stronę zawierającą listę crl.
    3. Może na podstawie certyfikatu lub danych podpisanych "wyciągnąć" unikalny numer seryjny użytkownika tego certyfikatu
    4. Co jeszcze można "wypruć" z certyfikatu/podpisanego dokumentu. Ten ostatni jest lepszy, nie musimy "zdobywać" certyfikatu?
  5. Ciąg dalszy nastąpi...
  6. Można usługę wystawiania certyfikatów i podpisu zaoferować KHW
  7. Linki (praca):
    1. Szukaj informacji na forum dyskusyjnym - microsoft.public.security.crypto
    2. http://groups.google.com/group/microsoft.public.security.crypto/index/browse_frm/month/2004-12?_done=%2Fgroup%2Fmicrosoft.public.security.crypto%2Fbrowse_frm%2Fmonth%2F2004-12%3F&
    3. http://www.derkeiler.com/Newsgroups/microsoft.public.platformsdk.security/2004-12/0043.html -capicom / cryptoapi certificate chain verification error 0x80092004

Date: Fri, 03 Dec 2004 18:16:28 +0100

Hello,
I was trying to use capicom from VB6 code to verify the validity of a
certificate, but Kelvin Yiu from MS posted a message
(news://msnews.microsoft.com:119/eV9j2id0EHA.1392@tk2msftngp13.phx.gbl)
in which he says "There is no way to use CAPICOM to access the CRLs used
to validate the chain. You must call the Win32 API".

Then, David Cross suggested to use capimon to trace the error. Such
trace (see previous post "meaning of
CAPICOM_TRUST_REVOCATION_STATUS_UNKNOWN or the attached capimon output)
shows the error 0x80092004.

I didn't write any code to access the api directly yet, I just want to
understand what is this error: the description "Cannot find object or
property." does not mean anything to me.
David suggested it could be a problem with CRL, but the certificate I'm
trying to validate incudes a reachable CRL Distribution Point (via http;
it also has other 2 DP, SMB and HTTP wich are not reachable, but the
third is).

Actually, If I access the distribution point with a browser I can
download the CRL, so that I believe this is not the problem.
Can anybody help me understanding?

thanks,
al.


    1. Sprawdzenie OCSP (skrypt):#!/bin/sh
      ##
      ## Copyright (c) 1998-2005 Unizeto Technologies S.A. All rights reserved.
      ##
      ## Online Certificate Status Protocol
      ##

      # Config default for openssl 0.9.7

      VAFILE="/usr/share/ssl/ocsp.pem" # http://www.certum.pl/keys/vs.pem
      ISSUER="/usr/share/ssl/CA.pem" # http://www.certum.pl/CA.pem

      URL="http://ocsp.certum.pl"

      if [ "$1" = "" ]; then
      echo -e "Usage: $0 serialn"
      echo -e "tserial:tSerial number to checkn"
      exit 0
      fi

      openssl ocsp
      -issuer "$ISSUER"
      -serial "$1"
      -url "$URL"
      -resp_text
      -respout /dev/null
      -VAfile "$VAFILE"
      exit 0

    2. http://support.microsoft.com/kb/304298 -How To Perform CRL Checking with CAPICOM
    3. http://files.redfoxuk.com/Shared%20Files/CAPICOM%20Interface%20Definition.HTML#class115 - CAPICOM interfejs, opis wszystkich stałych
    4. http://www.derkeiler.com/Newsgroups/microsoft.public.platformsdk.security/2003-10/0431.html - How to force CAPICO for CRL checking + lista dyskusyjna
    5. JENSIGN -świetny
    6. http://www.tutorials-se.com/platformsdksecurity/verify-certificate/ - How to verify certificate with CAPICOM + Impersonate + lista dyskusyjna + list programu (http://www.tutorials-se.com/platformsdksecurity/CAPICOM-documentation/)!
    7. Kod z powyższego źródła:
      Impersonating access to AzMan Policy Store 

      I have a console app that runs under the identity UserA. UserB has
      access to AzMan and ADAM.

      Whenever I try to impersonate UserB for the call to the
      AuthorizationStore, I get the exception: ArgumentException: "Value does
      not fall within the expected range"

      However, if I right click on the app and "Run As" UserB, everything
      works fine.

      I am verifying in code (using WindowsIdentity.GetCurrent()) that the
      impersonation is acutally succeeding. Has anyone had this issue?

      Here is my code:



      [DllImport("advapi32.dll")]
      public static extern int LogonUserA(String lpszUserName, String
      lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider,
      ref IntPtr phToken);
      [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError
      = true)]
      public static extern int DuplicateToken(IntPtr hToken, int
      impersonationLevel, ref IntPtr hNewToken);
      [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError
      = true)]
      public static extern bool RevertToSelf();
      [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
      public static extern bool CloseHandle(IntPtr handle);

      private void button1_Click(object sender, EventArgs e)
      {
      try
      {
      WindowsImpersonationContext ctx =
      ImpersonateValidUser("UserB", "domain", "password");
      AzAuthorizationStoreClass authorizationStore = new
      AzAuthorizationStoreClass();
      Console.WriteLine(WindowsIdentity.GetCurrent().Name);
      authorizationStore.Initialize(0,
      "msldap://techarch2:389/CN=Company, DC=compan,DC=com", null);
      ctx.Undo();

      }
      catch(Exception ex)
      {
      Console.WriteLine(ex.Message);
      }
      }

      private static WindowsImpersonationContext
      ImpersonateValidUser(String userName, String domain, String password)
      {
      WindowsImpersonationContext impersonationContext;
      WindowsIdentity tempWindowsIdentity;
      IntPtr token = IntPtr.Zero;
      IntPtr tokenDuplicate = IntPtr.Zero;

      if (RevertToSelf())
      {
      if (LogonUserA(userName, domain, password, 2, 0, ref
      token) != 0)
      {
      if (DuplicateToken(token, 2, ref tokenDuplicate) !=
      0)
      {
      tempWindowsIdentity = new
      WindowsIdentity(tokenDuplicate);
      impersonationContext =
      tempWindowsIdentity.Impersonate();
      if (impersonationContext != null)
      {
      CloseHandle(token);
      CloseHandle(tokenDuplicate);
      return impersonationContext;
      }
      }
      }
      }
      if (token != IntPtr.Zero)
      CloseHandle(token);
      if (tokenDuplicate != IntPtr.Zero)
      CloseHandle(tokenDuplicate);
      return null;
      }

    8. A oto wyciąg z MS: 
      Chain.Status

      The Status property retrieves the validity status of the chain or a specific certificate in the chain.

      Property Status( _
      ByVal Index As Long _
      ) As Long

      Parameters

      Index
      Index of certificate, or chain, to check validation. The default value is zero. The following table shows the possible values.
      Value Meaning
      0 Returns the status of the entire chain.
      1 Returns the status of the end certificate.
      i Returns the status of the Certificates.Item[i] certificate.
      Certificates.Count Returns the status of the root certificate.

      Property Value

      A LONG value that represents the validity status indicator of the chain or the specified certificate. The following table shows the possible values. This property will contain zero if the chain or specified certificate is valid. Otherwise, this property will contain a combination of one or more of the following values.

      CAPICOM_TRUST_IS_NOT_TIME_VALID
      &H00000001
      This certificate or one of the certificates in the certificate chain is not time valid.
      CAPICOM_TRUST_IS_NOT_TIME_NESTED
      &H00000002
      Certificates in the chain are not properly time nested.
      CAPICOM_TRUST_IS_REVOKED
      &H00000004
      Trust for this certificate or one of the certificates in the certificate chain has been revoked.
      CAPICOM_TRUST_IS_NOT_SIGNATURE_VALID
      &H00000008
      The certificate or one of the certificates in the certificate chain does not have a valid signature.
      CAPICOM_TRUST_IS_NOT_VALID_FOR_USAGE
      &H00000010
      The certificate or certificate chain is not valid for its proposed usage.
      CAPICOM_TRUST_IS_UNTRUSTED_ROOT
      &H00000020
      The certificate or certificate chain is based on an untrusted root.
      CAPICOM_TRUST_REVOCATION_STATUS_UNKNOWN
      &H00000040
      The revocation status of the certificate or one of the certificates in the certificate chain is unknown.
      CAPICOM_TRUST_IS_CYCLIC
      &H00000080
      One of the certificates in the chain was issued by a certification authority that the original certificate had certified.
      CAPICOM_TRUST_INVALID_EXTENSION
      &H00000100
      One of the certificates has an extension that is not valid.
      CAPICOM_TRUST_INVALID_POLICY_CONSTRAINTS
      &H00000200
      The certificate or one of the certificates in the certificate chain has a policy constraints extension, and one of the issued certificates has a disallowed policy mapping extension or does not have a required issuance policies extension.
      CAPICOM_TRUST_INVALID_BASIC_CONSTRAINTS
      &H00000400
      The certificate or one of the certificates in the certificate chain has a basic constraints extension, and either the certificate cannot be used to issue other certificates, or the chain path length has been exceeded.
      CAPICOM_TRUST_INVALID_NAME_CONSTRAINTS
      &H00000800
      The certificate or one of the certificates in the certificate chain has a name constraints extension that is not valid.
      CAPICOM_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT
      &H00001000
      The certificate or one of the certificates in the certificate chain has a name constraints extension that contains unsupported fields. The minimum and maximum fields are not supported. Thus minimum must always be zero and maximum must always be absent. Only UPN is supported for an Other Name. The following alternative name choices are not supported:

      • X400 Address
      • EDI Party Name
      • Registered Id
      CAPICOM_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT
      &H00002000
      The certificate or one of the certificates in the certificate chain has a name constraints extension, and a name constraint is missing for one of the name choices in the end certificate.
      CAPICOM_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT
      &H00004000
      The certificate or one of the certificates in the certificate chain has a name constraints extension, and there is not a permitted name constraint for one of the name choices in the end certificate.
      CAPICOM_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT
      &H00008000
      The certificate or one of the certificates in the certificate chain has a name constraints extension, and one of the name choices in the end certificate is explicitly excluded.
      CAPICOM_TRUST_IS_OFFLINE_REVOCATION
      &H01000000
      The revocation status of the certificate or one of the certificates in the certificate chain is either offline or stale.
      CAPICOM_TRUST_NO_ISSUANCE_CHAIN_POLICY
      &H02000000
      The end certificate does not have any resultant issuance policies, and one of the issuing CA certificates has a policy constraints extension requiring it.
      CAPICOM_TRUST_IS_PARTIAL_CHAIN
      &H00010000
      The certificate chain is not compete.
      CAPICOM_TRUST_CTL_IS_NOT_TIME_VALID
      &H00020000
      A CTL used to create this chain was not time valid.
      CAPICOM_TRUST_CTL_IS_NOT_SIGNATURE_VALID
      &H00040000
      A CTL used to create this chain did not have a valid signature.
      CAPICOM_TRUST_CTL_IS_NOT_VALID_FOR_USAGE
      &H00080000
      A CTL used to create this chain is not valid for this usage.
    9.  Sprawdź czy coś nie tak (poniżej)
    10. Checking Certificate Revocation Status

      CAPICOM does not enable certificate revocation checking by default. However, certificate revocation checking can be enabled programmatically for a particular certificate through the IsValid.CheckFlag property of a Certificate object. After the appropriate value of CheckFlag has been set, accessing the Certificate object's IsValid.Result property or building the certificate's verification path using a Chain object's Build method forces revocation checking.

      _language="Visual Basic">

      In the following example, cert has been instantiated as a valid CAPICOM certificate.

      Dim cert As Certificate
      Dim LocalStore As New Store

      ' Open the My store.
      LocalStore.Open LocalStore.Open CAPICOM_CURRENT_USER_STORE, _
      CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_READ_WRITE

      ' Get the first certificate in the My store.
      set cert = LocalStore.Certificates.Item(1)

      cert.IsValid.CheckFlag = CAPICOM_CHECK_TRUSTED_ROOT Or _
      CAPICOM_CHECK_TIME_VALIDITY Or _
      CAPICOM_CHECK_SIGNATURE_VALIDITY Or _
      CAPICOM_CHECK_ONLINE_REVOCATION_STATUS
      If cert.IsValid.Result Then
      'CERTIFICATE IS VALID!
      Else
      Dim chain As New Chain
      chain.Build (cert)
      If CAPICOM_TRUST_IS_REVOKED And chain.Status Then
      'AT LEAST ONE CERTIFICATE IN THE CHAIN HAS BEEN REVOKED
      End If
      If CAPICOM_TRUST_REVOCATION_STATUS_UNKNOWN And chain.Status Then
      'THE REVOCATION STATUS COULD NOT BE DETERMINED
      End If
      End If

      The preceding applies to an individual certificate, no matter how it was obtained. Performing revocation checking on the certificates in a SignedData object is no different because the SignedData object's Verify method cannot be used for this purpose because enabling CAPICOM_VERIFY_SIGNATURE_AND_CERTIFICATE does not cause CRL checking.

      _language="Visual Basic">

      Instead, the CheckFlag must be set for each signer's certificate. Consider the following example where sData has been instantiated as a valid CAPICOM SignedData object.

      Dim cert As Certificate
      Dim chain As New Chain

      ' sData is an existing SignedData object.

      For I = 1 To sData.Certificates.Count
      set cert = sData.Certificates(I)
      cert.IsValid.CheckFlag = _
      CAPICOM_CHECK_TRUSTED_ROOT Or _
      CAPICOM_CHECK_TIME_VALIDITY Or _
      CAPICOM_CHECK_SIGNATURE_VALIDITY Or _
      CAPICOM_CHECK_ONLINE_REVOCATION_STATUS
      If cert.IsValid.Result Then
      'THE CERTIFICATE IS VALID!
      Else
      chain.Build cert
      If CAPICOM_TRUST_IS_REVOKED And chain.Status Then
      'AT LEAST ONE CERTIFICATE IN THE CHAIN HAS BEEN REVOKED
      End If
      If CAPICOM_TRUST_REVOCATION_STATUS_UNKNOWN And chain.Status Then
      'THE REVOCATION STATUS COULD NOT BE DETERMINED
      End If
      End If
      Next I
KISS - to nie na dzień kobiet

David Chappell - znany ewangelista technologii MS pisze:
  • Dlaczego firmy chcą za stworzenie aplikacji w J2EE ok. 30% więcej niż w .NET? - http://www.davidchappell.com/blog/2006_12_01_weblog.htmlWiększe trudności w pracy w środowisku J2EE, które z założenia było stworzone dla zawodowców, podczas gdy .NET przeznaczony jest dla amatorów (byłych programistów VB 6.0). Specyfikacja standardów J2EE jest niespójna, tworzona przez otwartą społeczność, w przpadku MS tworzy ją jedna firma.
  • J2EE 5 jest platformą zunifikowaną, ale piekielnie SKOMPLIKOWNĄ. Do uproszczenia tego podchodzą dwa obozy SUN (poprzez JCP - otwarcie procesu tworzenia nowych funkcji poprzez dyskusję i głosowanie ze środowiskiem deweloperów najczęściej z otwartej społeczności) i IBM (Oracle, BEA i inni poprzez zamknięcie w SCA , tak zamknięcie tego procesu i stworzenie spójnej ramy technologicznej bez wkładu OBCYCH zdolnej do uruchomienia rozwiązań zainteresowanych firm).
  • Wiele wysiłku twórcy J2EE (od niedawna przemianowanej na po prostu JEE) wkładają w uproszczenie wykorzystania mnogości technologii wchodzących w skład tego standardu. Z drugiej strony firmy komercyjne (IBM, Oracle, BEA), nierzadko rywalizujące ze sobą, zaangażowane w wykorzystanie w swych rozwiązaniach JEE same dochodzą do wspólnego zdania i publikują SCA (Service Component Architecture ). Promują SCA jako alternatywę do Java EE. (http://www.davidchappell.com/blog/2006_08_01_weblog.html). A wszystko po to żeby zwiększyć stopień wykorzystania raz stworzonych gotowców, tych pochodzących z SCA lub przy jego pomocy stworzonych.
  • Tak naprawdę motywy stworzenia SCA są proste: stworzyć przeciwwagę firmie SUN polegającej na rozwijaniu Java przy pomocy metod demokratycznych JCP (Java Community Process) oraz wyjść na przeciw inicjatywie MS - stworzyć analog patformy WCF (Windows Communication Foundation)
  • Stosowanie WCF znacząco usprawnia i upraszcza proces stworzenia oprogramowania w środowisku .NET (które sądząc po ilości klas - namespaces zawiera wiele skorelowanych ze sobą technologii). Tego brakowało Javie.
  • SOA i WS zmniejszyły wagi i znaczenia platformy uruchamiającej serwerową część aplikacji, to co ma znaczenie to precyzyjnie zdefiniowany interfejs. Implementacje jego przy pomocy XML i HTTP stanowi wspólny mianownik każdego takiego rozwiązania. Nie potrzeba do tego jak twierdzą zwolennicy JEE skomplikowanych technologii, ani zunifikowanej platformy uruchomieniowej, to co "chodzi" na serwerze jest nieważne, liczy się jedynie interface między usługami (http://rss.techtarget.com/80.xml + "Analysts see Java EE dying in an SOA world").
  • WCF to UNIFIKACJA - Introducing WCF (MS) + Introducing the .NET 3.o framework.
  • Porównanie WCF z SOA - polegają na WS-* w zakresie bezpieczeństwa. To ważne. Przeglad bezpiecznych WS - tu.


środa, marca 07, 2007

Podpis cyfrowy ciąg dalszy
====================
  1. http://www.pki-page.org/ - rozbiegówka na temat OCSP i Sigillum
  2. http://www.inza.com/pki.html - info
  3. http://www.certum.pl/certum/cert,oferta_kwalifikowane_OCSP.xml - sposoby sprawdzenia statusu certyfikatu kwalifikowanego
  4. http://www.openssl.org/docs/apps/ocsp.html - openssl to prawdziwy kombajn, też może sprawdzić OCSP
  5. http://www.openvalidation.org/en/info/requests.html - Artykuł - stosowanie OCSP w aplikacjach końcowych
  6. http://www.microsoft.com/technet/security/guidance/cryptographyetc/tshtcrl.mspx - sprawdzenie statusu certyfikatu
  7. http://msdn2.microsoft.com/en-us/library/system.net.security.remotecertificatevalidationcallback.aspx - sprawdzenie certyfikatu SSL
  8. https://www.certum.pl/certum/cert,certyfikaty_oprogramowanie.xml - darmowy certyfikat testowy
  9. https://www.certum.pl/services/ocsp.html?status=0&serial=37A6D - sprawdzanie statusu mojego certyfikatu (marek.wawrzynczyk)
  10. http://www.art-bit.pl/content/view/84/100/= ALE TYLKO NIEKWALIFIKOWANEGO w Certum usługa sprawdzenia statusu CLR poprzez OCSP jest bezpłatna. Majc openssl - należy stosować adres: http://ocsp.certum.pl. Jeżeli posiadają Państwo jedną z aplikacji: Netscape 6.0, iPlanet, Certum OCSP lub OpenSSL 0.9.7 w celu automatycznego weryfikowania statusu certyfikatów, powinno się wysyłać żądania do: http://ocsp.certum.pl .

Sprawdzanie CRL poprzez "ściąganie" listy z serwera dostawcy:
  1. Uruchomić na serwerze internetowym IIS procesu "ściągającego" co godzinę dane z wirtyny dostawcy i zapisujący do pliku "ca1.crl" i przetworzenie go do formatu .txt.
  2. Program kliencki odpytywuje stronę na tym serwerze podając jako parametr numer seryjny certyfikatu klienta. Wtedy:
    1. program na serwerze szuka w pliku tekstowym tego numeru, jeżeli jest to certyfikat klienta jest nieważny
    2. program serwera sprawdza czy nie należy przypadkiem ściągnąć najnowszą wersję listy z serwera dostawcy certyfikatów.
Inny sposób - wykorzystać bibliotekę Sigillum i odpytać poprzez ich funkcje OCSP jak to jest z CRL

wtorek, marca 06, 2007

Bezpieczeństwo WS
Jak to jest z tym bezpieczeństwem? Jest wiele rozwiązań. Właściwie przynajmniej trzy:
  • W3C ma swoje dokumenty na temat ochrony XML i SOAP. Trzy standardy:
    • XML Encryption - szyfrowanie (za kodowanie całości lub części XML odpowiada <EncryptionMethod>),
    • XML Signature - podpisywanie jest to podpis cyfrowy (skrót),
    • SOAP Security Extension: Digital Signature (http://www.w3.org/TR/SOAP-dsig/)
  • OASIC (Organization for the Advancement of Structured Information Standards) wydało w 2001 r najnowszą wersję SAML (Security Assertion Markup Language) członkowie - Boeing, Citrix, HP, IBM, Microsoft, Netscape, and Sun. Korzysta z XML Signature oraz SSL/TLS i wymaga nakładów na PKI.
  • a w kwietniu 2002 WS-I (Web Services Interoperability Organization) - IBM i MS - opublikowała początkową specyfikację WS-Security (Web Services Security Language). Członkowie - IBM, Microsoft, and VeriSign. Brak SSO oraz nie wymagaja infrastruktury kluczy, zabezpieczają pojedyńczą tranzakcję. Nagłówek zawiera element z tokenem zawierajacym informacje o autentykacji (X.509 lub żeton Kerberosa), autoryzacji wystawcy, może być również podpisany.
Porównanie: SAML zapewnia SSO, ale jest wolniejszy i wymaga infrastruktury, WS-Security chroni pojedyńczy komunikat.
Implementacje również wybierają różne rozwiązania np. Liberty Alliance (http://www.projectliberty.org/) posługuje się SAML, podczas gdy MS wybrał w swym rozwiązaniu TrustdBridge (http://msdn.microsoft.com/library/default.asp?url=/library/enus/dnwebsrv/html/wsfederate.asp?frame=true) WS-Security.
Cel całej tej zabawy zapewnienie komunikatom SOAP:
  1. integrity,
  2. confidentiality,
  3. authentication,
  4. authorization
Uwaga: samo SSL nie wystarcza kiedy przesyłamy komunikaty poza scenariusz point-to-point. Szyfrowanie z kolei, dostępne poprzez standardy lub S/MIME lub PGP nie są wystarczające, gdyż szyfrują całość komunikatu a tu chodzi o szyfrowanie fragmentów, inne fragmenty są widoczne np. dla osób weryfikujacych przesyłkę. Dlatego wymyślono XML Encryption.
Inne linki:
  1. http://www.onjava.com/pub/a/onjava/2005/02/09/wssecurity.html - wstęp z punktu widzenia Java i w oparciu o standardu, które wszyscy mają gdzieś.
  2. http://www.onjava.com/pub/a/onjava/2005/03/30/wssecurity2.html?page=1 - cz.2
  3. Coraz więcej mówi się o współdziałaniu MS .NET i Java
  4. Jak rozwiązuje to Google w swoim API
  5. The Project The XML Security project is aimed at providing implementation of security standards for XML. Currently the focus is on the W3C standards :XML-Signature Syntax and Processing; and XML Encryption Syntax and Processing. Once these are implemented, XML Key Management is likely to be the next focus for the project. Two libraries are currently available. A Java library, which includes a mature Digital Signature implementation. Encryption is currently under development. A C++ library is also now available. Functionality is currently more basic than that provided by the Java library. http://xml.apache.org/security/
  6. http://xml.apache.org/security/faq.html - świetne wprowadzenie
  7. Klasyka:
    1. http://www.w3c.org/Signature
    2. http://www.w3c.org/Encryption
    3. http://www.cacr.math.uwaterloo.ca/hac/ Applied Cryptography
    4. http://www.w3c.org/Signature
    5. http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/xml_security.html -bezpieczeństwo XML
    6. http://webservices.xml.com/pub/a/ws/2003/01/15/ends.html -
  8. http://forum.java.sun.com/index.jspa - świetna strona początkowa do forum Java (na różne tematy)
  9. http://pywebsvcs.sourceforge.net/ -pyhon też ma, ale co z implementacją bezpieczenstwa?
  10. Googel/yahoo - search: securing WS/webservice/AJAX/zope/php/python/AHAH tez
  11. Z drugiej strony po co szukać w starociach, lepiej przyjrzeć się nowością implementowanym w JSE 1.6 i NetBeans
  12. http://java.sun.com/products/plugin/1.3/docs/jsobject.html - interakcja applet - javascript
  13. http://java.sun.com/docs/books/tutorial/networking/ -sieciowanie w Javie
  14. http://forum.webcity.pl/index.php?s=e46b296c82f1dedc085ee20ce27dc2bf&showtopic=4433&pid=29711&st=0&#entry29711 - ajax uproszczony
  15. http://advajax.anakin.us/index-pl.htm
  16. http://www-128.ibm.com/developerworks/views/webservices/libraryview.jsp?search_by=python+web+services+developer
  17. http://www.javaworld.com/cgi-bin/mailto/x_java.cgi - Bardzo ważny przykład szyfrowanie/deszyfrowania XML przy pomocy Java i JSR od IBM
  18. http://www.javaworld.com/javaworld/jw-10-2002/jw-1011-securexml.html?page=1
  19. http://webservices.xml.com/pub/a/ws/2003/01/15/ends.html - przykłady XML Signature
  20. http://digger.computerworld.pl/
  21. http://www.javaworld.com/javaworld/jw-09-2006/jw-0911-jsf.html
  22. http://xml.sys-con.com/read/307584.htm

niedziela, marca 04, 2007

Niedziela 4 marca
  1. https://www14.software.ibm.com/iwm/web/cc/earlyprograms/ibm/java6/?ns=7307 - nowa maszyna JVM od IBM (ale dostępna na razie tylko dla Linux i Aix) -IBM SDK for Java 6
  2. Ochrona danych w węzłach XML

    After the structure has been created, we can add data between the XML node elements. This data will be used to display in the corresponding parts of the accordion component. Accepting HTML in any node element will make this component much more flexible and can be very easily achieved by simply adding CDATA tags between the content elements. Here is an example of how easy this is to accomplish:

    <content><![CDATA[<b>html text goes here</b>]]></content>
    Adding CDATA tags allows us to use any HTML that we would like to display in any given panel. We could display everything from complex tables, images, and even other components.
  3. http://www.informit.com/articles/article.asp?p=686162&rl=1 - implementing internet communication in Python
  4. Mocny Python. Odczyt skrzynki -
    import poplib
    import getpass

    mServer = poplib.POP3('mail.sfcn.org')

    #Login to mail server
    mServer.user(getpass.getuser())
    mServer.pass_(getpass.getpass())

    #Get the number of mail messages
    numMessages = len(mServer.list()[1])

    print "You have %d messages." % (numMessages)
    print "Message List:"

    #List the subject line of each message
    for mList in range(numMessages) :
    for msg in mServer.retr(mList+1)[1]:
    if msg.startswith('Subject'):
    print 't' + msg
    break
    mServer.quit()
  5. Google kontra MS kto wygra? Ostatnia oferta płatnej usługi edytora i arkusza od Google wywołała spore ozywienie na rynku usług. Po raz pierwszy G wszedł w sposób otwarty na terytorium MS - tzw. produkty wspomagające pracowników biurowych. Czy mu się uda? Wiele firm (AOL, Yahoo, Oracle, Sun) próbowało zmienić swoją linię biznesową na produkcję oprogramowania uniwersalnego jak to robi MS. Obecna oferta G przypomina podrecznikowy scenariusz technologii rozłamowej (disruptive technology) - "lider rynku tak opanował sytuację, że jego produkt osiągnął stan nasycenia funkcjonalnością i zaczyna sprawiać wrazenie przesytu formy (over serve). Użytkownicy mają wrażenie ociężałości pracy z tak przeładowanym pakietem, dlatego widząc na rynku produkt prostszy i szybszy zwracają się ku niemu, zawsze mając śwaidomosc posiadania w zanadrzu "kombajnu" funkcyjnego choć z niego coraz rzadziej korzystają. Na poczatku ta sytuacja nie niepokoi lidera, gdyż jego pakiet używają klienci korporacyjni znani z wysokich wymagań i potrzeb oraz poziomu wsparcia. Ale wraz z nakręcającą się spiralą wzrostu funkcjonalności, obsługa pakietu ulega takiej komplikacji, że nawet ci "power userzy" chcą czegoś "świeżego". I tu mamy przykłady firm "spiących gigantów" jak DEC, Sears, AOL, które przespały zmiany i musiały odejść jak dinozaury (coś w tym jest, ponieważ w filmach reklamowych MS Office 2007, występują pracownicy z głowami tych starożytnych gadów). Oczywiście oficjalne komunikaty MS będą wszystkiemu zaprzeczać, przecież MS jest od dawna liderem aplkacji on-line, ale oferując je traci na sprzedaży swych aplikacji desktopowych. Z drugiej strony G ryzykuje nie tylko porażką w segmencie aplikacji biurowych, ale może stracić pierwszeństwo w swych podstawowym biznesie - wyszukiwaniem informacji. Sprzedaż reklam a świadczenie usług to są dwie różne rzeczy i wymagają wyspecjalizowanych służb i biur marketingowych - http://www.forbes.com/2007/02/23/microsoft-google-software-oped_cx_0223blodget.html?partner=tentech_newsletter

  6. Percepcja konsumenta - Jeszcze do niedawna wydawało się, że produkt obsługujacy dwie rzeczy jest lepszy od produktu obsługującego pojedyńczą funkcję. Ostatnie badanie wykazały jednak paradoks, produkty reklamujące się jako "all-in-one" postrzegane są jako gorsze użytkowo od wyspecjalizowanych. Na tej fali pojawiają się produkty wyspecjalizowane na obsługę jednej funkcji ale robiącej to doskonale (po co komu kombajn - radio, telefon i aparat cyfrowy, kiedy żadena z tych funkcji nie jest wykonywana perfekcyjnie, lepiej kupić taniej tylko telefon, który w swych przeznaczeniu doskonale realizuje swoje funkcje). Ryzyko firmy zaczynajacej od produktu jednofunkcyjnego i zmierzajacego do wielofunkcjonalności jest duże (firma Montblanc - od producenta piór do producenta luksusowych dóbr, czy Porsche od samochodów sportowych do pomocniczych). Czasami może to się udać np. iPhone (apple) czy kombajn (drukarka+faks+scanner+cos tam jeszcze) HP. Jednakże badania rynku wykazują nieufność konsumenta do takich produktów (szczególnie łączących tak różne obszary technologiczne) i obawa i poprawne działanie wszystkich elementów. Drugim utrudniem jest wybór ceny takiego produktu. Propozycja cenowa HP, który wycenił kombajn na poziomie zwykłej drukarki wzbudza nieufność klienta (jak? za tą samą cenę mamtrzy razy więcej możliwości?). Jest wyjatek - rynek oprogramowania - percepcja odbiorcy produktów softwarowych jest taka, że dostaje tę samą technologię różniącą się jedynie WARTOŚCIĄ DODANĄ tj. ludzkim IP (intelectual property). Dlatego powyższa reguła nie działa w stosunku do oprogramownia. Tu działa natomiast prawo, byle nie za tanio ponieważ coś może być zrobione po "łebkach" (ponieważ nie starczyło czasu i pieniędzy choćby na testowanie i projektowanie) - http://www.forbes.com/2007/02/16/all-in-one-inferior-biz_cx_ee_0219papers.html?partner=tentech_newsletter
  7. http://www.mindomo.com/main.php - online mind mapping

wtorek, lutego 27, 2007

Kodowanie

Kodowanie uniwersalne - projekt:

  1. Klient opakowuje swoje dane (traktuje je jako ciąg -strumień binarny). Do tego celu używa kodowania base64 (biblioteka w JS jest na stronie http://www.webtoolkit.info/javascript-base64.html lub instrukcja STRCONV(,13) w VFP).
  2. Dane są bezpiecznie wysłane do serwera jako ciąg znaków ASCII - nie są widziane jako dane binarne.
  3. Serwer rozpakowuje dane posługując się base64 (dekoduje) wbudowaną w PHP

To samo dzieje się w drugą stronę

poniedziałek, lutego 19, 2007

Konspiracja
Biblioteki kryptograficzne w JS kompatybilne z PHP
  1. http://pajhome.org.uk/crypt/md5/auth.html - strona poświęcona ochronie i autentykacji danych + algorytmy szyfrowania md5, sha-1
  2. http://www.koders.com/javascript/fidC1E98D74CAF85084CE28804642822DC623843BDF.aspx?s=md5 - inna implementacja
  3. http://www.md5encryption.com/?mod=encrypt - test poprawności działania md5
  4. http://anmar.eu.org/projects/jssha2/ - dla opornych SHA-1

piątek, lutego 09, 2007

Kurs - "Tworzenie bogatych aplikacji internetowych w oparciu o technologię AJAX"

Zagadnienia:
  1. Przegląd technologii internetowych
  2. Przykłady rozwiązań przed AJAXem (Form Submit) i rozwiązań alternatywnych (iFrame)
  3. Definicja AJAX, podstawowe elementy i komponenty, diagram interakcji, przykłady aplikacji Web 2
Razem 1.5 godz.
  1. Narzędzia do tworzenia rozwiązań opartych o AJAX - przegląd wzorców, bibliotek i frameworków (Yahoo, Atlas, advAjax)
Razem 1.5 godz.
  1. Podstawy AJAX w oparciu o JavaScript:
    1. Wprowadzenie do elementów potrzebnych do uruchomienia AJAX w JS
    2. Oprogramowanie po stronie klienta (PHP, .NET)
Razem 2 godz.
  1. Warsztat - tworzenie aplikacji korzystającej z techologii AJAX
    1. Aplikacja minimalistyczna - korzystająca z podstawowych składników (XMLHttpRequest, DHTML, JS, CSS) -1 godz.
    2. Aplikacja pełna - korzystająca z biblioteki "prototype" - 1 godz.
    3. Aplikacja pełna niezależna od przeglądarki internetowej (porównanie modelu DOM i BOM w MS IE i FireFox) - 1 godz.
  2. Narzędzia wspomagające testowanie aplikacji internetowych - JavaScript Shell, FireBug, Fiddler - 0.5 godz.
  3. Tworzenie aplikacji uwzględniających różnorodne standardu kodowania polskich liter (iso-8859, utf-8, windows-1250) - 1 godz.
  4. Wykorzystanie technologii Ajax w aplikacjach desktopowych (widgets - wichajstry w Yahoo/Opera/Google, Visual FoxPro 9.0) - 1 godz.
  5. Nowe kierunki - oprogramowanie usług webowych firmy Google (docs, spreadsheets, calendar) poprzez Google API - 0.5 godz.
Wszystko razem - 12 godz + czas na wykonanie samodzielne ćwiczeń, konsultacji, pytania i odpowiedzi

Uzasadnienie:

  1. Nowe aplikacje (w architekturze klient serwer z bogatym interfejsem tzw. Rich Client Interface - RCI) wymagają uruchamiania w środowisku graficznym (w przeciwieństwie do obecnych aplikacji znakowych w środowisku emulatora terminala).
  2. Jedyną alternatywą (ze względu na przyzwyczajania, ergonomiczność i wsparcie użytkownika końcowego) do starych rozwiązań jest środowisko MS Windows Client (MS Windows XP i wyżej, ale już nie Windows 98).
  3. W środowisku MS Windows Client działają pakiety biurowe z najbardziej popularnym MS Office.
  4. Firma MS oprócz środowiska uruchomieniowego dla aplikacji graficznych dostarcza również narzędzi do tworzenia aplikacji.
  5. MS Windows Client cechuje doskonałe wsparcie dla ogromnej gamy urządzeń peryferyjnych (wbudowane sterowniki, bije o głowę pod tym względem inne systemy operacyjne np. Linux) oraz posiada standardowe narzędzia do tworzenia nowych sterowników obsługi tych urządzeń (drukarki fiskalne, czytniki kart kryptograficznych).
  6. Firmy dostarczające urządzenia peryferyjne np. czytniki kart, drukarki fiskalne, wagi, kamery itd. dostarczają również gotowe sterowniki dla tego środowiska w postaci uniwersalnych bibliotek dll do wykorzystania przez wszystkie aplikacje Windows.
  7. Biznesowe rozwiązanie informatyczne np. obsługa PKI ze strony klienta wymagają wręcz instalacji u niego środowiska MS Windows (korzystają w dostępie do Internetu MS IE 6.x i wyżej) , dostarczając w zamian oprogramowanie klienckie do konfigurowania, testowania i korzystania z PKI (patrz narzędzia do podpisu elektronicznego firmy Sigillum i Certum).
  8. Nowoczesne rozwiązanie Internetowe oparte o usługi webowe (Web Services) są wbudowane w narzędzia deweloperskie firmy MS (jest to MS Visual Studio 2005 Professional) oraz mają wsparcie w infrastukurze serwerów MS (jest to serwer Internetowy MS IIS oraz akcelerator MS IAS). Firma MS wraz z IBM są jedynymi dostawcami kompleksowych rozwiązań usług webowych (poza tym są one założycielami organizacji WSI i głównym motorem rozwoju standardów w tym zakresie).
  9. Dodatkowo MS jest jedyną firmą, która dostarcza kompleksowe rozwiązanie do tworzenia i uruchamiania własnego autorstwa aplikacji w środowisku MS Windows (począwszy od aplikacji konsolowych, poprzez klasyczne Windows Form i Web Forms aż po serwisy systemowe i serwisy Internetowe) w środowisku Windows) w oparciu o jednolite narzędzia do zarządzanie innymi serwerami (Internetowymi – MS IIS, bazodanowymi – MS SQL Server, zarządzanie infrastrukturą – Active Directory, usługi portalowe – SharePoint) i które doskonale integrują się ze stosowanymi przez użytkownika pakietami biurowymi MS Office.

Rozwoj Mozilli
Oparta na motorze Gecko jest świetną przeglądarką. To czego jej brakuje to niemożność wbudowania jej w inne aplikacje. Rozwiązaniem tego problemu jest projekt http://www.iol.ie/~locka/mozilla/control.htm zwierający motor przeglądarki FF w technologii ActiveX. Z punktu widzenia dewelopera ma to samo API co kapitalnie ułatwia przenoszenie aplikacji z IE na FF. Technicznie, jest to wrapper w styli IE (IWebBrowser) do Gecko (która jest interfejsem API do XPCOM (COM-like), historia i opis - http://developer.mozilla.org/en/docs/Gecko_FAQ). Co zostało imlementowane:
  • IWebBrowser (basic web browsing functions for navigation and son on)
  • IWebBrowserApp (some extended functions for IE, the application)
  • IWebBrowser2 (some more functions for IE, the application)
  • DWebBrowserEvents (basic navigation events)
  • DWebBrowserEvents2 (more events, mainly for the IE app)
Artykuł z MSDN dużo wyjaśnia jak tworzyć takie aplikacje - http://msdn.microsoft.com/workshop/browser/WebBrowser/WebBrowser.asp
Jest tam kompletna instrukcja jak włączyć taką kontrolkę (mozctlx.dll, po rejestracji) do aplikacji w Delphi (zasoby i trochę historii o Netscape - http://www.paranoia.clara.net/articles/taming_the_lizard_with_delphi.html), VB , VB .NET.
Nawet jest PATCHER do aktualizacji kodu binarnego istniejących rozwiązań korzystających z IE!

wtorek, lutego 06, 2007

Wiara
W pracy każdy programista na każdym kroku musi okazywać wiarę. Wiarę, że wierzy w realność i poprawne działanie elementów środowiska w którym pracuje. Musi wierzyć, że:
  1. Komputer działa dobrze
  2. System operacyjny i narzędzi w którym pracuje (RAD) działa dobrze
  3. Gotowe biblioteki działają dobrze
  4. Procedury wbudowane przygotowane przez projektanta działają dobrze
  5. Protokołu transmisji działają dobrze
Bez tego i wielu innych elementów nie sposób cakolwiek zdziałać, bez przerwy trzeba by sprawdzać poprawność różnych rzeczy i interfejsów.

środa, stycznia 31, 2007

Ajax ciekawostki

  1. Możliwość behavior z IE udostępniona w FireFox
  2. http://rabaix.net/index.php/en/articles/issues_developing_ajax_libraries -
    1. If you want to send special characters, like non-ASCII characters, you need to send them encoded in UTF-8. In this purpose, you can use the encodeURIComponent function.

      var params = "money="+ encodeURIComponent('€ euro');
      [...] request code [...]

    2. Request Referrer

      When a query is sent to the server, the referrer value in the query may be empty. However for some reasons the script, which handles the request, may require this information. The XMLHttpRequest comes with a method to send specific headers. It is not possible to set the referrer value for security reasons, however any other name can be used, like "X-Referrer" (read the warning note).

      var xmlRequest = getNewXmlHttpRequest();
      xmlRequest.setRequestHeader("X-Referrer",document.location);

      On the server side you can access to the referrer with $_SERVER['X_REFERRER'].
    3. ResponseXML jak do niego dotrzeć? var firstnames = reponseXML.getElementsByTagName('firstname'); alert('The firstname is ' + firstnames[0]);
    4. W przeglądarkach nie IE jest możliwość serializacji:
    5. function getTextVersion(XMLnode) {
      var text;
      try {
      //serialization to string DOM Browser
      var serializer = new XMLSerializer();
      text = serializer.serializeToString(XMLnode);
      } catch(e) {
      // serialization of an XML to String (IE only)
      text = XMLnode.xml;
      }
      return text;
      }

      node.innerHTML = getTextVersion(xmlResponse)
    6. Nie można wykonać dosztukowanego kodu z responseText - when you append the responseText with innerHTML method, browsers ignore all JavaScript’s codes. Some browsers may transform the innerHTML: Internet Explore ignores the JavaScript code and Firefox may have some strange behaviors.
    7. Przy responseXML nie działa getElementById - po prostu go nie ma.
    8. Jest pewna możliwość wykonania kodu zwróconego w 'response'XML/Text:
      1. responseXML:
      2. function launchJavascriptFromXML(responseXML) {
        var scripts = responseXML.getElementsByTagName('script');
        var js = '';
        for(var s = 0; s < scripts.length; s++) {
        if(scripts[s].childNodes[0].nodeValue == null) continue;
        js += scripts[s].childNodes[0].nodeValue;
        }
        eval(js);
        }
      3. responseText:
      4. function launchJavascript(responseText) {
        // RegExp from prototype.sonio.net
        var ScriptFragment = '(?:<script.*?>)((n|.)*?)(?:</script>)';

        var match = new RegExp(ScriptFragment, 'img');
        var scripts = responseText.match(match);

        if(scripts) {
        var js = '';
        for(var s = 0; s < scripts.length; s++) {
        var match = new RegExp(ScriptFragment, 'im');
        js += scripts[s].match(match)[1];
        }
        eval(js);
        }
        }
    9. Uwagi: są pewne zastrzeżenia co do bezpieczeństwa takiego rozwiązania. Dostęp tak wykonywanego kodu jest globalny do istniejących już zmiennych i funkcji. Funkcje stworzone w tak ściągniętym poprzez response kawałku są lokalne -niewidoczne dla załadowanego do tego momentu już kodu.
    10. Można włączyć w kod AJAX inny kod AJAX (embedded)
      1. var AJAX_Objects = new Array();
        function registerAjaxObject(name, obj) {
        AJAX_Objects[name] = obj;
        }
      2. function onreadystatechange_embeded() {
        // get back the object
        if(AJAX_Objects["xmlRequestEmbeded"].readyState == 4) {
        alert('Hello I came from onreadystatechange_embeded function embeded on the xml');
        }
        }

        var xmlRequestEmbeded = getNewXmlHttpRequest();
        xmlRequestEmbeded.open("GET", SERVER + "/data/issues_developing_ajax_libraries/test.xml");
        xmlRequestEmbeded.onreadystatechange = onreadystatechange_embeded;
        registerAjaxObject("xmlRequestEmbeded", xmlRequestEmbeded);
        xmlRequestEmbeded.send(false);
      3. function getNewXmlHttpRequest() {
        var obj = false;
        try {
        obj = new ActiveXObject('Msxml2.XMLHTTP');
        } catch(e) {
        try {
        obj = new ActiveXObject('Microsoft.XMLHTTP');
        } catch(e) {
        obj = new XMLHttpRequest();
        }
        }
        return obj;
        }
    11. Zasoby:
    12. Demo page of this article : http://rabaix.net/pub/issues_developing_ajax_libraries/demo.html
    13. Prototype library : http://prototype.conio.net/
    14. Wikipedia AJAX : http://en.wikipedia.org/wiki/AJAX
    15. Adaptive Path : http://www.adaptivepath.com/publications/essays/archives/000385.php
    16. Ajax Mistakes : http://sourcelabs.com/ajb/archives/2005/05/ajax_mistakes.html
    17. http://ajaxpatterns.org/On-Demand_Javascript

wtorek, stycznia 30, 2007

Podpis elektroniczny
Wymiana danych m. stroną w kliencie HTML (JS) a serwerem poprzez zakodowanie base64. Problem kompatybilności między bibliotekami PHP i JS realizujacymi ten algorytm. Na tej stronie (http://www.koders.com/javascript/fid42E166DF6E882BE462F10CF31A17973F7467BB10.aspx?s=base64) jest wiele algorytmów kodowania w różnym stylu dla JS.
http://forum.php.pl/lofiversion/index.php/t60745.html
http://forum.php.pl/index.php?showtopic=60027&hl=
Z jakiej biblioteki korzystasz? W Prototype jest cos takiego jak evalscript, o advAjax juz Seth pytal: http://forum.php.pl/index.php?showtopic=49058
Forum -http://forum.php.pl/lofiversion/index.php/f14.html
http://forum.php.pl/lofiversion/index.php/t57815.html
" witam



jeżeli to ie, strona jest w strefie zaufanej, użytkownik zgodzi się na odpalenie kontrolki to możesz utworzyć FileSystemObject i przy jego pomocy wyświetlać/tworzyć itd. pliki na dysku użytkownika. Pod FF musisz mieć podpisany skrypt i też można ... IMHO gra nie warta świeczki ...

pozdrawiam"


"http://forum.php.pl/index.php?showtopic=49058"


Adresy:

  1. http://www.smashingmagazine.com/2007/01/26/tutorials-round-up-ajax-css-javascript-php-mysql-and-more/
  2. http://java.sun.com/developer/onlineTraining/Programming/JDCBook/appA.html - kompletny opis "permission" w Javie
  3. http://docs.rinet.ru/MIIS/ch22.htm - opis tworznia ActiveX w Control Pad
  4. http://blogs.zoho.com/creator/embed-forms-and-views-in-your-websiteblog - Zoho tworzenie formularzy w blogach
  5. http://www.hunlock.com/blogs/AJAX_for_n00bs - wymiana danych z serwerem poprzez iFrame (emulacja AJAX, choć bez kontroli)
  6. http://www.hunlock.com/blogs/AJAX_POST-It_Notes -zaleca się aby kodować wysyłane z JS (w kliencie znaki): " var passData = 'age='+escape(age)+'&name='+escape(name)+'&job='+escape(job);"
  7. http://www.hunlock.com/blogs/AJAX_from_the_darkside - jak zakończyć wysyłanie danych do klienta w PHP (poprzez zamknięcie polaczenia (ob_start();$size=...;header("Content-Length: $size");) i opróżnienie bufora (ob_end_flush(); flush();)
  8. http://support.microsoft.com/kb/241111/pl - Jak rozwiązać problemy z pobieraniem apletów...
  9. http://www.code-magazine.com/article.aspx?quickid=0404072&page=2 - VFP + .NET
  10. http://unspace.ca/discover/attributes/ - atrybuty czy klasy?
  11. http://www.softwaresecretweapons.com/jspwiki/Wiki.jsp?page=JavascriptStringConcatenation - klasa do pracy z łańcuchami w JS (a la Java)
  12. http://www.softwaresecretweapons.com/jspwiki/Wiki.jsp?page=MD5_For_AJAX - jak podpisywać MD5 z kluczem w JS, Javie i PHP
  13. http://www-128.ibm.com/developerworks/web/library/wa-ajaxintro5/?ca=dgr-btw48Ajax Manipulowanie DOM-em (IBM)
  14. http://www-128.ibm.com/developerworks/xml/library/wa-ajaxintro4/ - AJAX i DOM (IBM)
  15. http://www.w3schools.com/jsref/jsref_obj_global.asp - ciekawe funkcje w JS (w3cschools)