RSA Verschlüsselung unter PHP

Vor kurzem habe ich einige Präsentationen über Sicherheit in PHP-Anwendungen gesehen. Ein Thema dabei war, dass die gute alte MD5-Verschlüsselung bei Passwörtern nicht mehr ganz so sicher ist, weil es inzwischen einige einfache Methoden zur „Entschlüsselung“ gibt (z.B. mit Rainbow Tables oder Hash-Datenbanken). Ein erster Lösungsansatz zur Verbesserung der Passwortverschlüsselung ist häufig ein „Salt“ an den MD5-Hash anzuhängen, um es dem Angreifer zumindest zu erschweren. Aus meiner Sicht ist das allerdings mehr ein Workaround als eine wirklich sichere Lösung, daher habe ich nach einer Alternative zu MD5 gesucht und bin bei der RSA-Verschlüsselung hängengeblieben. Da es etwas kniffelig ist, die RSA-Verschlüsselung in einer PHP-Anwendung zu implementieren, gibt es von mir hier ein kleines HowTo. Ihr könnt die Verschlüsselung natürlich nicht nur für Passwörter verwenden, sondern für alle möglichen Daten.

» Weiterlesen

Zend Framework > Image ViewHelper

Warum gibt es für das Zend Framework eigentlich keinen ViewHelper zur Generierung von img-Tags?
Die Frage kann ich leider nicht beantworten, aber ich habe mir mal die Mühe gemacht, und einen entsprechenden ViewHelper geschrieben.

Diesen gibt es hier zum Download.

Und wo wir gerade beim Thema sind, kann ich auch gleich erklären, wie man eigene ViewHelper in seine Anwendungen implementieren kann. Dazu legen wir in unserer Anwendung zunächst einen neuen Ordner an (z.B. application/MyApp/Helper/View/ oder /application/MyApp/ViewHelper/ oder etwas vergleichbares). Anschließend erstellen wir eine neue Klassen-Datei für die Logik des ViewHelpers. Nehmen wir als Beispiel einen ViewHelper, der aus einem Unix-Timestamp ein lesbares Datum macht.

// Der Klassenname sollte natürlich eurer Ordnerstruktur entsprechen.
class MyApp_ViewHelper_FormatDate extends Zend_View_Helper_Abstract
{
	public function formatDate($date, $part = Zend_Date::DATETIME_MEDIUM)
	{
		$date = new Zend_Date($date, Zend_Date::TIMESTAMP);
		return $date->get($part);
	}
}

Jetzt haben die Logik schonmal fertig, aber woher weiß das Zend Framework, welche Klasser es aufrufen soll, wenn wir in unserem View-Script (Template) folgenden Aufruf starten?

Hallo Besucher,<br/>
heute ist <?php echo $this->formatDate(time()) ?>.<br/>
Viel Spaß auf unserer Webseite.

Um unseren ViewHelper beim Zend Framework anzumelden, gibt es zwei Möglichkeiten. Ich empfehle die erste Möglichkeit. Die ist meiner Meinung nach etwas sauberer.

Möglichkeit #1: Konfiguration
Wer eine globale Konfigurationsdatei (z.B. als .ini-Datei) verwendet, registriert den ViewHelper am besten so:

resources.view.helperPath.MyApp_ViewHelper = "/application/MyApp/ViewHelper/"

Pfad und Klassen-Prefix muss natürlich vorher angepasst werden.

Möglichkeit #2: Direkter Aufruf
Etwas ungeschickt, aber wer keine andere Wahl hat, kann ViewHelper mit folgendem Funktionsaufruf registrieren (am besten an einer globalen Stelle im Code):

$view->addHelperPath('MyApp/ViewHelper/', 'MyApp_ViewHelper');

Und jetzt lassen sich munter neuer ViewHelper anlegen. Das Zend Framework erkennt inzwischen alle Klassen, die im Verzeichnis /MyApp/ViewHelper/ liegen.

TYPO3: das Header-Feld im FCE verwenden

Häufig kommt es vor, dass das Header-Feld in einem Flexiblen Content Element (also der eigentliche Titel des Elements) unter TYPO3 leer bleibt und man stattdessen ein neues Feld für die Überschrift anlegt. Ich finde das immer wieder verwirrend, vor allem auch für die Redakteure der TYPO3-Webseite.
Aber es gibt eine Möglichkeit, das Header-Feld doch als Überschrift zu nutzen.

Als erstes ändern wir die Datenstruktur des FCEs und legen ein neues Feld an: „Überschrift“. Das Element Preset setzen wir anschließend auf None (TypeScript only). Dann unter Data processing folgenden TypoScript-Code eintragen:

10 = TEXT
10.data = register:tx_templavoila_pi1.parentRec.header

Dieser Code holt sich das Header-Feld von dem Element.
Jetzt muss die Überschrift nur noch an die Stelle im HTML-Code eingesetzt werden, wo es hin soll und schon hat unser Flexilbes Content Element ein Feld weniger.

UPDATE 16.06.2011:
Wie oben beschrieben lassen sich im Übrigen auch die anderen Standard-Felder wie Untertitel und Überschriften-Link verwenden.
Unterüberschrift:

10 = TEXT
10.data = register:tx_templavoila_pi1.parentRec.subheader

Überschrift-Link:

10 = TEXT
10.typolink.parameter.data = register:tx_templavoila_pi1.parentRec.header_link
10.typolink.returnLast = url

Die dritte Zeile „returnLast“ ist natürlich optional.