Google App Engine HTTP Session vs JSF [en]

Google App Engine (GAE) is a Platform as a Service system providing (among others) Java platform with a servlet container. GAE uses multiple web servers to run an application. A given request may be routed to any server and it may not be the same server that handled a previous request from the same user. GAE provides (after turning it on) an implementation of sessions using the servlet session interface. The session is replicated between server instances which causes serious problems with JSF session beans. Read more

Google App Engine HTTP Session vs JSF

Google App Engine jest usługą typu Platform as a Service umożliwiającą (między innymi) uruchamianie aplikacji webowych Java poprzez udostępnienie kontenera servletów. Aplikacja nie jest uruchamiana w jednej instacji lecz zapytania do GAE są propagowane między wiele instacji serwerów. Istnieje możliwość korzystania z sesji HTTP (po zaznaczeniu tego w konfiguracji). Sesja jest replikowana między instancjami serwerów co rodzi poważne problemy w przypadku korzystania z sesyjnych beanów JSF.  Read more

Basic Authentication na Google App Engine

Google App Engine (GAE) dla Javy udostępnia jedynie namiastkę implementacji Servlet Security opisanego w rozdziale SRV.12 specyfikacji Java Servlet 2.5. W pliku web.xml (/web-app/security-constraint/auth-constraint/role-namemożemy użyć tylko roli admin lub *. Nie ma możliwości wyboru metody uwierzytelniania (SRV.12.5). W zamian za to mamy możliwość skorzystania z uwierzytelniania przy użyciu konta Google lub przez zewnętrznego dostawcę OpenID oraz użycia Google Users Java API.

Spotkałem się z potrzebą ograniczenia dostępu do całej aplikacji na GAE (włącznie ze stroną główną) tylko do developerów. To co w standardowym kontenerze webowym skończyłoby się na modyfikacji paru wpisów w web.xml tutaj wymagało innego podejścia. Read more

Obejeście weryfikacji podpisu providera kryptograficznego na HotSpot JRE

Aby dodać do JCA provider kryptograficzny Javy zawierający implementację związaną z szyfrowaniem (dokładniej Cipher, KeyAgreement, KeyGenerator, MAC albo SecretKey) trzeba go wcześniej podpisać certyfikatem uzyskanym od firmy Oracle (lub IBM). Cytując za dokumentacją, w ten sposób JCA uwierzytelnia dostawcę żeby tylko providery podpisane przez zaufane podmioty mogły być włączone do JCA. Znalazłem lukę, która pozwala to wymaganie obejść.

Read more

Java HotSpot Cryptographic Provider signature verification issue [en]

According to the Java HotSpot documentation when instantiating a provider’s implementation (class) of a Cipher, KeyAgreement, KeyGenerator, MAC or SecretKey factory, the framework will determine the provider’s codebase (JAR file) and verify its signature. Even developer has to obtain a code-signing certificate from Oracle (or IBM) so that you can use it to sign your provider prior to testing. This way, JCA authenticates the provider and ensures that only providers signed by trusted entity can be plugged into JCA. However, I have found flaw which allows an attacker to bypass this requirement.

Read more

Nietypowe wywołanie invokespecial z Jasmin (Java assembler)

Byłem ciekaw czy z klasy Java można wywołać invokespecial na rzecz nieprywatnej metody przywiązanej do instancji obiektu z zewnątrz jego klasy. Za najprostszą metodę stworzenia takiej “dziwnej” klasy uznałem użycie assemblera Jasmin. Był to dobry pretekst do zapoznania się z tym narzędziem. Read more

Java UDF w DB2

Zaawansowane serwery baz danych umożliwiają użytkownikom rozszerzanie dostępnej logiki (User-defined routines)  nie tylko w postaci podprogramów napisanych w SQL ale także w innych językach programowania. IBM DB2 umożliwia tworzenie podprogramów w PL/SQL lub w postaci zewnętrznych podprogramów w różnych językach w tym w Javie.  Może się to okazać przydatne na przykład gdy chcemy użyć bibliotek niedostępnych z poziomu PL/SQL. Tak było w moim przypadku – potrzebowałem specyficznych algorytmów kryptograficznych.

Zdecydowałem się na stworzenie funkcji użytkownika w Javie (User Defined Functions). W tym poście pokażę jak stworzyć funkcję UDF używając rekomendowanego sposobu przekazywania parametrów PARAMETER STYLE JAVA. Korzystałem z serwera DB2 9.1 zainstalowanego na systemie AIX 5.3. Read more

Porównanie prędkości kryptograficznych funkcji skrótu

Kryptograficznych funkcji skrótu używa praktycznie każdy programista. Zwykle kryterium wyboru nie jest ich prędkość a odporność na różnego rodzaju ataki. Jest parę własności które taka funkcja skrótu powinna spełniać (preimage resistance, second preimage resistance, collision resistance). Zwykle dobrze jest się kierować zaleceniami Amerykańskiego Narodowego Instytutu Standardów będącego wyznacznikiem dla standardów publicznej kryptografii.  Publikuje on zalecenia dotyczące stosowania kryptograficznych funkcji skrótu. Zaleca między innymi aby nie stosować już funkcji MD5, zaś funkcja SHA-1 powinna być stosowana co najwyżej do 2010 roku. Niemniej jednak istnieją zastosowania w których priorytetem wcale nie jest ogólne bezpieczeństwo lecz któraś ze szczególnych własności i jej jakość dostarczana przez każdą z funkcji jest więcej niż wystarczająca. W jednej z moich implementacji interesowała mnie jedynie własność jednokierunkowości (preimage reistance) na którą ataki są najtrudniejsze a bezpieczeństwo większości standardowych funkcji pod tym względem było dla mnie więcej niż wystarczające. Ważna była prędkość obliczania skrótów dla małych bloków danych.

Przeprowadzone przez innych testy prędkości nie dotyczyły zwykle implementacji we współczesnej Javie (optymalizacja runtime ma tu duże znaczenie). Stanąłem więc przed koniecznością samodzielnego przeprowadzenia testu. Read more

Przekazywanie akcji do komponentu composite w Facelets dla JSF 2

Specyfikacja JavaServer Faces 2.0 (JSR 314) obejmuje język definicji widoku Facelets. Udostępnia mechanizmy ułatwiające trzymanie się reguły DRY (Don’t Repeat Yourself) czyli unikanie powtarzania własnego kodu. Templates i composite components, bo o nich mowa umożliwiają dekompozycję definicji widoku na mniejsze framenty. Często w przypadku komponentów zawierających na przykład przyciski przydaje się możliwość przekazywania jako parametru akcji przez nie wywoływanej. W specyfikacji znalazłem informację o dwóch sposobach, w tym jednym podanym w przykładzie. Niemniej jednak podczas korzystania z referencyjnej implementacji okazało się, że jeszcze nie wszystko jest spójne. Read more

Workspace w NetBeans

Wydaje się, że w NetBeans brakuje odpowiednika workspace znanego z Eclipse. Okazuje się jednak, że taka funkcjonalność istnieje choć nie widać jej w GUI. Read more

Next Page »