sobota, 2 czerwca 2012

[ZPI] planowanie projektu





Wstępny Plan Projektu

  • Ocena ryzyka
    • Wyniki oceny ryzyka wg Thomsetta
    • Sugerowany cykl życia projektu
    • Zidentyfikowane zagrożenia (dla 5 zagrożeń)
      • Opis (dla każdego zagrożenia): zakres, zagrożenie, skutki, czynniki ryzyka, szansa wystąpienia, waga, powiązania z innymi zagrożeniami
      • Planowane przeciwdziałanie



Działania, odpowiedzialność, nieodzowne zasoby

  • Proces
    • Cykl życia projektu
      • Proces wytwarzania, podejście
      • Strategia prowadzenia projektu  (wybór cyklu życia)
      • Uzasadnienie
    • Opis etapów wytwarzania oprogramowania (dla każdego etapu)
      • Cele
      • Główne zadania 
      • Produkty
      • Kryteria akceptacji
    • Organizacja projektu
      • Zespół projektowy
      • Infrastruktura techniczna (narzędzia, metody, technologie)
      • Infrastruktura komunikacyjna (wewnętrzna, z klientem, rozwiązywanie konfliktów)
      • Infrastruktura dokumentacyjna
    • Aspekty jakości w projekcie 
      • wymagania jakościowe klienta lub firmy wytwórczej, 
      • założenia jakościowe dla projektu np. wybrane podejście do aspektów jakościowych, stosowane standardy i procedury
    • Wstępny harmonogram projektu
      • Ograniczenia czasowe na projekt.
      • Oszacowanie czasu realizacji poszczególnych etapów
      • Zgrubny harmonogram (etapy, produkty)
      • Dyskusja; odpowiedzialność i ścieżki krytyczne.

[ZPI] założenia wstępne


Założenia wstępne

1. Cele systemu

  • Główne zadanie i cele, także biznesowe, systemu
  •  Dostarczane produkty / usługi
  • Stan po zrealizowaniu, spodziewane korzyści

2. Problem i jego kontekst

  • Prezentacja problemu, stan aktualny
  • Udziałowcy, inne systemy i ich interfejsy

3. Proponowane rozwiązanie

  • Zakres funkcjonalności (Opis usług, jakie system ma udostępniać)
  • Kształt systemu (Założenia architektoniczne, organizacja pracy i dostępu)

4. Wymagania jakościowe i eksploatacyjne

  • Wymagania dotyczące ochrony, bezpieczeństwa, przenośności, elastyczności, konfigurowalności, niezawodności, wydajności itp.
  • Wymagania i potrzeby instalacji, wdrożenia (w tym - przygotowania danych) i eksploatacji systemu.

5. Ograniczenia

  • Ograniczenia, które mają wpływ na kształt systemu i projektu 
    • dotyczące zasobów projektowych: 
      • czasowe, 
      • ludzkie, 
      • sprzętowe, 
      • oprogramowanie; 
    • dotyczące produktu: 
      • interfejsów, 
      • działania w specyficznych warunkach, 
      • dokumentacji, 
      • specyficzne wymagania użytkownika

6. Słownik pojęć

  • Katalog opisów i definicji pojęć oraz ich wykorzystania; wzajemne zależności między pojęciami

piątek, 1 czerwca 2012

[WAI] pytania dodatkowe


36) Opisz sposoby kodowania dokumentów binarnych i znaków specjalnych (MIME).
Sposoby kodowania:
- Quote-printable: Każdy znak 8-bitowy może być reprezentowany przez sekwencję =numer heksadecymalny kodu ASCII. Jeżeli numer zawiera cyfry heksadecymalne A-F to są dozwolone tylko wielkie znaki.
- Base64: Każda sekwencja trzech znaków 8-bitowych (czyli 24 bitów) zamieniana jest na sekwencję czterech liczb 6-bitowych, z których każda stanowi indeks znaku 64-znakowego alfabetu (zawiera wielkie i małe litery USASCII, cyfry, znak + i znak /). Kolejne znaki tego alfabetu są wynikiem kodowania. Dodatkowy znak specjalny '=' służy np. do uzupełniania brakujących bajtów w sekwencjach 3-bajtowych.


37) Podaj schemat transakcji z użyciem protokołów WAP. Przedstaw w punktach kroki
dokonywane w tej transakcji.
Komórka łączy się poprzez sieć bezprzewodową z serwerem WAP. Po wpisaniu adresu w mikroprzeglądarce, telefon najpierw sprawdza, czy ma już otwarte połączenie.
Jeżeli nie, to dzwoni do serwera WTA udostępniającego usługę. 
Następnie żądanie wyświetlenia danego adresu URL przesyłane jest do serwera WAP.
Ten wysyła do Internetu żądanie podanego adresu URL już jako normalnego połączenia HTTP.
Wysłana przez serwer odpowiedź na żądanie może być w postaci pliku tekstowego WML lub HTML. W drugim przypadku odpowiednie filtry muszą przekształcić odpowiedź do WML. 
Tak przygotowany kod zostanie następnie wysłany do telefon.
Serwer WAP jest pomostem pomiędzy urządzeniem mobilnym a resztą świata. Zazwyczaj jego adres jest stroną domową w przeglądarce urządzenia przenośnego. Zawiera filtry WML/HTML. 



38) Przedstaw na rysunku architekturę J2ME. Opisz poszczególne komponenty tej
architektury.
Komponenty:
- KVM - Kilobyte Virtual Machine
-- Rozmiar 40 – 80 KB
-- Dla urządzeń z pamięcią rzedu 100 KB i procesorami 16 lub 32-bit RISC/CISC
- CLDC - Connected Limited Device Configuration
-- Dostarcza podstawowy poziom funkcjonalności
-- Minimalne operacje I/O i funkcje użytkowe
-- Składa się z java.io, java.lang, java.util, java.microedition.io
- MIDP – Mobile Information Device Profile
-- MIDP dostarcza podstawowej funkcjonalności dla urządzeń mobilnych (Połączenia sieciowe, zapis danych, GUI)
- API specyficzne dla urządzenia
-- Dostęp do cech charakterystycznych


39) Dokonaj klasyfikacji parserów strumieniowych dokumentów XML. Podaj ogólny
schemat działania każdej grupy paserów.

40) Przedstaw zalety i wady standardów przetwarzania dokumentów XML: DOM i SAX
Porównanie standardów DOM i SAX
- prosty, łatwy do zastosowania interfejs SAX, w porównaniu z obszernym i zawiłym interfejsem DOM;
- w standardzie DOM cały dokument w postaci przetworzonej zostaje wprowadzony do pamięci, np. przetworzenie dokumentu XML zawartego w pliku 100 KB często zajmuje w pamięci obszar 1 MB;
- względna łatwość tworzenia własnych struktur danych na podstawie sekwencji informacji elementarnych przy zastosowaniu standardu SAX
- w standardzie SAX: względna łatwość wyszukania niewielkiego podzbioru informacji
- brak możliwości swobodnego dostępu do danych w standardzie SAX (dostęp do danych w porządku, w jakim się pojawiają)
- w standardzie DOM łatwy dostęp do elementów poprzedzających i następnych;
- SAX ignoruje komentarze
- standard DOM pozwala modyfikować dokument w pamięci




22) Interakcja z AJAX’em


Klient (użytkownik) genteruje zdarzenie
Utworzenie i konfiguracja obiektu XMLHttpRequest (w przeglądarce). 
Obiekt XMLHttpRequest tworzy (generuje) żądanie 
Żądanie jest przetwarzane przez serwlet (tutaj ValidateServlet) 
Serwlet zwraca dokument XML  (!!) zawierający rezultat
Obiekt XMLHttpRequest wywołuje funkcję callback() i przetwarza rezultat 
DOM HTML jest uaktualniany

Zalety
Dużo lepszy interfejs użytkownika – brak efektu przeładowania strony; Aplikacja webowa funkcjonuje podobnie jak aplikacja desktopowa; Za zarządzenie stanem odpowiedzialny  jest klient; Brak kosztów związanych z aktualizacją software’u po stronie klienta (wbudowane w przeglądarkę; Serwis jest “cool”  (cool factor) 

Minusy
Wymaga nowych przeglądarek  Od IE 6, Firefox 1.0.x, Mozilla Czyli ok. 90% użytkowników 
Trudne debugowanie; Konieczna znajomość technologii:XML,XPath,XSLT,JavaScript, CSS, DHTML, DOM; Niedojrzałość bibliotek i frameworków;Brak kompatybilności przeglądare

czwartek, 31 maja 2012

[WAI] usługi sieciowe




  • elementy "budujące" technologię Web Service:
    • SOAP - protokół komunikacyjny;
      • służy do przekazywania zdalnych wywołań;
    • WSDL - język opisu interfejsu usługi;
      • służy do dystrybucji parametrów połączeń sieciowych;
    • UDDI - specyfikacja bazy danych
      • służy do rejestracji udostępnianych komponentów usługowych



  • cykl życia WS:
    1. serwer-wytwórca rejestruje usługę na zasobie UDDI (informacja na temat serwisu i providera);
    2. klient wyszukuje usługę w rejestrze UDDI;
    3. rejestr UDDI zwraca klientowi listę usług ze wskazaniem na zasoby WSDL;
    4. klient wysyła żądanie pobrania definicji usługi (pobiera WSDL) pod URL otrzymany od UDDI - kieruje się na serwer;
    5. serwer zwraca plik WSDL (z definicją usługi w formacie XML);
       - na podstawie tego pliku wytworzona może być aplikacja: klient usługi WS (Aplikacja obsługująca WS);
    6. wywołanie WS - klient łączy się z servisem używając protokołu SOAP/HTTP(S);
    7. serwer zwraca klientowi rezultaty wywołania serwisu







Zabezpieczanie usług sieciowych z wykorzystaniem HTTP Basic Authentication
oraz HTTPS
1. Wprowadzenie
Celem niniejszego laboratorium jest zabezpieczenie usług sieciowych dostępnych
na serwerze za pomocą mechanizmów HTTP Basic Authentication oraz HTTPS ([2], [1]).
Wywołanie metody dostępnej w ramach usługi sieciowej zainstalowanej na serwerze np.
Tomcat/AXIS jak pokazano w ćwiczeniu 4, następuje z wykorzystaniem protokołu SOAP,
w   którym   zakodowane   są   argumenty   wejściowe   jak   i   wyniki   działania   metody.   Do
przekazania danych pomiędzy klientem a serwerem wykorzystywany jest protokół HTTP.
Z punktu widzenia zabezpieczenia usługi rodzi to następujące problemy:
1. Klient nie jest identyfikowany, wywołania metody tej samej usługi przez np. różne osoby
nie   są   rozróżniane.   Stąd   niemożliwe   staje   się   np.   naliczanie   opłat   za   wywołanie
metody.
2. Argumenty   wejściowe   i   wyjściowe   metody   przekazywane   są   z   wykorzystaniem
protokołu   HTTP,   nie   są   więc   szyfrowane   co   potencjalnie   umożliwia   podsłuchanie
komunikacji pomiędzy klientem a serwerem.
W ramach przykładów, które rozwiążą ww. kwestie, wykorzystany zostanie serwer
Tomcat/AXIS, który pozwoli na zainstalowanie usługi sieciowej napisanej w Javie.
Podstawowa   konfiguracja   serwera   Tomcat/AXIS   jak   również   kod   klienta
wywołującego  metodę usługi sieciowej i jego  kompilacja  i uruchomienie  były  tematem
laboratorium   nr   1.   Na   potrzeby   tego   laboratorium   zakładamy,   że   pracujemy   jako
użytkownik  student  z  katalogiem domowym /home/student. Zakładamy,  że  treść  pliku
~/.bashrc zawiera konfigurację dla AXIS 1.4 i Javy (należy zmienić katalog na dystrybucję
Javy jeśli jest inna).
 export JAVA_HOME=/usr/local/jdk1.5.0_07
export AXIS_HOME=/home/student/axis­1_4
export AXIS_LIB=$AXIS_HOME/lib
export AXISCLASSPATH=$AXIS_LIB/axis.jar:$AXIS_LIB/axis­ant.jar:$AXIS_LIB/commons­discovery­0.2.jar:$AXIS_LIB/commons­logging­1.0.4.jar:\
$AXIS_LIB/jaxrpc.jar:$AXIS_LIB/saaj.jar:$AXIS_LIB/log4j­1.2.8.jar:
$AXIS_LIB/wsdl4j­1.5.1.jar
#export AXIS_HOME=/usr/local/axis­1_1
#export AXIS_LIB=$AXIS_HOME/lib
#export AXISCLASSPATH=$AXIS_LIB/axis.jar:$AXIS_LIB/commons­discovery.jar:
$AXIS_LIB/commons­logging.jar:$AXIS_LIB/jaxrpc.jar:$AXIS_LIB/s\
aaj.jar:$AXIS_LIB/log4j­1.2.8.jar:$AXIS_LIB/xml­apis.jar:$AXIS_LIB/xercesImpl.jar:
$AXIS_LIB/wsdl4j.jar                                
export CLASSPATH=$CLASSPATH:$AXISCLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
Zakładamy   ponadto,   że   serwer   Tomcat   został   zainstalowany   w   katalogu
/home/student/apache­tomcat­5.5.28   jak   również   podkatalog   webapps/axis   dystrybucji
AXIS został skopiowany do katalogu webapps serwera Tomcat.
2. Wykorzystanie mechanizmu HTTP Basic Authentication
Mechanizm ten umożliwia wymuszenie zalogowania się przez klienta na serwerze
poprzez podanie loginu użytkownika oraz hasła. Niestety, login i hasła nie są szyfrowane
w   sposób   uniemożliwiający   ich   odczytanie.   Mechanizm   ten   pozwala   jednak   na
identyfikację   użytkownika   przy   założeniu,   iż   różni   użytkownicy   dysponują   różnymi
identyfikatorami użytkownika w postaci ciągu znaków login.
Ww.   sposób   wymaga   konfiguracji   serwera   w   postaci   określenia   użytkowników,
którzy mogą się do systemu logować, a w szczególności:
Login,   hasło   oraz   rolę   użytkownika   w   postaci   linii   w   pliku   /home/student/apache­
tomcat­5.5.28/conf/tomcat­users.xml:
<?xml version='1.0' encoding='utf­8'?>
<tomcat­users>
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <role rolename="runtaskuser"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>
  <user username="runtaskuser" password="uio9" roles="runtaskuser"/>
</tomcat­users>
Zdefiniowano  użytkownika runtaskuser, określono  hasło  oraz  rolę, do której referencja
występuje z kolei w pliku katalogu systemu AXIS tj.:
/home/student/apache­tomcat­5.5.28/webapps/axis/WEB­INF/web.xmlW pliku tym, na końcu elementu </web­app> należy zdefiniować URL, który obejmować
będzie rola określona powyżej poprzez umieszczenie np.:
<security­constraint>
    <web­resource­collection>
        <web­resource­name>RunTaskApplication</web­resource­name>
        <url­pattern>/*</url­pattern>
    </web­resource­collection>
    <auth­constraint>
        <role­name>runtaskuser</role­name>
    </auth­constraint>
</security­constraint>
<login­config>
    <auth­method>BASIC</auth­method>
    <realm­name>RunTask Application</realm­name>
</login­config>
login­config określa metodę identyfikacji użytkownika, web­resource­collection określa
zbiór  adresów URL (w tym przypadku  wszystkie strony  w danym katalogu systemu
AXIS), auth­constraint określa rolę, dla której zezwala się na dostęp do podanego URL.
Należy zauważyć, iż kod metod usługi sieciowej nie odwołuje się do roli, która ma dostęp
do usługi, uprawnienia są więc w tym przypadku elementem konfiguracji serwera.
Kod usługi sieciowej, wykorzystywany w niniejszej instrukcji, umożliwia uruchomienie na
serwerze polecenia podanego jako argument:
import java.io.*;

public class RunTaskServer {
  public int RunTask(String taskname)
  {
      try {
          Process p = Runtime.getRuntime().exec(taskname);
      } catch (IOException e1) {
          System.err.println(e1);
          System.exit(1);
      }
      return 0;
  }
}
Kod klienta wywołujący metodę podaną powyżej i zainstalowaną jako plik JWS (Java Web
Service)   w   katalogu   /home/student/apache­tomcat­5.5.28/webapps/axis/RunTaskServer.jws, uzupełniony jest o zdefiniowanie loginu i
przekazanie hasła w celu uwierzytelnienia na serwerze:
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.utils.Options;
import javax.xml.rpc.ParameterMode;
public class RunTaskClient
{
   public static void main(String [] args) throws Exception {
     
       Options options = new Options(args);
       String endpoint = "http://localhost:" + options.getPort() +
                         "/axis/RunTaskServer.jws";
       args = options.getRemainingArgs();
       String method = "RunTask";
       String s1 = new String(args[0]);
       Service  service = new Service();
       Call     call    = (Call) service.createCall();
       call.setTargetEndpointAddress( new java.net.URL(endpoint) );
       call.setOperationName( method );
       call.addParameter( "op1", XMLType.XSD_STRING, ParameterMode.IN );
       call.setReturnType( XMLType.XSD_INT );
       call.setUsername("runtaskuser");
       call.setPassword("uio9");      
       Integer ret=(Integer) call.invoke( new Object [] { s1 });
       System.out.println("Got result : " + ret);
   }
}
3. Wykorzystanie HTTPS do wywołania metody usługi sieciowej
Protokół   HTTPS   (HTTP+SSL)   pozwala   na   szyfrowanie   komunikacji   pomiędzy
klientem a serwerem, nie zachodzi więc obawa o podejrzenie przesyłanych danych przez
osoby   postronne.   Protokół   HTTPS   wykorzystuje   techniki   kryptografii   asymetrycznej   i
symetrycznej.
Konfiguracja   serwera   Tomcat   do   obsługi   HTTPS   sprowadza   się   do
odkomentowania odpowiednich deklaracji w pliku konfiguracyjnym /home/student/apache­
tomcat­5.5.28/conf/server.xml:
    <Connector port="8443" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" disableUploadTimeout="true"
               acceptCount="100" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />
 
Tomcat   obsługiwać   będzie   odtąd   zgłoszenia   na   porcie   8080   oraz   8443   (domyślnie),
ostatnie z wykorzystaniem HTTPS.
Konfiguracja  klienta  usługi sieciowej, która  ma być wywołana  z  wykorzystaniem
HTTPS sprowadza się do ustawienia odpwiedniego adresu URL (HTTPS zamiast HTTP)
oraz wskazania odpowiedniego pliku keystore (certyfikat SSL), który umożliwi szyfrowaną
komunikację pomiędzy klientem a serwerem. Wygenerowanie pliku (jednego w przypadku
klienta i serwera na tej samej maszynie) sprowadza się do wywołania:
keytool -genkey -alias tomcat -keyalg RSA
Domyślne hasło to  changeit. Dodatkowe elementy  kodu klienta, które należy  umieścić
przed wywołaniem metody usługi sieciowej to:
       String endpoint = "https://localhost:8443/axis/RunTaskServer.jws";       System.setProperty("javax.net.ssl.trustStore",
                          "/home/student/.keystore");
4. Połączenie metod HTTP Basic Authentication oraz szyfrowanej transmisji HTTPS
Wyżej   wymienione   techniki   mogą   zostać   połączone   ze   sobą   w   celu   zapewnienia
identyfikacji użytkownika oraz szyfrowania transmisji danych. Należy przeprowadzić kroki
konfiguracji   serwera   dla   obu   wymienionych   metod   oraz   zmodyfikować   kod   klienta   z
elementami pokazanymi wyżej dla obu wymienionych metod.
Pomimo  tego, iż  użytkownik  został  zidentyfikowany  na  podstawie  loginu  i  hasła  oraz
stosowana jest komunikacja szyfrowana, serwer nie może mieć absolutnej pewności co
do tożsamości klienta tj. nie wie, kim faktycznie jest klient o danym loginie i haśle. W
praktyce   sklepy   internetowe   często   nie   rozwiązują   tego   problemu   zakładając,   iż
użytkownik zakładając konto w sklepie o danym loginie i haśle podaje również poprawne
dane osobowe oraz adres, pod który wysyłany jest następnie towar np. za zaliczeniem
pocztowym. Z reguły, używana jest szyfrowana transmisja HTTPS, zaś sama identyfikacja
użytkownika następuje na poziomie aplikacji poprzez przekazanie loginu i hasła np. przez
pola formularza.
Java   posiada   odpowiednie   API,   które   pozwala   na   implementację   podpisu   cyfrowego
danych oraz weryfikację podpisu. Klient generuje klucze prywatny i publiczny, następnie
podpisuje   dane   z   użyciem   klucza   prywatnego,   przekazuje   dane   wraz   z   podpisem   i
kluczem publicznym do weryfikacji serwerowi, który jest w stanie stwierdzić, czy podpis
faktycznie odnosi się do danych, które zostały przekazane. Serwer musi mieć pewność, iż
klucz publiczny należy do określonego klienta. Certyfikat klienta zawierać będzie klucz
publiczny. Certyfikat będzie podpisany przez jednostkę certyfikującą, która potwierdza, iż
klucz   publiczny   należy   do   określonego   klienta.   API   oraz   przykłady   Javy   odnośnie
podpisów cyfrowych można znaleźć w [3] i [4].
Przykładowy   klient   wykorzystujący   HTTP   Basic   Authentication   oraz   HTTPS   ma
następującą postać:
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.utils.Options;
import javax.xml.rpc.ParameterMode;
public class RunTaskClientHTTPSBASIC
{
   public static void main(String [] args) throws Exception {
     
       Options options = new Options(args);      
       String endpoint = "https://localhost:8443/axis/RunTaskServer.jws";
       System.setProperty("javax.net.ssl.trustStore",
  "/home/student/.keystore");
     
       args = options.getRemainingArgs();
       String method = "RunTask";
       String s1 = new String(args[0]);
       Service  service = new Service();
       Call     call    = (Call) service.createCall();
       call.setTargetEndpointAddress( new java.net.URL(endpoint) );
       call.setOperationName( method );
       call.addParameter( "op1", XMLType.XSD_STRING, ParameterMode.IN );
       call.setReturnType( XMLType.XSD_INT );
       call.setUsername("runtaskuser");
       call.setPassword("uio9");
       Integer ret=(Integer) call.invoke( new Object [] { s1 });
       System.out.println("Got result : " + ret);
     
   }
}
Uwaga:
można również testować wywołanie usługi sieciowej za pomocą przeglądarki wywołując
np.:
https://localhost:8443/axis/RunTaskServer.jws?method=RunTask&taskname=emacsLiteratura
1. AXIS User's Guide. http://ws.apache.org/axis/java/user­guide.html
2.   Gopalakrishnan   U,   Rajesh   Kumar   Ravi,   Web   services   security,   Part   I,
http://www­106.ibm.com/developerworks/webservices/library/ws­sec1.html
3.     Thomas   Gutschmidt   Introduction   to   Digital   Signatures   in   Java,
http://www.developer.com/java/other/article.php/630851
4. The   Java
TM
  Tutorial,   Trail:   Security   in   Java   2   SDK   1.2,   Lesson:   Generating   and
Verifying   Signatures,
http://java.sun.com/docs/books/tutorial/security1.2/apisign/index.html

[WAI] serwlety


Struktura serwletu


public class Repository extends HttpServlet {

   @Override
   public void init() throws ServletException {
     super.init();
   }

   @Override
   protected void doGet(HttpServletRequest request, HttpServletResponse response
   throws ServletException, IOException {
    // 
   }


   @Override
   protected void doPost(HttpServletRequest request, HttpServletResponse response
   throws ServletException, IOException {
    // 
   }
}




Podstawowe metody serwletu:
• init – inicjalizacja serwletu, wywoływana przy jego pierwszym uruchomieniu,
• doGet – obsługa żądań GET,
• doPost – obsługa żądań POST.

Parametry żądania i odpowiedzi:
• HttpServletRequest – dostarcza informacje na temat żądania:
◦ String getParameter(String name) – zwraca wartość parametru żądania,
• HttpServletResponse – dostarcza informacje na temat odpowiedzi.

[PT] zasady zaliczenia



1. Każdy student otrzymuję arkusz egzaminacyjny z pytaniami (20 - 25 pytań).

2. Część pytań wymaga odpowiedzi słownych, inne wymagają wskazania poprawnych odpowiedzi spośród kilku podanych,np. a., b., c.

3. Za poprawną odpowiedź za każde pytanie uzyskuje się 1 pkt.

4. Jeśli poprawna odpowiedź na pytanie wymaga zaznaczenia np. trzech odpowiedzi spośród pięciu, to zaznaczenie tylko dwóch odpowiedzi jest zaliczane jako 2/3 pkt.

5. Zaznaczenie błędnej odpowiedzi powoduje odjęcie 0.5 pkt. Nie stosuje się punktów ujemnych - najniższa punktacja wynosi 0 pkt.



Pytania przykładowe:

1. Mechanizm AutoPostBack na platformie .NET pozwala na :
  a. Wykorzystanie wbudowanego mechanizmu wykonywania kopii bazy
     danych
  b. Automatyczne ustanawianie sesji
  c. Automatyczne wysyłanie żądania do serwera po zmianie stanu
     obiektu w przeglądarce
  d. Automatyczne logowanie użytkownika w  oparciu o mechanizm MS
     Passport

2. Komponenty zarządzane (określane także jako beany zarządzane) są
  to klasy Javy odpowiedzialne za  . . . . . . . . . . . . . .
  aplikacji JSF.

3. W strukturze pliku wykonywalnego (.exe) przeznaczonego dla
  środowiska .NET można wyróżnić następujące elementy:
  a. Pieniek wspólnego środowiska uruchomienia
  b. Skonsolidowany  zbiór z  zasobami (np. rysunkami)
  c. Kod funkcji importowanych
  d. Maszynę wirtualną CLR

4. Omówić rodzaje i przeznaczenie warstw w Java EE.

5. Omówić cykle życia komponentów (beanów) EJB.

6. Wyjaśnić na czym polega różnica między transakcjami zarządzanymi
  przez komponent (bean) i przez kontener EJB.








[WAI] egzamin opracowanie pytań



  • wyjaśnij różnice pomiędzy ciasteczkami a obiektem sesji

    SESJE
    • PHP udostępnia mechanizm śledzenia sesji zwany popularnie po prostu sesjami. 
    • To, w jaki sposób przechowywane są dane sesji (czy po stronie serwera, czy w przeglądarce), uzależnione jest od konfiguracji PHP. Zwykle jednak pozostawia się konfigurację...
    • Sesja może zostać uruchomiona na trzy sposoby: 
      • automatycznie – jeżeli opcja session.auto_start w konfiguracji jest ustawiona na jeden; 
      • jawnie – poprzez wywołanie funkcji session_start() ;
      • niejawnie – poprzez wywołanie funkcji session_register() ;

        materiały od Czarnula:
  • Sesja
    • Sesja jest obiektem klasy HttpSession. Może zostać pobrana np. poprzez wywołanie odpowiedniej metody na obiekcie żądania: request.getSession().
    • Podstawowe operacje na obiekcie sesji:
      • Object getAttribute(String name) – pobranie obiektu z sesji,
      • void setAttribute(String name, Object obj) – dodanie obiektu do sesji,
      • void invalidate() - zniszczenie obiektu sesji,
      • void removeAttribute(String name) – usunięcie obiektu z sesji.
           CIASTECZKA
    • Ciasteczka (ang. cookies) to mechanizm pozwalający na zapamiętywanie po stronie klienta (przez przeglądarkę) danych wysłanych przez stronę WWW.
    •  Ciasteczka charakteryzują się różnym czasem trwałości — można tworzyć ciasteczka, których ważność wygasa...


z netu:



  1. You don't need login/logout mechanisms in order to have sessions.
  2. In java servlets, HTTP sessions are tracked using two mechanisms, HTTP cookie (the most commonly used) or URL rewriting (to support browser without cookies or with disabled cookies). Using only cookies is simple, you don't have to do anything special. For URL re-writing, you need to modify all URLs pointing back to your servlets/filters.
  3. Each time you call request.getSession(true), the HttpRequest object will be inspected in order to find a session ID encoded either in a cookie OR/AND in the URL path parameter (what's following a semi-colon). If the session ID cannot be found, a new session will be created by the servlet container (i.e. the server).
  4. The session ID is added to the response as a Cookie. If you want to support URL re-writing also, the links in your HTML documents should be modified using the response.encodeURL() method. Calling request.getSession(false) or simply request.getSession() will return null in the event the session ID is not found or the session ID refers to an invalid session.
  5. There is a single HTTP session by visit, as Java session cookies are not stored permanently in the browser. So sessions object are not shared between clients. Each user has his own private session.
  6. Sessions are destroyed automatically if not used for a given time. The time-out value can be configured in the web.xml file.
  7. A given session can be explicitly invalidated using the invalidate() method.
  8. When people are talking about JSESSIONID, they are referring to the standard name of the HTTP cookie used to do session-tracking in Java.





The servlet container (for example Tomcat) takes care of this utilizing its JSESSIONID.
The story goes like this :

  1. User first logs onto website.
  2. Servlet container sets a COOKIE on the user's browser, storing a UNIQUE jsessionId.
  3. Every time the user hits the website, the JSESSIONID cookie is sent back.
  4. The servlet container uses this to keep track of who is who.
  5. Likewise, this is how it keeps track of the separation of data. Every user has their own bucket of objects uniquely identified by the JSESSIONID.

[Z THINKING IN ENTERPRISE JAVA]

Handling sessions with servlets

HTTP is a “sessionless” protocol, so you cannot tell from one server hit to another if you’ve got the same person repeatedly querying your site, or if it is a completely different person. A great deal of effort has gone into mechanisms that will allow Web developers to track sessions. Companies could not do e-commerce without keeping track of a client and the items they have put into their shopping cart, for example.
There are several methods of session tracking, but the most common method is with persistent “cookies,” which are an integral part of the Internet standards. The HTTP Working Group of the Internet Engineering Task Force has written cookies into the official standard in RFC 2109 (ds.internic.net/rfc/rfc2109.txt or check www.cookiecentral.com).
A cookie is nothing more than a small piece of information sent by a Web server to a browser. The browser stores the cookie on the local disk, and whenever another call is made to the URL that the cookie is associated with, the cookie is quietly sent along with the call, thus providing the desired information back to that server (generally, providing some way that the server can be told that it’s you calling). Clients can, however, turn off the browser’s ability to accept cookies. If your site must track a client who has turned off cookies, then another method of session tracking (URL rewriting or hidden form fields) must be incorporated by hand, since the session tracking capabilities built into the servlet API are designed around cookies.

The Cookie class

The servlet API (version 2.0 and up) provides the Cookie class. This class incorporates all the HTTP header details and allows the setting of various cookie attributes. Using the cookie is simply a matter of adding it to the response object. The constructor takes a cookie name as the first argument and a value as the second. Cookies are added to the response object before you send any content.
Cookie oreo = new Cookie("TIJava", "2002");
res.addCookie(oreo);
Cookies are recovered by calling the getCookies( ) method of the HttpServletRequest object, which returns an array of cookie objects.
Cookie[] cookies = req.getCookies();
You can then call getValue( ) for each cookie, to produce a String containing the cookie contents. In the above example, getValue("TIJava") will produce a String containing “2002.”

The Session class

A session is one or more page requests by a client to a Web site during a defined period of time. If you buy groceries online, for example, you want a session to be confined to the period from when you first add an item to “my shopping cart” to the point where you check out. Each item you add to the shopping cart will result in a new HTTP connection, which has no knowledge of previous connections or items in the shopping cart. To compensate for this lack of information, the mechanics supplied by the cookie specification allow your servlet to perform session tracking.
A servlet Session object lives on the server side of the communication channel; its goal is to capture useful data about this client as the client moves through and interacts with your Web site. This data may be pertinent for the present session, such as items in the shopping cart, or it may be data such as authentication information that was entered when the client first entered your Web site, and which should not have to be reentered during a particular set of transactions.
The Session class of the servlet API uses the Cookie class to do its work. However, all the Session object needs is some kind of unique identifier stored on the client and passed to the server. Web sites may also use the other types of session tracking but these mechanisms will be more difficult to implement as they are not encapsulated into the servlet API (that is, you must write them by hand to deal with the situation when the client has disabled cookies).

Inside the service( ) method, getSession( ) is called for the request object, which returns the Session object associated with this request. The Session object does not travel across the network, but instead it lives on the server and is associated with a client and its requests.
getSession( ) comes in two versions: no parameter, as used here, and getSession(boolean). getSession(true) is equivalent to getSession( ). The only reason for the boolean is to state whether you want the session object created if it is not found. getSession(true) is the most likely call, hence getSession( ).
The Session object, if it is not new, will give us details about the client from previous visits. If the Session object is new then the program will start to gather information about this client’s activities on this visit. Capturing this client information is done through the setAttribute( ) and getAttribute( ) methods of the session object.
java.lang.Object getAttribute(java.lang.String)
void setAttribute(java.lang.String name,
java.lang.Object value)
The Session object uses a simple name-value pairing for loading information. The name is a String, and the value can be any object derived from java.lang.Object. SessionPeek keeps track of how many times the client has been back during this session. This is done with an Integer object named sesspeek.cntr. If the name is not found an Integer is created with value of one, otherwise an Integer is created with the incremented value of the previously held Integer. The new Integer is placed into the Session object. If you use same key in a setAttribute( ) call, then the new object overwrites the old one. The incremented counter is used to display the number of times that the client has visited during this session.
getAttributeNames( ) is related to getAttribute( ) and setAttribute( ); it returns an enumeration of the names of the objects that are bound to the Session object. A while loop in SessionPeek shows this method in action.
You may wonder how long a Session object hangs around. The answer depends on the servlet container you are using; they usually default to 30 minutes (1800 seconds), which is what you should see from the ServletPeek call to getMaxInactiveInterval( ). Tests seem to produce mixed results between servlet containers. Sometimes the Session object can hang around overnight, but I have never seen a case where the Session object disappears in less than the time specified by the inactive interval. You can try this by setting the inactive interval with setMaxInactiveInterval( ) to 5 seconds and see if your Session object hangs around or if it is cleaned up at the appropriate time. This may be an attribute you will want to investigate while choosing a servlet container. 

  •  Wyjaśnij metody podtrzymania sesji w komunikacji w Internecie z wykorzystaniem HTTP. (5pkt)

         Istnieją 3 sposoby na utrzymanie sesji

  • Cookies 
  • Ukryte pola formularza 
  • Przepisywanie URL’a  
  • [Serwlety]
  • Będą używać  cookies jeśli to możliwe
  • Będą przepisywać  URL jeśli nie ma Cookiem
  • Klient wysyła do serwera żądanie. 
    • Gdy sesja się rozpoczyna zostaje przypisane ID. 
    • Dane sesji zapisywane są w pamięci, pliku lub BD. 
    • Serwer wysyła odpowiedź a z nią id sesji (np. set cookie). 
    • Przy kolejnych żądaniach serwer odczytuje ciasteczko. 
    • Ciasteczko jest usuwane, jeśli upłynął czas jego ważności, bądź po wylogowaniu użytkownika.
       
  • Jeśli nie ma włączonych cookies, to serwer przypisuje id sesji do adresu URL



33) Wyjaśnij znaczenie mechanizmu sesji. Podaj podstawowe mechanizmy utrzymywania sesji.
Sesja jest potrzebna, gdy serwer chce śledzić poczynania użytkownika (tzn. jego kolejne żądania):
- Utrzymywanie koszyka zakupów użytkownika
- Zapisywanie informacji o autoryzacji dostępu
-- Sesje są problemem dla serwerów HTTP 
-- Brak mechanizmu sesji HTTP (bezstanowość)
-- Współdzielenie sesji przez wszystkie przeglądarki (jednego typu)
Utrzymywanie sesji.
- Cookies
- Ukryte pola formularza 
- Przepisywanie URL’a 
- Serwlety
-- Będą używać  cookies jeśli to możliwe
-- Będą przepisywać  URL jeśli nie ma cookies 
Każda sesja ma unikalne ID. Gdy sesja się rozpoczyna zostaje przypisane ID. Każde następne „podzapytanie” musi przesyłać ID (przez cookie lub URL)






26) Jaka jest różnica w wywołaniu metod GET i POST ? Podaj przykłady użycia poszczególnych metod.
POST:
Przesłanie danych do zasobu o danym URI, dane w treści żądania
wysyła wszystkie dane z formularza przy pomocy nagłówków http
można przesyłać nieograniczoną ilość informacji
możliwość wysyłania plików na serwer
używany głównie do przesyłania danych z formularza html do skryptu cgi
GET:
Uzyskanie zasobu o danym URI
przesyła informacje do serwera doklejając je do adresu
nadaje się tylko do przesyłania małej ilości informacji, gdyż długość adresów jest ograniczona








  • Wyjaśnij jak zabezpieczyć warstwę prezentacji aplikacji internetowej.
    • sprawdzenie parametrów stron
    • sprawdzenie parametrów w kontekście sekwencji wywołań (bardzo wiele możliwości)
    • weryfikacja parametrów w kontekście wcześniej złożonego żądania
    • usuwanie niebezpiecznych znaków z pól tekstowych itp. – możliwość np. przedłużenia zapytania SQL lub polecenia w Shellu etc.




  • Podaj znane Ci standardy bezpieczeństwa wykorzystywane przez aplikacje internetowe.
    • Uwierzytelnianie i autoryzacja w oparciu o serwery i aplikacje
      • Autentyfikacja jest procesem identyfikacji użytkownika w systemie komputerowym, a następnie weryfikacji jego tożsamości. 
      • Autoryzacja dotyczy nadania użytkownikowi określonych uprawnień.
    • HTPPS
    • HTTP-AUTH
    • HTTP Basic Authentication:
      • Mechanizm ten umożliwia wymuszenie zalogowania się przez klienta na serwerze poprzez podanie loginu użytkownika oraz hasła. 
      • Niestety, login i hasła nie są szyfrowane w   sposób   uniemożliwiający   ich   odczytanie.   
      • Mechanizm   ten   pozwala   jednak   na identyfikację   użytkownika   przy   założeniu,   iż   różni   użytkownicy   dysponują   różnymi identyfikatorami użytkownika w postaci ciągu znaków login.
      • Ww.   sposób   wymaga   konfiguracji   serwera   w   postaci   określenia   użytkowników, którzy mogą się do systemu logować, a w szczególności:
      • Login,   hasło   oraz   rolę   użytkownika   w   postaci   linii   w   pliku   /home/student/apache-tomcat­5.5.28/conf/tomcat­users.xml:
            <?xml version='1.0' encoding='utf­8'?> 
                 <tomcat­users> 
                   <role rolename="tomcat"/>   
                   <role rolename="role1"/> 
                   <role rolename="runtaskuser"/> 
                   <user username="tomcat" password="tomcat" roles="tomcat"/>
                   <user username="both" password="tomcat" roles="tomcat,role1"/>      
                   <user username="role1" password="tomcat" roles="role1"/> 
                   <user username="runtaskuser" password="uio9" roles="runtaskuser"/> 
                  </tomcat­users>