Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Spezielle Aspekte der Anbindung von Datenbanken im Web.

Ähnliche Präsentationen


Präsentation zum Thema: "Spezielle Aspekte der Anbindung von Datenbanken im Web."—  Präsentation transkript:

1 Spezielle Aspekte der Anbindung von Datenbanken im Web

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

22 © 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!

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

24 © 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">

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

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

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

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

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

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

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

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

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

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

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

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

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

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

39 © Prof. T. Kudraß, HTWK Leipzig Authenticate Header (in PHP) <?php function authenticate() { header("WWW-Authenticate: Basic realm=\"Geschuetzter Bereich\""); header("HTTP/1.0 401 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'];

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

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

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

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

44 © 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 lesen decrypt(matrikel, stud_pwd);

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

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


Herunterladen ppt "Spezielle Aspekte der Anbindung von Datenbanken im Web."

Ähnliche Präsentationen


Google-Anzeigen