Spezielle Aspekte der Anbindung von Datenbanken im Web.

Slides:



Advertisements
Ähnliche Präsentationen
DI Christian Donner cd (at) donners.com
Advertisements

Object Relational Mapping
Einer der Dienste im Internet
Seminar Internet Technologien SS 98
Apache - PHP - MySQL Apache-PHP-MySQL.
Architektur von Web- Datenbanksystemen. © Prof. T. Kudraß, HTWK Leipzig Schichtenarchitektur Aufteilung einer Web-DB-Anwendung in verschiedene Schichten.
Software Engineering Praktikum SS 2003
Software Engineering Praktikum WS 2002/03
Dynamische Seiten mit Dreamweaver Zugriff auf (mysql) Datenbank mit PHP.
MySQL.
Aufbau des Internets Überblick Prof. Dr. T. Hildebrandt
Basis-Architekturen für Web-Anwendungen
WWW Applikationen Vorlesung Anwendungssysteme. Lernziele: Wie funktioniert das WWW technisch? Welche Basis-Interaktionsmöglichkeiten bietet das WWW? Wie.
Systemüberblick Beispiele: Microsoft Access Oracle Ingres Informix
Bastian Cramer, Universität Paderborn Entwurfsmuster für Webanwendungen Projektgruppe: Generierung von Webanwendungen aus visuellen Spezifikationen.
Tomcat Web-Server installieren
Ruby on Rails im Überblick
Erweiterung B2B Usermanagement / LDAP-Anbindung
FH-Hof Servlets Richard Göbel. FH-Hof Konzept Servlets werden auf der Server-Seite durch ein Formular aufgerufen werten die Eingaben aus einem Formular.
IS: Datenbanken, © Till Hänisch 2000 CREATE TABLE Syntax: CREATE TABLE name ( coldef [, coldef] [, tableconstraints] ) coldef := name type [länge], [[NOT]NULL],
Dynamische Webseiten mit PHP
Information und Technik Nordrhein-Westfalen Single Sign On mit CAS Düsseldorf, Single Sign On für Webanwendungen am Beispiel von CAS.
Datenbankanbindung mit ASP Wilhelm-Schickard-Schule Tübingen
Oracle PL/SQL Server Pages (PSP). © Prof. T. Kudraß, HTWK Leipzig Grundidee: PSP – Internet-Seiten mit dynamischer Präsentation von Inhalten durch Einsatz.
Architektur von Web- Informationssystemen. © Prof. T. Kudraß, HTWK Leipzig Techniken zur DB-Server- Anbindung Client-Seite Java Applet ActiveXPlugInCGISSIServer.
Oracle WebServer - Einführung. © Prof. T. Kudraß, HTWK Leipzig Oracle Web Application Server HTML WebServer ® File system Static HTML PL/SQL Packages.
Datenbank-Zugriffsschnittstellen am Beispiel von Oracle und PL/SQL.
Anwendungen. © Prof. T. Kudraß, HTWK Leipzig Historie des WWW Grundlage Internet – Entwickelt Ende der 60er Jahre vom US-Militär (ARPA-Net) – Technische.
Architektur von Web- Datenbanksystemen. © Prof. T. Kudraß, HTWK Leipzig 2 Schichtenarchitektur Aufteilung einer Web-DB-Anwendung in verschiedene Schichten.
Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.
Java Server Pages Implementierung eines Web-Service-Clients Pea 13: Maik Opitz, Martin Melle, Philipp Hake.
Technik Gestaltung Navigation Daten. Übersicht Client Webbrowser InternetServer.
Datenintegrität Referentielle Integrität create table
Oracle interMedia Image
Seminarvotrag: PHP Von Stefan Niemczyk.
Einführung MySQL mit PHP
Seite Common Gateway Interface. Konzepte. Übersicht 1Einleitung 2Was ist CGI? 3Wozu wird CGI verwendet? 4Geschichtlicher Überblick 5Grundvoraussetzungen.
YouTube5 .0 Projektpräsentation
... und alles was dazugehört
Einführung Servlets/JSPs
Internet-Datenbanken und ASP Eine Einführung von J.Sommer & A.Vortisch.
SQL PHP und MySQL Referat von Katharina Stracke und Carina Berning
Learning By Doing Thema 1: Dynamische Webseiten und Online Datenbanken (Jarka Arnold) Thema 2: Simulationen, Sound, Schnittstellen (Aegidius Plüss) Thema.
PHP und MYSQL am Organisatorisches Der komplette Kurs im Schnelldurchgang Bewertung von wichtig und unwichtig Historisch Kulturwissenschaftliche.
UNIVERSITÄT ZU KÖLN HISTORISCH-KULTURWISSENSCHAFTLICHE INFORMATIONSVERARBEITUNG REUSABLE - CONTENT SS 2013 MARIA WAGNER ReST.
Grundlagen: Client-Server-Modell
Entwicklung verteilter Anwendungen II, SS 13 Prof. Dr. Herrad Schmidt SS 13 Kapitel 4 Folie 2 REST Web Services (1)
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 8 Folie 2 ASP.NET Zustandsverwaltung
Folgendes kann missbraucht werden: formulare unverschlüsselte login-informationen ungeschützte includes SQL-injection reto ambühler
Servlets Servlets und relevantes API Servlets & SQL via JDBC Implementierungs - Spezifika Architektur Überblick Vertikaler Prototyp / Spezifikation.
Einführung in Datenbankmodellierung und SQL
PHP Basic.
Webseiten mit PHP, SQL, XML und Webservices Anhand praktischer Beispiele.
Hacking InfoPoint Jörg Wüthrich Infopoint - Hacking - Jörg Wüthrich 2/26 Inhalte Rund um das Thema Hacking Angriffs-Techniken Session.
Mag. Andreas Starzer weloveIT – EDV Dienstleistungen
Structured Query Language
Datenbanken im Web 1.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Dynamische Seiten 13. Juli 2009 Norbert Winnige „Datenbanken in den Geisteswissenschaften“
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Cookies Kekse? Internet Gefahr?.
Tutorium zur LV Online Research Ein Computerprogramm tut, was Du schreibst, nicht was Du willst.
Datenbanken erstellen mit PostgreSQL
1 Servlets Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container.
© 2003, Rudolf Jansen Einsatz der XML-Features der Oracle 9i DB zur Systemintegration Rudolf Jansen Freiberuflicher Entwickler und Autor
Rechen- und Kommunikationszentrum (RZ) Sicherheitsorientierte Webentwicklung am Beispiel der Matse-Dienste Jan-Frederic Janssen.
Sicherheit in Webanwendungen „CrossSite“, „Session“ und „SQL“ Angriffstechniken und Abwehrmaßnahmen Mario Klump.
GUI lokaler Speicher Datenbank
Es ist noch kein Datensatz vorhanden
 Präsentation transkript:

Spezielle Aspekte der Anbindung von Datenbanken im Web

© Prof. T. Kudraß, HTWK Leipzig Überblick: Spezielle Aspekte der Datenbankanbindung Sitzungsverfolgung – Authentifizierung durch Webserver – Versteckte Felder in Formularen – Umschreiben von URLs – Cookies – Sitzungsobjekte Skalierbarkeit und Wartbarkeit – Trennung von Anwendungs- und Präsentationslogik – Komponententechnologie (Java Beans) – Gestaltung des GUI bei wachsenden Datenmengen Sicherheit – Zugriffssicherheit – Übertragungssicherheit

© Prof. T. Kudraß, HTWK Leipzig Problem: Sitzungsverfolgung HTTP zustandsloses Protokoll vs. Zuordnen mehrerer Interaktionen zu Benutzern Anwendungen: – Virtueller Warenkorb bei E-Shops – Erstellung von Zugriffsstatistiken zur Analyse des Benutzerverhaltens Zuordnung mehrerer Anfragen zu einem Web-Client – Erfordert eindeutige Identifikation des Client (Session ID) – Verschlüsselung der Session ID möglich Methoden: – Authentifizierung durch Webserver – Versteckte Felder in Formularen – Umschreiben von URLs – Cookies – Sitzungsobjekte (möglich bei PHP, JSP)

© Prof. T. Kudraß, HTWK Leipzig Authentifizierung durch Webserver Benutzerliste (mit Passwörtern) im Webserver verwaltet Einschränkung der Angebote für Benutzer durch Zuordnung von Ressourcen zu berechtigten Usern Dateien –.htaccess : Zugang zu bestimmten Bereichen für identifizierte Benutzer auf Webserver –.htgroup und.htpasswd : Benutzernamen und Passwörter Benutzername bei jedem Request gesendet (ermöglicht Zuordnung) Nachteil: nur anwendbar für angemeldete Benutzer im Web Anforderung: anonyme Sitzungsverfolgung (ohne explizite Sitzungs- verfolgung)

© Prof. T. Kudraß, HTWK Leipzig Versteckte Felder in Formularen Versteckte Formular-Felder (Hidden Fields): Nicht im Browser angezeigt, aber an den Server gesendet Bei erster Anfrage: Serverseitige Erzeugung einer eindeutigen Sitzungskennung Zurücksendung an den Client Bei weiteren Anfragen Bei weiteren Anfragen bzw. bei Antworten: Feld mit Sitzungskennung immer mit übertragen Vorteile: – Anonym (d.h. keine explizite Anmeldung erforderlich) – Keine Speicherung im Server erforderlich Nachteile: – Nur im Zusammenhang mit dynamisch erzeugten Dokumenten einsetzbar – Sitzungskennung kann auf Clientseite manuell verändert werden

© Prof. T. Kudraß, HTWK Leipzig Umschreiben von URLs (URL Rewriting) Generierte Sitzungskennung wird bei jeder Anfrage an die URL dynamisch angehängt Verschiedene Möglichkeiten für URL Rewrite Anfügen einer zusätzliche Pfadangabe - Modifizieren der URL - Anhängen der Sitzungskennung als Parameter Vorteil – Anonym / unabhängig von Formularen – Erfordert keine Ressourcen auf Client- oder Serverseite Nachteil – Sitzungsschlüssel in der URL sichtbar (Gefahr der Manipulierbarkeit)

© Prof. T. Kudraß, HTWK Leipzig Tabelle SESSION_VALUES NameNull?Typ SESSION_IDNOT NULLVARCHAR2(255) SESSION_MATRIKELNUMBER(7) SESSION_LASTCHECKTIMESTAMP(6) SESSION_VALUESVARCHAR2(2000)

© Prof. T. Kudraß, HTWK Leipzig Beispielprogramm mit Session- Tabelle -- Passwort auslesen SELECT stud_passwort INTO stud_pwd FROM studenten WHERE stud_matrikel=matrikel; -- ¨Überprüfe ausgelesenes mit übergebenem Passwort IF stud_pwd!=pwd THEN -- Fehlerseite anzeigen psp_sess_error; ELSE sess_id:= to_char(sysdate, DDMMYYHH24MISS)||matrikel; -- nicht gelöschte Sessions desselben Studenten löschen DELETE session_values WHERE session_matrikel = matrikel; -- Einfügen des neuen Datensatzes INSERT INTO session_values VALUES(sess_id, matrikel,SYSTIMESTAMP, null); -- Aufruf der Hauptseite mit ¨Ubergabe der Session-ID psp_sess_form(sess_id); END IF;

© Prof. T. Kudraß, HTWK Leipzig Prozedur SessionCheck -- Lesen des letzten Checks aus der Tabelle SELECT session_matrikel, session_lastcheck INTO matrikel, lastcheck FROM session_values WHERE session_id = sess_id; -- Aktuelle Zeit ermitteln SELECT SYSTIMESTAMP INTO current_time FROM DUAL; -- Ermitteln der Differenz der beiden Zeiten SELECT substr((current_time-lastcheck), instr((current_time-lastcheck), )+4,2), substr((current_time-lastcheck), instr((current_time-lastcheck), )+1,2), trunc(to_number(substr((current_time-lastcheck),1, instr(current_time-lastcheck, )))), trunc(to_number(substr((current_time-lastcheck),1, instr(current_time-lastcheck, )))/7) INTO minuten, stunden, tage, wochen FROM DUAL;

© Prof. T. Kudraß, HTWK Leipzig Prozedur SessionCheck (Forts.) -- Wenn Differenz kleiner als 16 Minuten, ist Session gültig IF (wochen=0 AND tage=0 AND stunden=0 AND minuten<16) THEN -- aktuellen Zeitstempel in Sitzungstabelle einfügen UPDATE session_values SET session_lastcheck = SYSTIMESTAMP WHERE session_id = sess_id; ELSE -- Sitzung ist ung¨ultig, l¨osche Datensatz DELETE session_values WHERE session_id = sess_id; -- Anzeigen, dass Session abgelaufen ist RAISE err_timeout; END IF; -- Matrikelnummer zurückgeben RETURN matrikel; Aufruf der Prozedur Sessioncheck in jeder Seite, die vom Studenten aufgerufen wird <% -- Sessioncheck matrikel := psp_sessioncheck(sess_id); IF matrikel<0 THEN return; END IF; %>

© Prof. T. Kudraß, HTWK Leipzig HTTP-Cookie Unabhängig vom eigentlichen HTML-Dokument Bestandteil der Meta-Information zu einer HTML-Seite – zwischen Webserver und Browser ausgetauscht – im Browser gespeichert (temporär oder persistent in einer Datei) Erstellen eines Cookie: Set-Cookie-Anweisung im HTTP-Header bei Server Response Set-Cookie: NAME=VALUE; expires=DATE; path=PATH; domain=DOMAIN_NAME; secure NAME=VALUE : Name-Wert-Paar mit Namen des Cookies und Wert, der gespeichert werden soll Expires : Zeitangabe in Sekunden, innerhalb der das Cookie gültig ist Domain : Name der Internet-Domain, in der das Cookie erzeugt wurde Path : Unterpfad für die Domain, in der das Cookie gültig ist Secure : Wenn gesetzt, wird das Cookies nur über HTTPS-Verbindung übertragen

© Prof. T. Kudraß, HTWK Leipzig HTTP-Cookie Einschränkungen: – Maximale Größe 4 KB – Maximale Anzahl von Cookies im Browser des Clients 30 – Pro Server bzw. Domäne max. 20 Cookies erlaubt – Cookies nur von der Domäne lesbar, von der sie erzeugt wurden Löschen: – Setzen mit leerem Wert (kein explizites Löschen) Speicherung von Sitzungsdaten – IP-Adresse des HTTP-Client reicht nicht aus – neben Session-ID weitere Statusinformationen – Serverseitige Speicherung (DB) vs. Speicherung mehrerer Werte in Cookies

© Prof. T. Kudraß, HTWK Leipzig HTTP-Cookie Bewertung Vorteile: – Automatische Unterstützung durch den Browser – Einsatz unanhängig von der Kodierung in einer HTML-Seite – Bei gleichzeitiger Verwendung mehrerer Cookies Speicherung vieler Informationen möglich – Anwendung bei E-Shops: Speichern von Waren- korbinhalten (Session ID) Nachteile – Nicht von allen Browsern unterstützt – Benutzer kann Cookies abschalten bzw. verweigern

© Prof. T. Kudraß, HTWK Leipzig Cookies in PHP Methode setcookie zum Setzen eines Cookies Syntax bool setcookie ( string name [,string value [. Int expire [, string path [, string domain [, int secure]]]]]) Beispiel: Zuweisung der Matrikel-Nr. als Session-ID setcookie ($sess_id, $matrikel, time()+3600, /); Auslesen eines Cookies $sess_id = $_GET["sess_id"]; if (isset($_COOKIE[$sess_id])) { $matrikel = $_COOKIE[$sess_id];

© Prof. T. Kudraß, HTWK Leipzig Cookies in PSP Package owa_cookies mit Datentyp cookie type cookie is RECORD ( name varchar2(4000), vals vc_arr, num_vals integer); Senden eines Cookies Auslesen eines Cookies owa_cookie.send( name in varchar2, value in varchar2, expires in date DEFAULT NULL, path in varchar2 DEFAULT NULL, domain in varchar2 DEFAULT NULL, secure in varchar2 DEFAULT NULL);

© Prof. T. Kudraß, HTWK Leipzig Cookies in PSP (Forts.) Erzeugung eines Cookies mit dem Namen einer Session-ID und zugehöriger Matrikel-Nr OWA_UTIL.MIME_HEADER(text/html, FALSE); OWA_COOKIE.send(sid, matrikel, Sysdate + 1); OWA_UTIL.HTTP_HEADER_CLOSE; Prüfe Existenz eine Cookies Beispiel owa_cookie.get(name in varchar2) return cookie; cookie := owa_cookie.get(sid); if (cookie.num_vals >0) THEN matr := cookie.vals(1); ELSE return; END IF;

© Prof. T. Kudraß, HTWK Leipzig Cookies in JSP / Servlets Klasse Cookie zum Setzen und Lesen von Cookie-Werten (aus dem Paket javax.servlet.http) Erzeugung eines Cookies: neues Objekt der Klasse Cookie mit einem Name- Wert-Paar sess_id = new Integer((request.getRemoteAddr()+ matrikel).hashCode()).toString(); Cookie cookie = new Cookie(sess_id, new Integer(matrikel).toString()); // Setze Lebensdauer in Sekunden Cookie.setMaxAge(3600*24) Einfügen des Cookie-Objeks in den HTTP-Header Response.addCookie(cookie) Cookie[] cookies = request.getCookies(); for (int i=0;i<cookies.length;i++) { if (cookies[i].getName().equalsIgnoreCase(sess_id)) { matrikel = (new Integer(cookies[i].getValue())).intValue(); break; } Lesen der Werte eines Cookies

© Prof. T. Kudraß, HTWK Leipzig Sessions in PHP Session-Objekte Alternative zu Cookies erzeugte Session-ID im Cookies speichern oder innerhalb URL übertragen session_start(); $matrikel = $_POST["matrikel"]; if (!session_is_registered ("matrikel")) { session_register ("matrikel"); } globales Array $_SESSION zur Speicherung von Werten (Speicherung in DB möglich) - Alternative zu Cookies Beispiel: Speicherung der Variablen Matrikel in der Session Zugriff auf bereits erstellte Sitzung <?php session_start(); if (session_is_registered ("matrikel")) { $matrikel = $_SESSION[matrikel]; } ?>

© Prof. T. Kudraß, HTWK Leipzig Sessions in Servlets Sitzungsobjekte speichern Informationen zu einer Sitzung im Webserver Realisierung: HttpSession -Interface des javax.servlet.http -Pakets HttpSession session = request.getSession(true) public void setAttribute(String name, Object wert) public Object getAttribute(String name) void removeAttribute(String name) public Enumeration getAttribute() nur Übertragung der Sitzungskennung: über Cookies oder URL-Rewriting (Methode encodeURL ) – abhängig ob Client Cookies senden kann Methoden zur Speicherung und zum Zugriff auf Sitzungsobjekte Gestartete Sitzung durch Aufruf der invalidate() -Methode der Klasse HttpSession beenden Timeout-Werte setzen zum automatischen Beenden der Sitzung im Server mittels setMaxInactiveInterval(int sekunden)

© Prof. T. Kudraß, HTWK Leipzig Sessions in Servlets – Beispiel Erzeugen einer Sitzung in der doGet()-Methode und Festlegung Timeout // neue Session erstellen, wenn noch keine existiert HttpSession session = request.getSession(true); // Sessiongültigkeit auf 15 Minuten setzen session.setMaxInactiveInterval(60*15); matrikel = new Integer(request.getParameter("matrikel")).intValue(); pwd = request.getParameter("pwd"); Passwort für Matrikelnummer ermitteln und mit Passwort der Anfrage vergleichen Bei Übereinstimmung Werte für Studenten im Sitzungsobjekt speichern Übergabeparameter aus Request-Objekt lesen pstmt = conn.prepareStatement( "SELECT stud_name, stud_vorname, stud_passwort "+ "FROM studenten "+ "WHERE stud_matrikel=?"); // Matrikelnummer an Parameter binden pstmt.setInt(1,matrikel); rset = pstmt.executeQuery();

© Prof. T. Kudraß, HTWK Leipzig Sessions in Servlets – Beispiel (2) String pwd_db=null; // Passwort aus Resultset lesen if (rset.next()) { pwd_db = rset.getString("stud_passwort"); } //Vergleich der Passwörter if (pwd_db != null && pwd.equals(pwd_db)) { pwd_korrekt = true; vorname = rset.getString("stud_vorname"); name = rset.getString("stud_name"); // Speicherung der Werte im Sessionobjekt mit setAttribute session.setAttribute("vorname", vorname); session.setAttribute("name", name); session.setAttribute("matrikel",new Integer(matrikel)); }

© Prof. T. Kudraß, HTWK Leipzig Sessions in Servlets – Beispiel (3) Zugriff auf das Sitzungsobjekt mit seinen gespeicherten Werten möglich // Session anfordern HttpSession session = request.getSession(true); // Sessiong¨ultigkeit erneuern session.setMaxInactiveInterval(60*15); // Lesen der Matrikelnummer mit getAttribute if (session.getAttribute("matrikel")!=null) matrikel = ((Integer)session.getAttribute("matrikel")).intValue(); else matrikel = -1; Funktionen auch in JSP anwendbar Implementierung von Sessions in JSP weniger aufwendig, da Seiten, die an einer Session teilnehmen sollen, über das session-Attribute hinzugefügt werden können Zugriff auf das implizite HttpSession-Objekt möglich (setAttribute, getAttribute) Sparsamer Umgang mit Ressourcen im Webserver Timeout verwenden!

© Prof. T. Kudraß, HTWK Leipzig Skalierbarkeit und Wartbarkeit Weiterentwicklung von Web-Anwendungen bei neuen Anforderungen Wachsende Anzahl von Benutzern und Anfragen Wartbarkeit des Codes Verschiedene Rollen: Webdesigner, Anwendungs- programmierer Trennung Anwendungs- und Präsentationslogik (vgl. 3- Schichten-Architektur) – reine HTML-Dateien im Webserver speichern – PHP: Einbindung zusätzlicher Dateien mittels include()- oder require()-Methoden (darin enthalten: HTML-freie Funktionen) – PSP: Include-Dateien (bei Übersetzung) – Servlets: Klassen (für Anwendungslogik) Flexible Präsentation (Nutzung XML-Technologie)

© Prof. T. Kudraß, HTWK Leipzig Trennung von Anwendungs- und Präsentationslogik in PSP Datenbanklogik in PL/SQL Prozeduren, die unabhängig von anderen PSP-Dateien in der Datenbank gehalten werden Beispiel: Wiederverwendung von Seitenköpfen durch Prozedur html_header [...] <link rel="STYLESHEET" type="text/css" href="/stylesheets/STYLE.CSS">

© Prof. T. Kudraß, HTWK Leipzig JSP und Java Beans Auslagerung von Logik (z.B. Kommunikation mit der DB) in Java Beans Beispiel-Szenario: Login eines Benutzers und Anzeige der eingeschriebenen Kurse StudentBean: Ausgabe des Namens des angemeldeten Studenten KurslistBean: Liste der vom Studenten gewählten Kurse

© Prof. T. Kudraß, HTWK Leipzig Beispiel: StudentBean Klasse StudentBean stellt Methoden zum Öffnen und Schließen der DB zur Verfügung public void valueBound(HttpSessionBindingEvent e) { try { // Herstellung einer Datenbankverbindung DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); conn = DriverManager.getConnection(url, "username", "password"); } catch (SQLException ex) { } public void valueUnbound(HttpSessionBindingEvent e) { try { // Schließen der Datenbankverbindung conn.close(); } catch (SQLException ex) { // Fehlerbehandlung }

© Prof. T. Kudraß, HTWK Leipzig Beispiel: StudentBean (2) Initialisierung der Bean für einen bestimmten Studenten erfordert Übergabe der Matrikel-Nr. // private Variable, auf die über public Methoden zugegriffen wird private int matrikel = -1; public int getMatrikel() { return matrikel; } public void setMatrikel(int matrikel) { this.matrikel = matrikel; try { pstmt = conn.prepareStatement("SELECT stud_name, stud_vorname "+ "FROM studenten "+ "WHERE stud_matrikel=?"); pstmt.setInt(1,matrikel); // Query ausführen und Ergebnis zuweisen rset = pstmt.executeQuery(); // Resultset auslesen if (rset.next()) { vorname = rset.getString("stud_vorname"); name = rset.getString("stud_name"); } [...]

© Prof. T. Kudraß, HTWK Leipzig Beispiel: StudentBean (3) private String name=""; private String vorname=""; public String getName() { return name; } public String getVorname() { return vorname; } Daten des Studenten (Name, Vorname) in privaten Variablen get-Methoden zum Lesen Methode validPasswort(String pwd) : Test, ob übergebener String mit dem Passwort des Studenten in Studententabelle übereinstimmt (Quellcode siehe Beispiel-Software)

© Prof. T. Kudraß, HTWK Leipzig Beispiel: Aufruf StudentBean <jsp:useBean id="student" scope="session" class="mypackage1.StudentBean"/> Einbinden einer Java Bean in eine JSP mittels JSP-Tag jsp:useBean – Klasse des Bean – Gültigkeitsbereich (Scope) – ID, über die das Bean auf der ganzen Seite angesprochen werden kann Automatischer Aufruf der valueBound -Methode des Beans und Herstellung der DB-Verbindung Initialisierung des Beans mit der Matrikel-Nr. durch Aufruf von setMatrikel Student.setMatrikel(matrikel); Abfrage der Studenteninformation und Belegung der privaten Variablen für Vor- und Nachname Zugriff auf diese Daten über getProperty -Tag auf die get-Methoden Hallo

© Prof. T. Kudraß, HTWK Leipzig Beispiel: KurslistBean KurslistBean dient der Ausgabe einer Tabelle mit allen Kursen eines Studenten enthält Methode setMatrikel zur Initialisierung des Bean mit einer Matrikel-Nr. public void setMatrikel(int matrikel) { [...] pstmt = conn.prepareStatement("SELECT kurs_id, kurs_name "+ "FROM kurse LEFT JOIN teilnehmer "+ "ON kurs_id = teiln_kurs_id_fk "+ "WHERE teiln_smatrikel_fk = ?"); // Matrikel an Parameter binden pstmt.setInt(1,matrikel); rset = pstmt.executeQuery(); // Ausgabestring für Tabelle ausgabe = ""; while (rset.next()) { ausgabe += " "+ " "+ "<a href=jsp_session_details.jsp?kurs_id="+ rset.getString("Kurs_ID")+">"+ rset.getString("Kurs_Name")+" "+ " "; } [...]

© Prof. T. Kudraß, HTWK Leipzig Beispiel: KurslistBean (Forts.) für Ausgabezeichenkette wird eine get-Methode erstellt, die den String zurück- liefert durch Einbinden mittels jsp:getProperty Tag kann die getAusgabe()- Methode aufgerufen werden Ausgabe der Tabellenzeilen innerhalb JSP-Datei Sie sind eingeschrieben in: Model-View-Controller (unabhängig von verwendeter Technik) 1.Model: Anwendungslogik mit Kommunikation zur Datenbank 2.View: Benutzerschnittstellen mit llen Ausgaben 3.Controller: Weiterleiten von Anfragen des Clients an die entsprechenden Objekte

© Prof. T. Kudraß, HTWK Leipzig Skalierbarkeit des User Interface bei wachsendem Datenvolumen Entwurf des GUI muß späteres Datenaufkommen beeachten Verfügbare Objekte – Combo-Boxen, die dynamisch mit Daten aus der Datenbank gefüllt werden werdne können – Checkboxen oder Radio Buttons für die Auswahl bestimmter Werte – Tabellen für die Darstellung von Datenmengen – Listen für die Auswahl von Werten (in Verbindung mit Links)

© Prof. T. Kudraß, HTWK Leipzig Bewertung der GUI-Elemente Checkboxen / Radion Buttons – Nur für die Darstellung weniger Daten (fehlender Scrollbalken) – Checkboxen sehr gut geeignet für variable Anzahl anzuzeigender Felder (Spalten) Tabellen – strukturierte Auflistung von Datensätzen – für viele Sätze geeignet – einige Elemente können mit Hyperlinks versehen werden Comboboxen – Auswahlbox für wenige Werte – bei alphabetischer Ordnung auch für viele Auswahlwerte – Vorteil: geringer Platzbedarf, da immer nur ein Wert sichtbar Auswahllisten – Syntax wie Comboboxen, aber Anzeige mehrer Werte – Darstellung vieler Werte möglich (Scrollbar)

© Prof. T. Kudraß, HTWK Leipzig Beispiel zur Verwendung von Comboboxen Geeignet für Darstellung von Master-Detail-Beziehungen – auch bei größerem Datenaufkommen Auch Selektion mit mehreren Werten möglich Beispiel: Auswahl eine Kursleiters Auswahl eines Kurses des gewählten Kursleiters Anzeige der Teilnehmer des Kurses

© Prof. T. Kudraß, HTWK Leipzig Zugriffssicherheit Benutzgruppen in Beispiel-Anwendung – anonyme Benutzer (ohne Anmeldung): Informationen über Kurse – Studenten (angemeldete Benutzer): Einschreibungen in Kurse – Kursleiter und Professoren: Pflege der Kursdaten – Administrator: neue Kursleiter, Einschreibezeiträume, Zugriff auf sämtliche Daten Authentifizierung – mittels Webserver – Umsetzung innerhalb der Anwendung

© Prof. T. Kudraß, HTWK Leipzig Umsetzung im Webserver Verzeichnisse oder einzelne Dokumente nur für bestimmte Benutzer zugänglich machen Mehrere Authentifizierungs-Schemata in HTTP-Spezifikation, i.allg. BASIC: Bereiche (Realms), Gruppen, Benutzer Speicherung der Informationen in Dateien im Webserver –.htaccess: geschützte Bereiche der Webanwendung –.htgroup und.htpasswd: verwaltet Benutzernamen und Passwörter Keine dynamische Registrierung von Benutzern möglich

© Prof. T. Kudraß, HTWK Leipzig Umsetzung im Programm erfordert Umsetzung eines Session-Konzepts Benutzerkennung bei jeder Anfrage übertragen oder innerhalb der Anwendung persistent halten Unterscheidung der Benutzergruppen DB-seitig unterstützen Bei Seitenaufruf: Session noch aktiv? Benutzer in berechtigter Gruppe? Beispiel (PSP): Benutzeranmeldung und Kontrolle der Berechtigung für Kursleiter sid:= to_char(sysdate, DDMMYYHH24MISS)||matrikel; -- erzeuge Cookie mit SessionID und ID OWA_UTIL.MIME_HEADER(text/html, FALSE); OWA_COOKIE.send(sid, id, Sysdate + 1); OWA_UTIL.HTTP_HEADER_CLOSE;

© Prof. T. Kudraß, HTWK Leipzig Umsetzung im Programm (Beispiel) Mit der aus Cookie gewonnen ID aus DB ermitteln, ob Benutzer als Kursleiter berechtigt ist cookie := owa_cookie.get(this_sid); IF (cookie.num_vals >0) THEN id := cookie.vals(1); SELECT COUNT(kl_id) INTO anzahl FROM kursleiter WHERE kl_id=id; IF (anzahl=0) return; ELSE return; END IF;

© Prof. T. Kudraß, HTWK Leipzig Authenticate Header (in PHP) <?php function authenticate() { header("WWW-Authenticate: Basic realm=\"Geschuetzter Bereich\""); header("HTTP/ Unauthorized"); # Text der bei Scheitern oder Abbruch erscheint echo "Anmeldung gescheitert: Benutzername und Passwort erforderlich"; exit; } if(!isset($_SERVER['PHP_AUTH_USER'])) { authenticate(); } else { # Verbindung zur Datenbank herstellen # username und passwort setzen $conn = ocilogon("username","passwort","sample") or die("Keine Verbindung zum Datenbank-Server!!!"); # Matrikel ist Nutzername $matrikel=$_SERVER['PHP_AUTH_USER'];

© Prof. T. Kudraß, HTWK Leipzig Authenticate Header (Forts.) # Statement für Abfrage erstellen $stmt = OCIParse($conn,"SELECT * ". "FROM Studenten ". "WHERE Stud_Matrikel=".$matrikel. " AND Stud_Passwort='".$_SERVER['PHP_AUTH_PW']."'"); # Abfrage ausführen ociexecute($stmt); # Anzahl der Ergebnisdatensätze holen $anzahl = ocifetchstatement($stmt, $arr_bestellung); # Ressource freigeben und Verbindung zur Datenbank schließen ocifreestatement($stmt); ocilogoff($conn); # Wenn kein Datensatz in Tabelle gefunden, # erneut Authentifizierung starten if($anzahl==0) { authenticate(); } else echo "Authentifizierung erfolgreich."; } ?>

© Prof. T. Kudraß, HTWK Leipzig Verschlüsselung Verschiedene Pakete und Algorithmen für Speicherung vertraulicher Daten in verschlüsselter Form Beispiel: PL/SQL Package DBMS_OBFUSCATION_TOOLKIT – Nutzt symmetrische Verfahren (d.h. gleicher Schlüssel für Ver- und Entschlüsselung) – Verfahren DES (Data Encryption Standard) Triple DES Algorithmus – 2 Funktionen zur Ver- bzw. Entschlüsselung (VARCHAR- oder RAW- Parameter) Verschlüsselung im Server – Verhindere unbefugte SELECT-Zugriffe – Übertragung über ein sicheres Protokoll Weitere Option: Speicherung des Schlüssels im Dateisystem des Servers

© Prof. T. Kudraß, HTWK Leipzig Beispiel-Prozedur encrypt CREATE OR REPLACE PROCEDURE encrypt (matrikel number, passwort varchar2) IS eingabe_string VARCHAR2(24); -- Schlüssel zur Vereinfachung festgelegt, sollte -- aus Datenbank oder Datei gelesen werden schluessel VARCHAR(8) := 'schluess'; encrypted_string VARCHAR2(2048); BEGIN -- Auffüllen des Passworts auf 24 Zeichen eingabe_string := rpad (passwort, 24); dbms_obfuscation_toolkit.DESEncrypt( input_string => eingabe_string, key_string => schluessel, encrypted_string => encrypted_string); UPDATE studenten SET stud_passwort_encrypt = encrypted_string WHERE stud_matrikel = matrikel; END;

© Prof. T. Kudraß, HTWK Leipzig Beispiel-Prozedur decrypt CREATE OR REPLACE PROCEDURE decrypt (matrikel IN NUMBER, decrypted_string OUT VARCHAR2) IS -- Schlüssel zur Vereinfachung festgelegt, sollte -- aus Datenbank oder Datei gelesen werden schluessel VARCHAR(8) := 'schluess'; encrypted_string VARCHAR2(24); BEGIN -- Lesen des verschlüsselten Passworts aus Tabelle SELECT stud_passwort_encrypt INTO encrypted_string FROM studenten WHERE stud_matrikel = matrikel; --Entschlüsselung dbms_obfuscation_toolkit.DESDecrypt( input_string => encrypted_string, key_string => schluessel, decrypted_string => decrypted_string); -- aufgefüllte Leerzeichen entfernen decrypted_string := rtrim(decrypted_string); END;

© Prof. T. Kudraß, HTWK Leipzig Anwendung der Ver- und Entschlüsselung Verschlüsselung beim Eintragen der Werte für einen Studenten Ermittlung des verschlüsselten Passworts für übergebene Matrikel-Nr Aktualisiere Datensatz durch encrypt-Prozedur -- Eintragen der Studentenwerte INSERT INTO studenten (stud_matrikel, stud_name, stud_vorname, stud_ , stud_gebdat, stud_studiengang) VALUES (stud_matrikel, stud_name, stud_vorname, stud_ , stud_gebdat, stud_studiengang); -- Aufruf der Verschlüsselungsprozedur encrypt(stud_matrikel, stud_passwort); Einloggen mit Eingabe Passwort Vergleiche mit gespeichertem Passwort -- verschlüsseltes Passwort lesen decrypt(matrikel, stud_pwd);

© Prof. T. Kudraß, HTWK Leipzig Übertragungssicherheit Vertrauliche Daten bei Übertragung vom Client zum Server und zurück schützen Protokoll HTTPS (S = Secure) SSL (Secure Socket Layer) zur Verschlüsselung - ein Protokoll in der Transportschicht von TCP/IP Oracle unterstützt HTTPS durch den integrierten Apache HTTP-Server URLs, die verschlüsselte Verbindung nutzen mit Präfix SSL-Handshake-Protokoll zum Aufbau einer gesicherten Verbindung

© Prof. T. Kudraß, HTWK Leipzig Verbindungsaufbau über HTTPS 1. Client sendet Verbindungsanfrage an Server und übermittelt, welche kryptographischen Verfahren für die Verschlüsselung unterstützt werden 2. Server wählt Verfahren aus und generiert öffentlichen und privaten Schlüssel Zurücksenden des öffentlichen Schlüssels mit einem Zertifikat zur Authentifizierung des Servers 3. Client generiert Sitzungsschlüssel und verschlüsselt diesen mit öffentlichem Schlüssel Zurücksenden des verschlüsselten Sitzungsschlüssels mit verschlüsselten Testnachrichten an den Server 4. Server entschlüsselt Sitzungsschlüssel mit seinem privaten Schlüssel und kann damit auch die Testnachrichten dechiffrieren Zuücksenden der entschlüsselten Testnachricht an den Client als Bestätigung für korrekte Übertragung des Schlüssels