FAQ
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


<xsl:param name="von">0</xsl:param>
<xsl:param name="bis">9999</xsl:param>
<xsl:template match="/buchhandel">
<xsl:for-each-group
select="buch[(@ersch-jahr&gt;$von)and(@ersch-jahr&lt;$bis)]"
group-by="@ersch-jahr">
<xsl:sort select="@ersch-jahr"/>
<p>
<b><xsl:value-of select="current-grouping-key()"/></b><br/>
<xsl:for-each select="current-group()">
<xsl:value-of select="position()"/><xsl:text>.
</xsl:text><xsl:value-of select="buchtitel"/><br/>
</xsl:for-each>
</p>
</xsl:for-each-group>
</xsl:template>
<xsl:param name="ausrichtung">right</xsl:param>
<xsl:template match="/buchhandel">
<html><head><title>jop</title><style>.reisen {background-color:
green;}</style></head>
<body>
<xsl:apply-templates select="buch"/>
</body>
</html>
<xsl:apply-templates select="buch">
<xsl:sort select="preis" data-type="number"/>
</xsl:apply-templates>
<xsl:for-each select="buch">
<xsl:sort select="buchtitel" data-type="text"/>
<p><xsl:value-of select="buchtitel"/><xsl:text> </xsl:text></p>
</xsl:for-each>
<xsl:for-each-group select="buch" group-by="buchverlag">
<p><b><xsl:value-of select="current-grouping-key()"/></b></p>
<p><xsl:value-of select="current-group()/buchtitel" separator=", "/></p>
</xsl:for-each-group>
</xsl:template>
<xsl:template match="buch">
<xsl:element name="p">
<xsl:attribute name="class" select="@kat" />
<xsl:value-of select="buchtitel"/><xsl:text> </xsl:text>
<xsl:value-of select="buchverlag"/><xsl:text> </xsl:text>
<xsl:value-of select="preis"/>
</xsl:element>
</xsl:template>
<xsl:template match="buch">
<p style="text-align:{$ausrichtung}">
<xsl:value-of select="buchtitel"/><xsl:text> </xsl:text>
<xsl:value-of select="buchverlag"/><xsl:text> </xsl:text>
<xsl:value-of select="preis"/>
</p>
</xsl:template>
<xsl:template match="buch">
<p>
<xsl:value-of select="buchtitel"/><xsl:text> </xsl:text>
<xsl:value-of select="buchverlag"/><xsl:text> </xsl:text>
<xsl:call-template name="preis_template">
<xsl:with-param name="preis" select="preis"/>
</xsl:call-template>
</p>
</xsl:template>
<xsl:template name="preis_template">
<xsl:param name="preis"/>
<xsl:choose>
<xsl:when test="preis/@waehrung='Dollar'">
<xsl:value-of select="format-number($preis*0.68054,'0.00')"/> EUR
(<xsl:value-of select="$preis"/> Dollar)
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$preis"/> EUR
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- done down -->
<xsl:template match="/fahrplan">
<html>
<head><title>Von <xsl:value-of select="@von"/> nach <xsl:value-of
select="@nach"/></title></head>
<body>
<h1>Von <xsl:value-of select="@von"/> nach <xsl:value-of
select="@nach"/></h1>
<ul><xsl:apply-templates select="verbindung"/></ul>
</body>
</html>
</xsl:template>
<xsl:template match="verbindung">
<xsl:if test="fn:count(umsteigen) &lt; 3">
<li>
<b><xsl:value-of select="ab"/> - <xsl:value-of select="an"/></b><br/>
Dauer: <xsl:value-of select="dauer"/> (<xsl:value-of select="zug"/>,
<xsl:value-of select="umsteigen/zug" separator=", "/>)
</li>
</xsl:if>
</xsl:template>
<xsl:template match="/fluege">
<ul>
<xsl:for-each select="flug">
<li>
<xsl:value-of select="datum"/> (<xsl:value-of select="@id"/>) <br/>
<xsl:variable name="von" select="von"/>
<xsl:variable name="nach" select="nach"/>
von <xsl:value-of select="/fluege/ort[@id = $von]"/> nach
<xsl:value-of select="/fluege/ort[@id = $nach]"/> <br/>
Klassen: <xsl:value-of select="klasse" separator=", "/>
</li>
</xsl:for-each>
</ul>
</xsl:template>
<xsl:template match="/history">
<html><head><title>Wetter</title></head>
<body>
<dl><xsl:apply-templates select="weather"/></dl>
<h3>Durchschnitt</h3>
<xsl:value-of select="fn:format-number(sum(weather/rain) div
count(weather/rain),'0.0')"/>
</body>
</html>
</xsl:template>
<xsl:param name="art">C</xsl:param>
<xsl:template match="weather">
<dt><xsl:value-of select="@measured"/></dt>
<xsl:choose>
<xsl:when test="$art='F'">
<dd><xsl:value-of select="((temperature*9) div 5 )+32"/> F</dd>
</xsl:when>
<xsl:otherwise>
<dd><xsl:value-of select="temperature"/> <xsl:value-of
select="temperature/@unit"/></dd>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:param name="isin"></xsl:param>
<xsl:template match="/aktien">
<html><head><title>Aktien</title></head>
<body><xsl:apply-templates select="aktie"/></body>
</html>
</xsl:template>
<xsl:template match="aktie">
<xsl:choose>
<xsl:when test="(@isin = $isin) or ($isin = '')">
<p>
Name: <xsl:value-of select="name"/><br/>
Mittelwert: <xsl:value-of
select="fn:format-number(sum(kurse/kurs/ausgabepreis) div
count(kurse/kurs),'0.00')"/>
</p>
</xsl:when>
</xsl:choose>
</xsl:template>

</xsl:stylesheet>


---

* SQL-Injection
- Verhinderung:
- Mit PDO binden
- Datenbanknutzer nur limitierte Rechte (NIE root nutzer!)
- Beispiel:
- Erwarteter Aufruf: http://webserver/cgi-bin/find.cgi?ID=42
- SQL-Injektion:
http://webserver/cgi-bin/find.cgi?ID=42;UPDATE+USER+SET+TYPE='admin'+WHERE+ID=23

* Benutzerkennung
- Sorgsam mit umgehen
- Schema wie Vorname.Nachname vermeiden
- Keine E-Mail Adressen

* Enumerationsangriff
- Erkennungsmerkmale:
- Viele zugriffe von der gleichen IP
- Zugriffszahlen überschreiten bestimmte Anzahl (Script!)
- Zugriffsparameter werden nach einem regelmäßigen Muster variiert
- Abwehrmaßnahmen:
- Captcha
- Zeitverzögerung des Zugriffs (exponentielle zeitsteigerung)

* Benutzer Authentifizierung
- mittels HTTP-Protokoll über Webserver (Liste mit User/PW)
- per PHP-Skript ($_SERVER['PHP_AUTH_USER'],...)
- per HTML-Formular und PHP-Skript mit PW/ID Feld

* SSL
- Ziele:
- Vertraulichkeit
- Integrität
- Authentifizierung
- Gültigkeit des Zertifikat:
- Zertifikat muss von Zertifizierungsstelle validiert werden
- Ablauflaufdatum

* Eigenschaften von Webanwendungen
- Plattformunabhängig
- On the Fly and need deployment
- Lebenslange Entwicklung
- Ererignisgesteuerter Client

* Ebenenmodell Sicherheitskonzept
0. Netzwerk/Host (absicherung des netzwerks/host)
1. System (absicherung der systemsoftware)
2. Technologie (richtige wahl der technologie(https/http))
3. Implementierung (keine programmierfehler(sql-inj.))
4. Logik (absicherung von prozessen(sichere pw erzwingen))
5. Semantik (täuschungsschutz (phishing schutz))

* Informations-Bekanntgabe verhindern
- Keine Kommentare in Code

* Vorteile von Sessions:
- Aufwendig errechnete Daten speichern
- Benutzerführung über bestimmte Reihenfolgen
- Zwischenspeichern von Daten, bevor sie in die Datenbank kommen
(Warenkorb)

* Nachteile von Sessions:
- Verteilung von Serverlast mit Sessions erschwert
- Server merkt nicht, ob eine Session beendet ist
- Lesezeichen von Seiten mit Sessions kˆnnen Probleme bringen

* Session diebstahl nur durch raten möglich

* Sessions sinnvoll absichern:
- Zusätzliche IP/ID
- Keine kritischen Infos in Sessions sichern

* Erkennen von Manipulation
- Zu viele oder zu wenige Form-Variablen
- Falsche Übertragung (GET statt POST)
- Session ID kein Standard

* Reaktion auf Manipulation
Sollte:
- Verarbeitung abbrechen aber korrekte verarbeitung vortäuschen
- Explizite Warnung ausgeben
- Weiterleitung auf Fehlerseite
Nicht:
- Dienst einstellen
- Ungefilterte Fehlermeldung
- "Wegen Wartungsarbeiten nicht verfügbar"


------

Search Discussions

  • Olaf Geider at Jun 27, 2012 at 9:08 am
    <?php
    class Benutzer {
    private $dbh;
    public function __construct() {
    try {
    $this->db = new PDO ("mysql:dbname=b4","root","");
    } 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()) {
    print_r($stmt->errorInfo());
    throw new Exception ('PDOStatement::execute
    fehlgeschlagen!');
    }
    }
    }
  • Olaf Geider at Jun 27, 2012 at 9:10 am
    <?php
    class Rechteck{
    private $laenge, $breite;
    function __construct($laenge, $breite){
    $this->laenge = $laenge;
    $this->breite = $breite;
    }

    public function getLaenge (){
    return $this->laenge;
    }

    public function getBreite (){
    return $this->breite;
    }

    public function getUmfang (){
    return 2*($this->breite+ $this->laenge);
    }

    public function getDiagonale (){
    return sqrt(pow($this->breite, 2) + pow($this->laenge, 2));
    }


    }

    class Quadrat extends Rechteck {

    function __construct($laenge){
    parent::__construct($laenge, $laenge);
    }

    public function getDiagonale (){
    return $this->getLaenge() * sqrt(2);
    }
    }

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupphp-test @
categoriesphp
postedJun 27, '12 at 9:01a
activeJun 27, '12 at 9:10a
posts3
users1
websitephp.net

1 user in discussion

Olaf Geider: 3 posts

People

Translate

site design / logo © 2019 Grokbase