code test

From: 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>Fahrplan­auskunft von <xsl:value-of select="fahrplan/@von"/> nach <xsl:value-of select="fahrplan/@nach"/></title>
</head> <body>
    <h1>Fahrplan­auskunft 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>

« previous php.test (#886) next »