Wem Argumente an der URL nicht SEO freundlich genug sind:
/abc.php?key=value
der kann eine Variante in dieser Art vorbauen:
if(isset($_SERVER['PATH_INFO'])) {
$ap = explode(‘/’, $_SERVER['PATH_INFO']); // in key/value pairs zerlegen
array_shift($ap);
while(count($ap) >= 2) {
$key = array_shift($ap);
$value = array_shift($ap);
$_GET[$key] = $value;
} // while
} // if PATH_INFO
Dann geht die gleiche URL zusätzlich auch als
/abc.php/key/value
Sieht gleich viel hübscher aus. Vorsicht allerdings bei relativen [...]
Alternative zu URL Parametern
Umlaute Zweilerlei
Baim Auslesen von EXIF-Informationen kann man auf beliebige Kodierungen von Umlauten stoßen. Die drei meisten Fälle sind so abgefangen:
if(isset($ea['ImageDescription'])) {
$caption = $ea['ImageDescription'];
$encoding = mb_detect_encoding($caption, ‘ASCII, UTF-8, ISO-8859-1′);
if(‘UTF-8′ == $encoding)
$caption = utf8_decode($caption);
}
Damit werden ISO und UTF Umlaute gleich dargestellt.
binäre Dateien und readfile
Wer sich immer wieder über PDF Dateien ärgert, die angeblich defekt vom PHP erzeugt wurden, auf dem Server abgelegt jedoch intakt sind: readfile wandelt anscheinen NULL Bytes in Blanks um im Datenstrom. Ein Parameter für binäres Verhalten ist der aktuellen Doku erst mal nicht zu entnehmen. Daher geht es erst mal nur so:
$pdf = file_get_contents($tmppdf,FILE_BINARY);
echo [...]
Cachen verboten
Soweit scheint dieses Stück Code genau das zu machen was es soll. Eine Datei wird generiert und landet immer frisch auf dem Tisch:
header(‘Content-Type: image/png’);
header(‘Content-Disposition: attachment; filename=”flyer.png”‘);
header(‘Content-Transfer-Encoding: binary’);
header(‘Content-Length: ‘ . filesize($tmpfile));
header(‘Cache-Control: no-store, no-cache, must-revalidate, proxy-revalidate, private’); // HTTP/1.1
header(‘Cache-Control: pre-check=0, post-check=0, max-age=0′, false);
header(‘Last-Modified: ‘.gmdate(‘D, d M Y H:i:s’) . ‘ GMT’);
header(‘Expires: ‘ . gmdate(‘D, d M [...]
Administration via URL
Kleine Ursache, große Wirkung:
Ein kleines Script auf dem Server soll einmalig an die User eine eMail schreiben. Man ruft es im Browser auf, es versendet, schreibt noch brav ein wenig Logging auf den Schirm und ist fertig. Toll!
Leider: Im Browser war ein Alexa-Plugin installiert (die google Toolbar wäre wohl der gleiche Fall), dadurch lernt eine [...]
Selbsttest
Für das sichere Gefühl nach dem Compilieren:
make test
Sollte man, wenn es schon vorhanden ist, immer ausführen! Gerade bei z.B. MySQL ist es beruhigend zu sehen, daß die meisten Features dadurch entweder als passed bestanden werden oder halt bei skipped einfach nicht zutreffen, aber wenigstens ist kein failed dabei.
Nur schade, daß MySQL nicht gerade hilfreiche Meldungen [...]
Reload sichere Formulare
Ein beliebter Fehler ist, einen Reload einer Webseite nicht im Workflow einzuplanen. Am besten pflegeleicht wird es, wenn man Aktion und Reaktion auf verschiedene URLs und Dateien verteilt. Als Beispiel mal ein Kontaktformular:
kontakt.php
kontakt_do.php
kontakt_done.php
kontakt_err.php
Hier wird die Aufgabeverteilung wie folgt gestreut:
Darstellen des Formulars ohne Interaktion mit einem Backend wie Mailer oder Datenbank,
Empfang der Formulardaten via POST im [...]
Vergleich mit Konstanten
Immer die Konstante links der Komparators halten, falls man mal aus Versehen eine Zuweisung draus macht.
if 13 == Pech then
Prepared Statements
Wenn möglich alle extern gelieferten Parameter via Prepared Statements einbinden. SQL Injection wird so unwarscheinlicher.
Datenbank Zugriffsrechte
Der Datenbankbenutzer mit dem das Backend an eine DB sich anmeldet braucht nur minimale Rechte wie INSERT, UPDATE, SELECT und ggf. DELETE zu besitzen. Er braucht keine CREATE, FILE oder DROP Rechte!
| M | D | M | D | F | S | S |
|---|---|---|---|---|---|---|
| « Apr | ||||||
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 | |||
Recent Entries
Recent Comments
- Keine Kommentare vorhanden.
