Programmer's Reference Guide

Einführung

Standard Filter Klassen

Zend Framework kommt mit einem Standardset von Filtern, welche bereits zur Verwendung fertig sind.

Alnum

Gibt den String $value zurück und entfernt alles ausser alphabetische und nummerische Zeichen. Dieser Filter inkludiert eine Option die auch Leerzeichen erlaubt.

Hinweis: Alphabetische Zeichen bedeuten Zeichen die in jeder Spache Wörter bilden. Trotzdem wird das englische Alphabet in den folgenden Sprachen für alphabethische Zeichen verwendet: Chinesisch, Japanisch, Koreanisch. Die Sprache wurde von Zend_Locale spezifiziert.

Alpha

Gibt den String $value zurück und entfernt alles ausser alphabetische Zeichen. Dieser Filter inkludiert eine Option die auch Leerzeichen erlaubt.

BaseName

Wenn ein String einen Pfad zu einer Datei enthält gibt dieser Filter den Basisnamen der Datei zurück.

Decrypt

Dieser Filter verschlüsselt beliebige Strings mit den angegebenen Einstellungen. Hierfür verwendet er Adapter. Aktuell gibt es Adapter für die Mcrypt und OpenSSL Erweiterungen von php.

Für Details darüber wie man Inhalte verschlüsselt siehe den Encrypt Filter. Da die Grundlegenden Dinge beim Encrypt Filter behandelt werden, beschreiben wir hier nur mehr die zusätzlichen Methoden und Änderungen für die Entschlüsselung.

Entschlüsselung mit Mcrypt

Für die Entschlüsselung von Inhalten die vorher mit Mcrypt verschlüsselt wurden muß man die Optionen wissen mit denen die Verschlüsselung aufgerufen wurde.

Es gibt einen wichtigen Unterschied. Wenn man bei der Verschlüsselung keinen Vektor angegeben hat, muß man Ihn nach der Verschlüsselung des Inhalts holen indem die getVector() Methode am Verschlüsselungs-Filter aufgerufen wird. Ohne den richtigen Vektor ist man nicht in der Lage den Inhalt zu entschlüsseln.

Sobald man alle Optionen angegeben hat ist die Entschlüsselung so einfach wie die Verschlüsselung.

// Verwende die Standardmäßigen Blowfish Einstellungen
$filter = new Zend_Filter_Decrypt('myencryptionkey');

// Setze den Vektor mit dem der Inhalt verschlüsselt wurde
$filter->setVector('myvector');

$decrypted = $filter->filter('encoded_text_normally_unreadable');
print $decrypted;

        

Hinweis: Man sollte beachten das man eine Ausnahme erhält wenn die Mcrypt Erweiterung in der eigenen Umgebung nicht vorhanden ist.

Hinweis: Man sollte ausserdem beachten das alle Einstellungen geprüft werden wenn man die Instanz erstellt oder wenn man setEncryption() aufruft. Wenn Mcrypt ein Problem mit den Einstellungen erkennt wird eine Ausnahme geworfen.

Entschlüsselung mit OpenSSL

Entschlüsselung mit OpenSSL ist so einfach die Verschlüsseln. Aber man benötigt alle Daten von der Person die den Inhalt verschlüsselt hat.

Für die Entschlüsselung mit OpenSSL benötigt man:

  • private: Den eigenen privaten Schlüssel der für die Entschlüsselung des Inhalts verwendet wird. Der private Schlüssel kann ein Dateiname mit einem Pfad zur Schlüsseldatei sein, oder einfach der Inhalt der Schlüsseldatei selbst.

  • envelope: Der verschlüsselte Umschlagschlüssel vom Benutzer der den Inhalt verschlüsselt hat. Man kann entweder den Pfad mit dem Dateinamen zur Schlüsseldatei angeben, oder den Inhalt der Schlüsseldatei selbst.

// Verwende openssl und gib einen privaten Schlüssel an
$filter = new Zend_Filter_Decrypt(array('adapter' => 'openssl', 'private' => '/path/to/mykey/private.pem');

// natürlich kann man den Umschlagschlüssel auch bei der Instanziierung angeben
$filter->setEnvelopeKey(array('/key/from/encoder/first.pem', '/key/from/encoder/second.pem');

        

Hinweis: Beachte das der OpenSSL Adapter nicht funktionieren wird wenn man keine gültigen Schlüssel angibt.

Optional könnte es notwendig sein die Passphrase für die Entschlüsselung der Schlüssel selbst anzugeben indem die setPassphrase() Methode verwendet wird.

// Verwende openssl und gib einen privaten Schlüssel an
$filter = new Zend_Filter_Decrypt(array('adapter' => 'openssl', 'private' => '/path/to/mykey/private.pem');

// natürlich kann man den Umschlagschlüssel auch bei der Instanziierung angeben
$filter->setEnvelopeKey(array('/key/from/encoder/first.pem', '/key/from/encoder/second.pem');
       ->setPassphrase('mypassphrase');

        

Zum Schluß kann der Inhalt entschlüsselt werden. Unser komplettes Beispiel für den vorher verschlüsselten Inhat sieht nun wie folgt aus.

// Verwende openssl und gib einen privaten Schlüssel an
$filter = new Zend_Filter_Decrypt(array('adapter' => 'openssl', 'private' => '/path/to/mykey/private.pem');

// natürlich kann man den Umschlagschlüssel auch bei der Instanziierung angeben
$filter->setEnvelopeKey(array('/key/from/encoder/first.pem', '/key/from/encoder/second.pem');
       ->setPassphrase('mypassphrase');

$decrypted = $filter->filter('encoded_text_normally_unreadable');
print $decrypted;

        

Digits

Gibt den String $value zurück und entfernt alles ausser nummerische Zeichen.

Dir

Gibt den Verzeichnisnamen einer Pfadangabe zurück.

Encrypt

Dieser Filter verschlüsselt beliebige Strings mit den angegebenen Einstellungen. Hierfür verwendet er Adapter. Aktuell gibt es Adapter für die Mcrypt und OpenSSL Erweiterungen von php.

Da diese zwei Verschlüsselungs-Methodologien komplett unterschiedlich arbeiten, ist auch die Verwendung der Adapters unterschiedlich. Man muß die Adapter den man verwenden will, bei der Initialisierung des Filters auswählen.

// Verwenden des Mcrypt Adapters
$filter1 = new Zend_Filter_Encrypt(array('adapter' => 'mcrypt'));

// Verwendung des OpenSSL Adapters
$filter2 = new Zend_Filter_Encrypt(array('adapter' => 'openssl'));

    

Um einen anderen Adapter zu setzen kann man auch setAdapter() verwenden, und die getAdapter() Methode um den aktuell gesetzten Adapter zu erhalten.

// Verwenden des Mcrypt Adapters
$filter = new Zend_Filter_Encrypt();
$filter->setAdapter('openssl');

    

Hinweis: Wenn man die adapter Option nicht angibt oder setAdapter nicht verwendet, dann wird standardmäßig der Mcrypt Adapter verwendet.

Verschlüsselung mit Mcrypt

Wenn man die Mcrypt Erweiterung installiert hat, kann man den Mcrypt Adapter verwenden. Dieser Adapter unterstützt bei der Initialisierung die folgenden Optionen:

  • key: Der Verschlüsselungs-Schlüssel mit dem die Eingabe verschlüsselt wird. Man benötigt den gleichen Schlüssel für die Entschlüsselung.

  • algorithm: Der Algorithmus der verwendet werden soll. Das sollte einer der Algorithmus Cipher sein die man unter » PHP's Mcrypt Cipers finden kann. Wenn er nicht gesetzt wird, ist er standardmäßig blowfish.

  • algorithm_directory: Das Verzeichnis in dem der Algorithmus gefunden werden kann. Wenn es nicht gesetzt wird, ist es standardmäßig der Pfad der in der Mcrypt Erweiterung gesetzt wurde.

  • mode: Der Verschlüsselungs Modus der verwendet werden soll. Es sollte einer der Modi sein der unter » PHP's Mcrypt Modi gefunden werden kann. Wenn er nicht gesetzt wird, ist er standardmäßig cbc.

  • mode_directory: Der Verzeichnis in dem der Modus gefunden werden kann. Wenn es nicht gesetzt wird, ist es standardmäßig der Pfad der in der mcrypt Erweiterung gesetzt wurde.

  • vector: Der Initialisierungs Vektor der verwendet werden soll. Wenn er nicht gesetzt wird, wird ein zufälliger Vektor verwende.

Wenn man einen String statt einem Array übergibt, wird dieser String als key Option verwendet.

Man kan die Verschlüsselungswerte auch im Nachhinein mit den Methoden getEncryption() und setEncryption() erhalten und setzen.

Hinweis: Es ist zu beachten das man eine Ausnahme erhält wenn die mcrypt Erweiterung in der eigenen Umgebung nicht vorhanden ist.

Hinweis: Man sollte auch beachten das alle Einstellungen geprüft werden wenn man eine Instanz erstellt oder setEncryption() aufruft. Wenn mcrypt ein Problem mit diesen Einstellungen erkennt wird eine Ausnahme geworfen.

Man kann den Verschlüsselungs Vektor durch den Aufruf von getVector() und setVector() erhalten/setzen. Ein engegebener String wird, je nach benötigter Vektorgröße des verwendeten Algorithmus, abgeschnitten oder aufgefüllt.

Hinweis: Es ist zu beachten das, wenn man keinen eigenen Vektor setzt, man den Vektor holen und speichern muß. Andernfalls ist man nicht in der Lage den verschlüsselten String wieder zu dekodieren.

// Verwendet die standardmäßigen Blowfish Einstellungen
$filter = new Zend_Filter_Encrypt('myencryptionkey');

// Setzt einen eigenen Vektor, andernfalls muß man getVector()
// ausrufen und diesen Vektor für spätere Entschlüsselung speichern
$filter->setVector('myvector');
// $filter->getVector();

$encrypted = $filter->filter('text_to_be_encoded');
print $encrypted;

// Für Entschlüsselung siehe den Decrypt Filter

        

Verschlüsselung mit OpenSSL

Wenn man die OpenSSL Erweiterung installiert hat, kann man den OpenSSL Adapter verwenden. Dieser Adapter unterstützt bei der Instanziierung die folgenden Optionen:

  • public: Der öffentliche Schlüssel des Benutzer dem man verschlüsselte Inhalte zur Verfügung stellen will. Man kann mehrere öffentliche Schlüssel angeben indem man ein Array verwendet. Man kann entweder den Pfad und den Dateinamen der Schlüsseldatei angeben, oder nur den Inhalt der Schlüseldatei selbst.

  • private: Der eigene private Schlüssel der für die Verschlüsselung des Inhalts verwendet wird. Auch der private Schlüssel kann entweder ein Dateiname mit Pfad zur Schlüsseldatei sein, oder nur der Inhalt der Schlüsseldatei selbst.

Man kann öffentliche Schlüssel auch im Nachhinein mit den Methoden getPublicKey() und setPublicKey() erhalten und setzen. Auch der private Schlüssel kann mit den entsprechenden Methoden getPrivateKey() und setPrivateKey() geholt und gesetzt werden.

// Verwende openssl und gib einen privaten Schlüssel an
$filter = new Zend_Filter_Encrypt(array('adapter' => 'openssl', 'private' => '/path/to/mykey/private.pem');

// natürlich kann man die öffentlichen Schlüssel auch bei der Instanziierung angeben
$filter->setPublicKey(array('/public/key/path/first.pem', '/public/key/path/second.pem');

        

Hinweis: Es ist zu beachten das der OpenSSL Adapter nicht funktionieren wird wenn keine gültigen Schlüsseln angegeben werden.

Wenn man auch die Schlüssel selbst verschlüsseln will, muß man eine Passphrase mit der setPassphrase() Methode angeben. Wenn man Inhalte entschlüsseln will, die mit einer Passphrase verschlüsselt wurden, muß man nicht nur den öffentlichen Schlüssel, sondern auch die Passphrase um den verschlüsselten Schlüssel zu entschlüsseln.

// Verwende openssl und gib einen privaten Schlüssel an
$filter = new Zend_Filter_Encrypt(array('adapter' => 'openssl', 'private' => '/path/to/mykey/private.pem');

// Natürlich kann man die öffentlichen Schlüssel auch bei der Instanziierung angeben
$filter->setPublicKey(array('/public/key/path/first.pem', '/public/key/path/second.pem')
       ->setPassphrase('mypassphrase');

        

Zum Schluß muß man, wenn OpenSSL verwendet wird, dem Empfänger den verschlüsselten Inhalt, die Passphrase, wenn eine angegeben wurde, und den Umschlagschlüssel für die Entschlüsselung angeben.

Das bedeutet, das man die Umschlagschlüssel nach der Verschlüsselung mit der getEnvelopeKey() Methode holen muß.

Unser komplettes Beispiel für die Verschlüsselung von Inhalten mit OpenSSL schaut wie folgt aus.

// Verwende openssl und gib einen privaten Schlüssel an
$filter = new Zend_Filter_Encrypt(array('adapter' => 'openssl', 'private' => '/path/to/mykey/private.pem');

// natürlich kann man die öffentlichen Schlüssel auch bei der Instaiziierung angeben
$filter->setPublicKey(array('/public/key/path/first.pem', '/public/key/path/second.pem')
       ->setPassphrase('mypassphrase');

$encrypted = $filter->filter('text_to_be_encoded');
$envelope  = $filter->getEnvelopeKey();
print $encrypted;

// Für die Entschlüsselung siehe beim Decrypt Filter

        

HtmlEntities

Gibt den String $value zurück und konvertiert die Zeichen in Ihre entsprechende HTML Entitität wenn diese existiert.

Int

Gibt (int) $value zurück.

StripNewlines

Gibt den String $value ohne Zeilenumbruch Zeichen zurück.

RealPath

Erweitert alle symbolischen Links und löst Referenzen in '/./', '/../' und extra '/' Zeichen im Eingabepfad auf und gibt den kanonischen absoluten Pfadnamen zurück. Der sich ergebende Pfad hat keine symbolischen Links, '/./' oder '/../' Komponenten.

Zend_Filter_RealPath gibt bei einem Fehlschlag FALSE zurück, bzw. wenn die Datei nicht existiert. Auf BSD Systemen schlägt Zend_Filter_RealPath nicht fehl wenn die letzte Pfadkomponenten nicht existiert, wärend Sie auf anderen Systemen FALSE zurückgibt.

StringToLower

Gibt den String $value zurück und konvertiert alphabetische Zeichen zu Kleinschreibung wenn das notwendig ist.

StringToUpper

Gibt den String $value zurück und konvertiert alphabetische Zeichen zu Großschreibung wenn das notwendig ist.

StringTrim

Gibt den String $value zurück und entfernt alle Leerzeichen vom Begin und vom Ende.

StripTags

Dieser Filter gibt den Eingabestring zurück, wobei alle HTML und PHP Tags von Ihm entfernt werden ausser diesen die explizit erlaubt sind. Zusätzlich zur Möglichkeit zu definieren welche Tags erlaubt sind können Entwickler definieren welche Attribute über alle erlaubten Tags erlaubt sind und auch nur für spezielle Tags. Und Letztendlich bietet dieser Filter Kontrolle darüber ob Kommentare (z.B., <!-- ... -->) entfernt werden oder nicht.


Einführung
blog comments powered by Disqus

Select a Version

Languages Available

Components

Search the Manual