Themen: - Formulare - Sessions - Dateien/Verzeichnisse - Cross Site Skripting - XSS - Kommunikation zwischen Webbrowser/Webserver - HTTP-Protokoll - Cookies DNS-Server und Webserver: Unterschiedliche Server 1.) Name des Servers 2.) ... Anfrage des Webbrowsers GET index.php HTTP/1.1. Host: localhost Antwort: HTTP/1.1 200 OK Date: Server: X-Powerd-By: Transfer-Encoding: Content-Type: 201b ... Response-Code: 200 OK, Seite wurde gefunden 201b bedeutet: 8129 = 8kByte - so lang sind die Daten 1.) Request 2.) Response - Nachrichtenkopf: Header - Response-Code - Nachrichtenkörper: Body 8 verschiedene Anfrage-Typen: Response-Types: - GET - POST (Gleich wie GET, aber eventuell andere Parameter) - HEAD (Das gleiche, aber ohne BODY) - PUT (Lädt Datei auf Server hoch) - DELETE (Löscht Datei auf dem Server) - TRACE (Der Server liefert die Antwort, wie er sie bekommen hat - wurde unterwegs manipuliert?) - OPTIONS - CONNECT (Verschlüsselte Verbindung über PROXY) Response-Code 200 OK 301 Moved Permanently 400 Bad Request 404 Not found Cookies: HTTP: Zustandsloses Protokoll Der Wert eines Cookies kann im HTTP-Header übertragen werden Nutzen: - Speichern von benutzerdefinierten Einstellungen - Sessions - Sammeln von Surfgewohnheiten Sitzungscookies \n"; ?> Cookie auslesen PHP-Beispiel-Codes - setcookie.php - getcookie.php PHP-Functions: - setcookie (...) - getcookie (...) Parameter der Funktion cookie - Name des Cookies - Inhalt des Cookies - Abgelaufen (3 Parameter) Zugriff auf Cookie $_COOKIES ["Name des Cookies"]; $_COOKIES []; Globale Variablen $_GET []: Für Addressleiste $_POST []: Für Formulare $_COOKIES []: Für Cookies Stichwort: Global assoziatives Array Formulare, was lernen? - Formulare entwerfen - Listen und Mehrfachauswahlen - Benutzereingaben überprüfen - Affenformular - Übertragungsmöglichkeiten - Passwortabfrage Formulare bestehen aus zwei Komponenten - HTML-Code - Skript (PHP, ..) Formular
Vorname:
Nachname:
Formulare werden mit dem FORM-Tag definiert. - FORM-Tag - Attribut ACTION - Parameter POST (Welcher HTTP-Request kommt zum Einsatz) Eingabefelder: - Textfelder TYPE="text" - Passwordfelder TYPE="password" - Checkboxen TYPE="checkbox" - Schaltflächen TYPE="submit", verbunden mit ACTION NAME: Eindeutiger Name Entweder POST oder GET $_POST ["name1"]; $_GET ["name2"]; Listen in Formularen SELECT-Tag Einfache Liste
echo $_GET ['auswahl']; Mehrfachauswahlen - SELECT-Tag, MULTIPLE Attribut \n"; next($wahl); } ?> isset () Affenformular Passwörter: FORM INPUT TYPE="password" Dann mit MD5 speichern md5 ("password"); Sessions: 1.) session_start (); 2.) Session-ID 3.) $_SESSION [] Session-ID's ohne Cookies seit PHP 5.3 nicht mehr unterstützt session_destroy (); DBMS Relationale Datenbank, Relation, Tupel Datentypen: - Ganzzahlen - Fließkommazahlen - Zeichenketten - binäre Datentypen BIT TINYINT BOOL BOOLEAN SMALLINT MEDIUMINT INT INTEGER BIGINT Fließkommazahlen FLOAT DOUBLE DECIMAL CHAR VARCHAR (M) TINYTEXT TEXT MEDIUMTEXT LONGTEXT BINARY VARBINARY TINYBLOB BLOB MEDIUMBLOB LONGBLOB DATE TIME DATETIME TIMESTAMP CREATE TABLE mysql -u root -p -v < xyz.sql DROP DATABASE 'xyz' CREATE DATABASE 'xyz' DROP TABLE 'abc' CREATE TABLE 'abc' ('name1' VARCHAR (64), 'name2' VARCHAR (64)) INSERT INTO 'abc' VALUES ("Hallo", "Welt"); SHOW TABLES IN 'xyz' USE 'xyz' SELECT * FROM 'abc' SELECT * FROM 'abc' WHERE expression INSERT INTO 'abc' ('name1', 'name2') VALUES ("Hallo", "Welt"); DELETE FROM 'abc' WHERE expression SELECT * FROM 'abc' JOIN 'def' USING SHOW DATABASES; SET PASSWORD; mysql_connect (); mysql_close (); mysql_query (); mysql_error (); mysql_real_escape_string (); mysql_select_db (); mysql_fetch_row (); mysql_fetch_assoc (); mysql_num_rows (); mysql_num_fields (); mysql_result (); $handle = mysql_connect ('127.0.0.1', user, password); if ($handle) ... else ... $query = "SELECT * FROM 'abc'; $result = mysql_quere ($query); $row = mysql_fetch_assoc ($result); In C int factorial(int x) { if (x <= 1) return 1; return x * factorial(x - 1); } In Python def factorial(x): if x <= 1: return 1 return x * factorial(x - 1) Hallo Welt: print "Hallo Welt!" Perl: if () {} [elsif () {}] [else {}] Ruby # Definiere „Funktion“ def meine_funktion puts "Hier bin ich" end # Kann in andern Objekten wie eine Funktion benutzt werden class ABC def gib_meine_funktion_aus meine_funktion end end mein_abc = ABC.new mein_abc.gib_meine_funktion_aus # => Hier bin ich mein_abc.meine_funktion # => Fehlermeldung, private method `meine_funktion' called SDL: #include Definitionen: SDL_Event event; SDL_Window* window = NULL; SDL_Surface* surface = NULL; atexit (SDL_QUIT) Aufrufe SDL_Init (SDL_INIT_VIDEO); window = SDL_CreateWindow (); surface = SDL_GetWindowSurface (window); SDL_PollEvent (&event) SDL_DestroyWindow (window); SDL_Init (); SDL_CreateWindow (); SDL_GetWindowSurface (); SDL_PollEvent () SDL_DestroyWindow (); SDL_Rect src, dst; src.x; sry.y; src.w; src.h; dst.x; dst.y; dst.w; dst.h; image->w; image->h; SDL_FillRect (); SDL_SetColorKey (); SDL_KeyState (); SDL_FillRect (); SDL_BlitSurface (); SDL_Flip (); SDL_FreeSurface (); SDL_LoadBMP (); image = SDL_LoadBMP ("tux.bmp"); MySQL nach Excel exportieren: header('Content-Type: application/xls'); header('Content-Disposition: attachment; filename=info.xls'); $connect = mysqli_connect("hostname", "username", "password", "db_name"); if(isset($_POST["submit"])) { $query = "SELECT * FROM users"; $res = mysqli_query($connect, $query); if(mysqli_num_rows($res) > 0) { $export .= ' '; while($row = mysqli_fetch_array($res)) { $export .= ' '; } $export .= '
id firstname lastname dob
'.$row["id"].' '.$row["firstname"].' '.$row["lastname"].' '.$row["dob"].'
'; header('Content-Type: application/xls'); header('Content-Disposition: attachment; filename=info.xls'); echo $export; } } Einfache Filterung SELECT * FROM kunden WHERE name = 'a coding project' Filterung mit Suchefunktion SELECT * FROM kunden WHERE name LIKE '%coding%' Filterung zwischen zwei Werten SELECT * FROM kunden WHERE id BETWEEN 1 AND 5 Filterung mit Subselect SELECT * FROM kunden WHERE name IN (SELECT name FROM names) Einfache Sortierung SELECT * FROM kunden ORDER BY name,id DESC Spalte hinzufügen ALTER TABLE kunden ADD column strasse VARCHAR(255); Benutzer erstellen GRANT ALL PRIVILEGES ON *.* TO NeuerUser IDENTIFIED BY 'passwort'; The INNER JOIN keyword selects records that have matching values in both tables. SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name; SELECT SUM(b.anzahl), p.produkt FROM bestellung b, produkt p WHERE b.pr_id = p.id GROUP BY p.produkt SELECT SUM(b.anzahl), p.produkt FROM bestellung b INNER JOIN produkt p ON (b.pr_id = p.id) GROUP BY p.produkt SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name; SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name; JOIN INNER JOIN LEFT JOIN RIGHT JOIN Doppelte Einträge verhindern DISTINCT-Anweisung SELECT DISTINCT vorname FROM users ORDER BY vorname SELECT DISTINCT vorname, nachname FROM users ORDER BY vorname, nachname EXCEL =SUMME (A3;B5) =SUMME (A2:A14) Anzahl: =ANZAHL(E1:F4) Höchst und Tiefswerte Ermitteln: MIN () MAX () Durschnitt: MITTELWERT () Logische Prüfung =WENN (BEDINGUNG; DANN; SONST) =WENN (C9="Montag";"Okay";"anderer Tag") =WENN(A1=“blau“; =WENN(A5>100;A5-(A5*2%);A5) =SUMMENPRODUKT =HÄUFIGKEIT query($sql) as $row) { echo $row['email']."
"; echo $row['vorname']."
"; echo $row['nachname']."

"; } ?> $stmt = $db->query ("SELECT * FROM codes"); $result = $stmt->fetchAll (PDO::FETCH_BOTH); Eine "Certification Authority" (CA / Zertifizierungsstelle) ist eine Instanz, die digitale Zertifikate ausstellt und beglaubigt. Paket ca-certificates selbstsignierten Zertifikate CAs sind wesentlicher Bestandteil einer PKI (Public-Key-Infrastruktur) - CA - PKI - TLS-verschlüsselte Verbindung zum Server Signatur ins Server-Zertifikat privater Schlüssel in RSA-Format erstellen übliche Dateiendung: key Außerdem: Zertifizierungsantrag, csr. Certificate Signing Request Ein Certificate Signing Request (CSR; deutsch Zertifikatsignierungsanforderung) oder Certification Reques ist ein digitaler Antrag, mittels einer digitalen Signatur aus einem öffentlichen Schlüssel ein digitales Zertifikat zu erstellen. Zwei Dateien: 1.) beispiel.key 2.) beispiel.csr Der Zertifizierungsantrag wird zum Signieren an eine CA übertragen Man hat einen CSR - einen Certificate Signing Request - das ist ein Antrag - eine Datei - aber die ist ein Antrag - und den schickt man einer CA - und: Die signiert das - also beglaubigt das. Die CA kann man selber betreiben - das ist nicht offiziell. Dann heißt CA nicht einfach, nicht das Büro in dem man sitzt - sondern ist die ganze Software-Sammlung. Jetzt schickt man den CSR an eine CA. PKI-Datei: Man nennt alle Dateien gesammelt - PKI-Datei Die CA verfügt über zwei Dateien: - ca.key - ca.crt Also, sagen wir so 1.) Es gibt eine CA 2.) Es gibt den Websitebetreiber 1.) Es gibt einen Schlüssel 2.) Es gibt eine Zertifikat Schlüssel: Key Zertifikat: CRT In dem CRT ist der Key. Aber man hat zwei Dateien Der Websitenbetreiber, hat 1.) Ein Zertifkat 2.) Ein Key Die CA hat ein 1.) Zertifikat 2.) Einen Key Damit gibt es: 1.) CA 1.1.) Key 1.2.) CRT 2.) Homepage 2.1.) Key 2.2.) CRT Die CA kann man selber sein. Dann ist das Zertifikat selbst signiert. Jetzt hat man noch den Zertifkatsantrag 1.) Key 2.) CRT 3.) CSR CSR = Zertifkatsantrag Also, man hat statisch 1.) CA 1.1.) Key 1.2.) CRT 2.) Homepage 2.1.) Key 2.2.) CRT Jetzt das ist statisch, wenn es fertig ist. Damit die CA aber ein CRT für die Homepage erstellen kann, braucht die CA einen Antrag. Also, wenn die CA hundert Mal einen Key und einen CRT hat, dann hat der Nutzer davon nichts, wenn er keinen Antrag stellt. Also: Antrag: CSR 1.) CA 1.1.) Key 1.2.) CRT 2.) Homepage 2.1.) Key 2.2.) CRT 2.3.) CSR beispiel.key beispiel.crt beispiel.csr CSR kann natürlich verschwinden - wenn der Antrag gestellt wurde und: Das Zertifkat da ist, kann der Antrag weg. Dem Benutzer reicht aber das CRT der Homepage nicht. Er braucht auch das CRT des CA ca.crt homepage.crt Also, er kriegt das homepage.crt und überprüft die Richtig mit dem CRT des CA. Speicherformate: CA-Zertifikate - also, von der CA - einem Dienst, unterscheiden sich nicht von Client und Serverzertifikaten 1.) CA-Zertifikat 2.) Client-Zertifikat 3.) Server-Zertifikat Linux, zwei verschiedene Dateiformate: 1.) PEM-Format, Base64-kodiert 2.) DER-Format, binär kodiert (ASN.1-Format) PEM-Format: Also, in der Datei: BEGIN CERTIFICATE"/"END CERTIFICATE -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- In diesem Format sind sie lesbar und enthalten, Strings wie MIIG9TCCBd2gAwIBAgISA101uy+kA82E9A89jwHfDLh1MA0GCSqGSIb3DQEBCwUA MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD ExpMZXQncyBFbmNyeXB0I Bemerkung: Intermediate Certificates CA-Zertifikate hinterlegen: (Abspeichern) - Dateien in einem Verzeichnis - alle im PEM-Format und müssen Dateiendung *.pem haben - Einzelne Dateien mit allen CA's - in einer PEM - NSS-Datenbank - ... - Hardware-Tokens, können in Hardware gespeichert werden OpenSSL GnuTLS NSS /etc/ssl/certs Paket: Programm: ca-certificates, allgemein, anerkannte öffentliche CA-Zertifikate Aufbau eine CA-Certificates: 1.) Subject: Beschreibung wofür 2.) Issuer: Ausstellende Instanz Selbstsignierte Zertifikate sind keine, die über eine CA signiert wurden 1.) beispiel.key 2.) beispiel.csr 3.) Signieren 4:) Es gibt die Möglichkeit, dass sie CRT, CSR, KEY heißen. CRT: Zertifikat CSR: Antrag KEY: Schlüssel Oder sie heißen alle PEM, weil sie im PEM Format sind. Dann heißen die entsprechend req.pem cert.pem key.pem Certificate Authority (CA) erstellen openssl genrsa -aes256 -out ca-key.pem 2048 Root-Zertifikat openssl req -x509 -new -nodes -extensions v3_ca -key ca-key.pem -days 1024 -out ca-root.pem -sha512 Root-Zertifikat auf den Clients importieren sudo cp ca-root.pem /usr/share/ca-certificates/myca-root.crt sudo dpkg-reconfigure ca-certificates Ein neues Zertifikat ausstellen openssl genrsa -out zertifikat-key.pem 4096 openssl req -new -key zertifikat-key.pem -out zertifikat.csr -sha512 openssl x509 -req -in zertifikat.csr -CA ca-root.pem -CAkey ca-key.pem -CAcreateserial -out zertifikat-pub.pem -days 365 -sha512 zertifikat-key.pem, zertifikat-pub.pem, ca-root.pem POST /test.php HTTP/1.1 Host: localhost Content-Length: 7 Content-Type: application/x-www-form-urlencoded q=Hallo openssl s_client -connect www.facebook.com:443 Set-Cookie: PHPSESSID=ssi4fhgg2e6bnbmg0c7rf65jo1; path=/ Set-Cookie: Cookie23=Inhalt; expires=Sat, 16-Apr-2022 19:45:26 GMT; Max-Age=3600 openssl s_client -crlf -connect www.ituenix.de:443