code test
| From: | John Miller | Date: | Wed, 18 Jan 2012 19:55:26 +0000 |
| Subject: | code test | ||
| Groups: | php.test | ||
| Request: | Send a blank email to php-test+get-886@lists.php.net to get a copy of this message | ||
################################################################################
Flugbuchung
################################################################################
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Flugbuchung</title> </head> <body>
<?php
$fluege = array("LH1336" => "Frankfurt/Main nach Budapest",
"LH1154" => "Frankfurt/Main nach Palma De Mallorca",
"LH402" => "Frankfurt/Main nach New York",
"LH408" => "Düsseldorf nach New York");
?>
<form method="post" action="bestelluebersicht.php">
<div>Name:<br/><input type="text" name="name" value="" size="50"/></div>
<div>Datum:<br/><input type="text" name="datum" value="" size="50"/></div>
<div>Kreditkartennummer:<br/><input type="text" name="kreditartennummer" value="" size="50"/></div>
<div>Bemerkung:<br/><textarea name="bemerkung" rows="10" cols="50"></textarea></div>
<div>Flug:<br/><select name="code">
<?php
foreach($fluege AS $flug => $code){
echo "<option value=\"",$flug,"\">",$code,"</option>";
};
?></select></div>
<div><input id="submit" type="submit" value="OK" /></div>
</form>
</body>
</html>
################################################################################
<?php session_start();?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Flugbuchung</title> </head> <body>
<?php
class Buchung {
public $code;
public $datum;
public $name;
public $kreditartennummer;
public $bemerkung;
}
if(isset($_POST["name"])){
$newBuchung = new Buchung;
$newBuchung -> code = $_POST["code"];
$newBuchung -> datum = $_POST["datum"];
$newBuchung -> name = $_POST["name"];
$newBuchung -> kreditartennummer = $_POST["kreditartennummer"];
$newBuchung -> bemerkung = $_POST["bemerkung"];
$_SESSION["Buchung"] = $newBuchung;
};
if(isset($_SESSION["Buchung"])){
$newBuchung = $_SESSION["Buchung"];
};
?>
<p>Bestelluebersicht:</p>
<div>Flugcode: <?php echo $newBuchung -> code;?></div>
<div>Datum: <?php echo $newBuchung -> datum;?></div>
<div>Name: <?php echo $newBuchung -> name;?></div>
<div>Kreditkartennummer: <?php echo $newBuchung -> kreditartennummer;?></div>
<div>Bemerkung: <?php echo $newBuchung -> bemerkung;?></div>
<?php
if(isset($_POST["b"])){
echo "<div>Bestellung wurde ausgeführt!</div>";
}
else
{
echo"<form method=\"post\" action=\"bestelluebersicht.php\">";
echo"<div><input type=\"hidden\" name=\"b\" value=\"true\"/></div>";
echo"<div><input type=\"submit\" name=\"submit\" value=\"submit\"/></div>";
echo"</form>";
};
?>
</body>
</html>
################################################################################
DB Form
################################################################################
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="de" xml:lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Formular</title>
</head>
<body>
<?php
function formular() {
echo"<form method=\"post\" action=\"k1.php\">";
echo"<div>Name, Vorname:<input type=\"text\" name=\"vorname\" size=\"20\"/>,<input type=\"text\" name=\"nachname\" size=\"20\"/></div>";
echo"<div>Geschlecht: <input type=\"radio\" name=\"sex\" value=\"w\" />weiblich <input type=\"radio\" name=\"sex\" value=\"m\" />männlich</div>";
echo"<div>Alter: <select name=\"alter\">";
$i=0;
while($i<=99){
$von=$i;
$bis=$i+9;
echo"<option value=\"",$von,"-",$bis,"\">",$von,"-",$bis,"</option>";$i+=10; }; echo"</select></div>"; echo"<div><input type=\"submit\" name=\"submit\" value=\"Absenden\"/><input type=\"reset\" value=\"Zurücksetzen\"/></div>"; echo"</form>"; }
formular();?> </body> </html> ################################################################################ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="de" xml:lang="de"> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Benutzer</title>
</head>
<body>
<?php
class Benutzer {
private $db;
public function __construct() {
try {
$this->db = new PDO ("mysql:host=localhost;dbname=DBNAME","DBUSER","DBPASS");
} catch (PDOException $e) {
throw new Exception ('Verbindung nicht moeglich: ' . $e->getMessage());
}
}
public function benutzerEinfuegen ($vorname, $nachname, $geschlecht, $alter) {
if (!$stmt=$this->db->prepare('INSERT INTO benutzer (vorname, nachname, geschlecht, alter) VALUES (:vorname, :nachname, :geschlecht, :alter)')) {
throw new Exception ('PDO::prepare fehlgeschlagen!');
}
if (!$stmt->bindParam(':vorname',$vorname)||
!$stmt->bindParam(':nachname',$nachname)||
!$stmt->bindParam(':geschlecht',$geschlecht)||
!$stmt->bindParam(':alter',$alter)) {
throw new Exception ('PDOStatement::bindParam fehlgeschlagen!');
}
if (!$stmt->execute()) {
throw new Exception ('PDOStatement::execute fehlgeschlagen!');
}
}
}echo "DEBUG"; echo $_POST['vorname'],$_POST['nachname'],$_POST['sex'],$_POST['alter']; $newUser = new Benutzer(); $newUser -> benutzerEinfuegen($_POST['vorname'],$_POST['nachname'],$_POST['sex'],$_POST['alter']); ?> </body> </html> ################################################################################ VHS Anmeldung ################################################################################ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="de" xml:lang="de"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Kursanmeldung</title></head> <body>
<div>Kursanmeldung</div>
<div>
<form method="post" action="vhs.php">
Benutzername: <input type="text" name="user" size="30"></br>
Kennwort: <input type="password" name="password" size="30"> </br>
Kurs: <select name="kurs">
<option value="Englisch">Englisch</option>
<option value="Nähen">Nähen</option>
</select></br>
Tag: <select name="tag">
<option value="Mo">Montag</option>
<option value="Di">Dienstag</option>
<option value="Mi">Mittwoch</option>
<option value="Do">Donnerstag</option>
<option value="Fr">Freitag</option>
</select>
<input type="submit" name="submit" value="submit">
</form>
</div>
</body>
</html>
################################################################################
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="de" xml:lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Kursanmeldung</title></head> <body>
<div>Kursanmeldung</div><?php
class VHS {
private $db;
public function __construct() {
// DB-Server verbinden und Datenbank auswählen
try {
$this->db = new PDO ("mysql:host=localhost;dbname=DBNAME",
"DBUSER","DBPASS");
} catch (PDOException $e) {
throw new Exception ('Verbindung nicht moeglich: ' .
$e->getMessage());
}
}
public function pruefeLogin ($benutzerid, $pwd) {
$vhsbenutzer = -1;
// Ist Benutzer in DB?
if (!$stmt=$this->db->prepare('SELECT count(*) AS anzahl
FROM vhsbenutzer WHERE benutzerid=:benutzerid
AND pwd=:pwd'))
throw new Exception ('PDOStatement::prepare
fehlgeschlagen!');
if (!$stmt->bindParam(':benutzerid',$benutzerid)||
!$stmt->bindParam(':pwd',$pwd))
throw new Exception ('PDOStatement::bindParam
fehlgeschlagen!');
if (!$stmt->execute())
throw new Exception ('PDOStatement::execute
fehlgeschlagen!');
if(!$vhsbenutzer=$stmt->fetch(PDO::FETCH_OBJ))
throw new Exception ('PDOStatement::fetch
fehlgeschlagen!');
// Ergebnis zurückgeben
return ($vhsbenutzer->anzahl);
}
public function loescheKursReservierung ($tag, $kursname) {
// Lösche alle Teilnehmer aus Kurs
if (!$stmt=$this->db->prepare('DELETE FROM
vhsreservierung WHERE tag=:tag AND
kursname=:kursname'))
throw new Exception ('PDOStatement::prepare
fehlgeschlagen!');
if (!$stmt->bindParam(':tag',$tag)||
!$stmt->bindParam(':kursname',$kursname))
throw new Exception ('PDOStatement::bindParam
fehlgeschlagen!');
if(!$stmt->execute())
throw new Exception ('PDOStatement::execute
fehlgeschlagen!');
}
public function reserviereKurs ($tag, $kursname, $benutzerid, $pwd)
{
if(!$this->pruefeLogin ($benutzerid, $pwd))
{
echo "Anmeldedaten falsch!";
return 0;
}
$kursvorhanden=-1;
$stmt=$this->db->prepare('SELECT count(*) AS anzahl FROM vhskurs WHERE tag=:tag AND kursname=:kursname');
$stmt->bindParam(':tag',$tag);
$stmt->bindParam(':kursname',$kursname);
$stmt->execute();
$kursvorhanden=$stmt->fetch(PDO::FETCH_OBJ);
if($kursvorhanden->anzahl<1)
{
echo "Kurs nicht gefunden!";
return 0;
}
$maxteilnehmer=-1;
$stmt=$this->db->prepare('SELECT maxteilnehmer FROM vhskurs WHERE kursname=:kursname');
$stmt->bindParam(':kursname',$kursname);
$stmt->execute();
$maxteilnehmer=$stmt->fetch(PDO::FETCH_OBJ);
$teilnehmerzahl=-1;
$stmt=$this->db->prepare('SELECT count(*) AS teilnehmerzahl FROM vhsreservierung WHERE kursname=:kursname');
$stmt->bindParam(':kursname',$kursname);
$stmt->execute();
$teilnehmerzahl=$stmt->fetch(PDO::FETCH_OBJ);
if($maxteilnehmer->maxteilnehmer<=$teilnehmerzahl->teilnehmerzahl)
{
echo "Der Kurs ist leider schon voll!";
return 0;
}
$stmt=$this->db->prepare('INSERT INTO vhsreservierung (tag, kursname, benutzerid) VALUES (:tag, :kursname, :benutzerid)');
$stmt->bindParam(':tag',$tag);
$stmt->bindParam(':kursname',$kursname);
$stmt->bindParam(':benutzerid',$benutzerid);
$stmt->execute();
echo "Sie sind erfolgreich angemeldet!";
}
}
$nVHS = new VHS;
$nVHS -> reserviereKurs ($_POST['tag'], $_POST['kurs'], $_POST['user'], $_POST['password']);
?>
</body>
</html>
################################################################################
##### Nennen Sie drei Vor- und drei Nachteile von Sessions #####
Gründe für Sessions
- Aufwendig errechnete Daten speichern
- Benutzerführung über bestimme Reihenfolgen
- Zwischenspeichern von Daten, bevor sie in die
Datenbank kommen (Warenkorb)
Gründe gegen Sessions
- Verteilung von Serverlast mit Sessions erschwert
- Performance Verluste
- Server merkt nicht, ob eine Session beendet ist
- Mit Cookies ist nur eine Session pro Client möglich
- Lesezeichen von Seiten mit Sessions können Probleme
bringen gleich mehr
##### Wie kann man Sessions gegen Diebstahl sinnvoll absichern #####
Eine Session kann durch Einbeziehung der IP Adresse
des Clients zusätzlich geschützt werden
##### manipulierte Eingaben Erklären Sie stichpunktartig vier Merkmal #####
für eine Manipulation- Zusätzliche oder fehlende Form-Variablen - Session-ID entspricht nicht dem Standard - hidden, select, checkbox Variablen entsprechen nicht dem Muster - Quelle der Variablen (get, post, cookie) stimmt nicht überein ##### Mögliche Reaktionen: - Verarbeitung stoppen aber korrekte Verarbeitung vortäuschen - Zur Homepage oder Fehlerseite anzeigen - Explizite Warnung, dass Angriff festgestellt wurde ##### Falsche Reaktionen: - Ungefilterte Fehlermeldungen - „Wegen Wartungsarbeiten nicht verfügbar“ ermuntert Angreifer weiter zu machen - Eingaben korrigieren und weiterarbeiten ##### Maßnahmen gegen eine ungewollte Veröffentlichung interner Informationen ##### - Aus der (X)HTML-Seite sämtliche Kommentare entfernen - Fingerprints entfernen - Open Source Module umbenennen - Typische Merkmale wie Meta-Tags, Form-Variablen usw. umbenennen - Fehlermeldungen abfangen und dafür neutrale Fehlermeldungen liefern - Open-Source oder sonstige Fremdsoftware darauf untersuchen, ob sie im Fehlerfall sicherheitsrelevante Informationen ausgeben - Enumeration verhindern ##### whitelist / blacklist ##### - Whitelist-Verfahren dem Blacklist-Verfahren vorzuziehen Whitelist: Lösche alle Zeichen außer Buchstaben und Zahlen: /[^a-zA-Z0-9]/ Blacklist: Verbiete HTML-Tags object und script: /(object|script)/i ##### SQL-Injection ##### - SQL-Injektion ist das Ausnutzen von Sicherheitslücken in Zusammenarbeit mit SQL Datenbanken - Der Angreifer versucht über die Datenbank-Anwendung eigene Datenbankbefehle einzuschleusen - Sicherheitslücken, wenn vom Benutzer eingegebene Parameter nicht geprüft werden, bevor Sie an eine SQL Abfrage gereicht werden. Befehl in 2 Befehle aufgebrochen Aufruf: webserver/cgi-bin/find.cgi?ID=42 SQL: SELECT author, subjekt, text FROM artikel WHERE ID=42 SQL-Injektion Aufruf: webserver/cgi-bin/find.cgi?ID=42;UPDATE+USER+SET+TYPE='admin'+WHERE+ID=23 SQL: SELECT author, subjekt, text FROM artikel WHERE ID=42; UPDATE USER SET TYPE='admin' WHERE ID=23 ##### Umgang mit Benutzerkennungen ##### - Mit Benutzerkennung sorgsam umgehen - Benutzerkennung sollte als nicht-öffentliche Information behandelt werden - Nicht die E-Mail-Adresse verwenden - Kein Schema wie vorname.nachname o.ä. verwenden - Nicht ableitbare Komponenten für Benutzerkennnung verwenden - Anwendung darf keine Hinweise über Vorhandensein von Kennung geben ##### Ebenenmodell zum Sicherheitskonzept ##### 5 Semantik - Schutz vor Täuschung und Betrug 4 Logik - Absicherung von Prozessen Workflows als Ganzes 3 Implementierung - Vermeidung von Programmierfehlern 2 Technologie - Richtige Wahl und sicherer Einsatz von Technologie 1 System - Absicherung der auf der Systemplatform eingesetzten Software 0 Netzwerk/Host - Absicherung von Host und Netzwerk ################################################################################ XSLT ################################################################################ Fahrplan ################################################################################ <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="fn xs" xmlns="http://www.w3.org/1999/xhtml"> <xsl:output method="xhtml" encoding="UTF-8"/> <xsl:template match="/"> <html> <head>
<title>Fahrplanauskunft von <xsl:value-of select="fahrplan/@von"/> nach <xsl:value-of select="fahrplan/@nach"/></title></head> <body>
<h1>Fahrplanauskunft von <xsl:value-of select="fahrplan/@von"/> nach <xsl:value-of select="fahrplan/@nach"/></h1>
<ul>
<xsl:for-each select="fahrplan/verbindung">
<xsl:if test="not(umsteigen[2])">
<li>
<strong><xsl:value-of select="ab, an" separator=" - "/></strong>
</li>
<div>Dauer: <xsl:value-of select="dauer"/> (<xsl:value-of select="zug"/>, <xsl:value-of select="umsteigen/zug" separator=", "/>)</div>
</xsl:if>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
################################################################################
Fluege
################################################################################
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="fn xs"
xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="xhtml"/>
<xsl:template match="/">
<html>
<head>
<title>Fluege</title>
</head>
<body>
<ul>
<xsl:for-each select="fluege/flug">
<li>
<p>
<div><xsl:value-of select="datum"/> (<xsl:value-of select="@id"/>)</div>
<div>von <xsl:value-of select="von"/> nach <xsl:value-of select="nach"/></div>
<div>Klassen <xsl:value-of select="klasse" separator=", "/></div>
</p>
</li>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>