46
Spezielle Aspekte der Anbindung von Datenbanken im Web

Spezielle Aspekte der Anbindung von Datenbanken im Web

Embed Size (px)

Citation preview

Page 1: Spezielle Aspekte der Anbindung von Datenbanken im Web

Spezielle Aspekte der Anbindung von Datenbanken im Web

Page 2: 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

Page 3: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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)

Page 4: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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)

Page 5: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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

<form><input type="hidden" name="sessionID" value="1ggj534"></form>

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

Page 6: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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

http://url.de/test/1ggj534

http://url.de/test?sessionID=1ggj5341ggj534

http://url.de/test;$ID$1ggj534

- 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)

Page 7: Spezielle Aspekte der Anbindung von Datenbanken im Web

© Prof. T. Kudraß, HTWK Leipzig

Tabelle SESSION_VALUES

Name Null? Typ

SESSION_ID NOT NULL VARCHAR2(255)

SESSION_MATRIKEL NUMBER(7)

SESSION_LASTCHECK TIMESTAMP(6)

SESSION_VALUES VARCHAR2(2000)

Page 8: Spezielle Aspekte der Anbindung von Datenbanken im Web

© Prof. T. Kudraß, HTWK Leipzig

Beispielprogramm mit Session-Tabelle

-- Passwort auslesenSELECT stud_passwortINTO stud_pwdFROM studentenWHERE stud_matrikel=matrikel;-- ¨Überprüfe ausgelesenes mit übergebenem PasswortIF 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;

Page 9: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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 ZeitenSELECT 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;

Page 10: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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ückgebenRETURN 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;%>

Page 11: Spezielle Aspekte der Anbindung von Datenbanken im Web

© Prof. T. Kudraß, HTWK Leipzig

HTTP-Cookie

Unabhängig vom eigentlichen HTML-DokumentBestandteil 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 istDomain: Name der Internet-Domain, in der das Cookie erzeugt wurdePath: Unterpfad für die Domain, in der das Cookie gültig istSecure: Wenn gesetzt, wird das Cookies nur über HTTPS-Verbindung

übertragen

Page 12: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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

Page 13: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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

Page 14: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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];

Page 15: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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);

Page 16: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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;

Page 17: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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 SekundenCookie.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

Page 18: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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’]; }?>

Page 19: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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)

Page 20: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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 existiertHttpSession session = request.getSession(true);// Sessiongültigkeit auf 15 Minuten setzensession.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 bindenpstmt.setInt(1,matrikel);rset = pstmt.executeQuery();

Page 21: Spezielle Aspekte der Anbindung von Datenbanken im Web

© Prof. T. Kudraß, HTWK Leipzig

Sessions in Servlets – Beispiel (2)

String pwd_db=null;// Passwort aus Resultset lesenif (rset.next()) { pwd_db = rset.getString("stud_passwort");}//Vergleich der Passwörterif (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));}

Page 22: Spezielle Aspekte der Anbindung von Datenbanken im Web

© Prof. T. Kudraß, HTWK Leipzig

Sessions in Servlets – Beispiel (3)

Zugriff auf das Sitzungsobjekt mit seinen gespeicherten Werten möglich

// Session anfordernHttpSession session = request.getSession(true);// Sessiong¨ultigkeit erneuernsession.setMaxInactiveInterval(60*15);// Lesen der Matrikelnummer mit getAttributeif (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

<%@ page session="true" %> Zugriff auf das implizite HttpSession-Objekt möglich (setAttribute, getAttribute) Sparsamer Umgang mit Ressourcen im Webserver → Timeout verwenden!

Page 23: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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)

Page 24: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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

<BODY><% html_header(’Titel’); %>[...]</BODY>

<%@ plsql procedure="html_header" %><%@ plsql parameter="title" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head> <title><%=title%></title> <link rel="STYLESHEET" type="text/css" href="/stylesheets/STYLE.CSS"></head><body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0"><div align="center">

Page 25: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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

Page 26: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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 }}

Page 27: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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 wirdprivate 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"); }[. . .]

Page 28: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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)

Page 29: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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

<title>Hallo <jsp:getProperty name="student" property="vorname"/> <jsp:getProperty name="student" property="name"/></title>

Page 30: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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 bindenpstmt.setInt(1,matrikel);rset = pstmt.executeQuery();// Ausgabestring für Tabelleausgabe = "";while (rset.next()) { ausgabe += "<tr>"+

"<td class=\"inner\">"+ "<a href=jsp_session_details.jsp?kurs_id="+

rset.getString("Kurs_ID")+">"+rset.getString("Kurs_Name")+"</a></td>"+

"</tr>";}[...]

Page 31: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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

<tr><th class="inner" colspan="3">Sie sind eingeschrieben in:</th></tr> <jsp:getProperty name="kursliste" property="ausgabe"/>

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

Page 32: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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)

Page 33: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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)

Page 34: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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

Page 35: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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

Page 36: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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

Page 37: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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 IDOWA_UTIL.MIME_HEADER(’text/html’, FALSE);OWA_COOKIE.send(sid, id, Sysdate + 1);OWA_UTIL.HTTP_HEADER_CLOSE;

Page 38: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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;

Page 39: Spezielle Aspekte der Anbindung von Datenbanken im Web

© Prof. T. Kudraß, HTWK Leipzig

Authenticate Header (in PHP)

<?phpfunction authenticate() { header("WWW-Authenticate: Basic realm=\"Geschuetzter Bereich\""); header("HTTP/1.0 401 Unauthorized");

# Text der bei Scheitern oder Abbruch erscheintecho "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'];

Page 40: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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."; }?>

Page 41: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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

Page 42: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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;

Page 43: Spezielle Aspekte der Anbindung von Datenbanken im Web

© Prof. T. Kudraß, HTWK Leipzig

Beispiel-Prozedur decryptCREATE 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;

Page 44: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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_email, stud_gebdat, stud_studiengang) VALUES (stud_matrikel, stud_name, stud_vorname, stud_email, stud_gebdat, stud_studiengang);-- Aufruf der Verschlüsselungsprozedur encrypt(stud_matrikel, stud_passwort);

Einloggen mit Eingabe Passwort Vergleiche mit gespeichertem Passwort

-- verschlüsseltes Passwort lesendecrypt(matrikel, stud_pwd);

Page 45: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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 https:// SSL-Handshake-Protokoll zum Aufbau einer

gesicherten Verbindung

Page 46: Spezielle Aspekte der Anbindung von Datenbanken im Web

© 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üsselZurücksenden des öffentlichen Schlüssels mit einem Zertifikat zur Authentifizierung des Servers

3.Client generiert Sitzungsschlüssel und verschlüsselt diesen mit öffentlichem SchlüsselZurü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 dechiffrierenZuücksenden der entschlüsselten Testnachricht an den Client als Bestätigung für korrekte Übertragung des Schlüssels