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
OpenSSLAdapter 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
adapterOption nicht angibt oder setAdapter nicht verwendet, dann wird standardmäßig derMcryptAdapter 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
mcryptErweiterung 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
OpenSSLAdapter 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 |
