<?xml version="1.0" encoding="UTF-8"?><!-- generator="WordPress/2.9.2" -->
<rss version="0.92">
<channel>
	<title>theCurity</title>
	<link>http://www.theCurity.de</link>
	<description>Tipps und Tricks für sicherere Programmierung</description>
	<lastBuildDate>Fri, 25 Apr 2008 13:40:44 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	
	<item>
		<title>Alternative zu URL Parametern</title>
		<description><![CDATA[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(&#8216;/&#8217;, $_SERVER['PATH_INFO']); // in key/value pairs zerlegen
array_shift($ap);
while(count($ap) &#62;= 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 [...]]]></description>
		<link>http://www.theCurity.de/2008/04/25/alternative-zu-url-parametern/</link>
			</item>
	<item>
		<title>Umlaute Zweilerlei</title>
		<description><![CDATA[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, &#8216;ASCII, UTF-8, ISO-8859-1&#8242;);
if(&#8216;UTF-8&#8242; == $encoding)
$caption = utf8_decode($caption);
}
Damit werden ISO und UTF Umlaute gleich dargestellt.
]]></description>
		<link>http://www.theCurity.de/2008/04/23/umlaute-zweilerlei/</link>
			</item>
	<item>
		<title>binäre Dateien und readfile</title>
		<description><![CDATA[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 [...]]]></description>
		<link>http://www.theCurity.de/2008/03/31/binare-dateien-und-readfile/</link>
			</item>
	<item>
		<title>Cachen verboten</title>
		<description><![CDATA[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(&#8216;Content-Type: image/png&#8217;);
header(&#8216;Content-Disposition: attachment; filename=&#8221;flyer.png&#8221;&#8216;);
header(&#8216;Content-Transfer-Encoding: binary&#8217;);
header(&#8216;Content-Length: &#8216; . filesize($tmpfile));
header(&#8216;Cache-Control: no-store, no-cache, must-revalidate, proxy-revalidate, private&#8217;); // HTTP/1.1
header(&#8216;Cache-Control: pre-check=0, post-check=0, max-age=0&#8242;, false);
header(&#8216;Last-Modified: &#8216;.gmdate(&#8216;D, d M Y H:i:s&#8217;) . &#8216; GMT&#8217;);
header(&#8216;Expires: &#8216; . gmdate(&#8216;D, d M [...]]]></description>
		<link>http://www.theCurity.de/2008/03/27/cachen-verboten/</link>
			</item>
	<item>
		<title>Administration via URL</title>
		<description><![CDATA[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 [...]]]></description>
		<link>http://www.theCurity.de/2008/03/10/administration-via-url/</link>
			</item>
	<item>
		<title>Selbsttest</title>
		<description><![CDATA[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 [...]]]></description>
		<link>http://www.theCurity.de/2007/11/08/selbsttest/</link>
			</item>
	<item>
		<title>Reload sichere Formulare</title>
		<description><![CDATA[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 [...]]]></description>
		<link>http://www.theCurity.de/2007/10/18/reload-sichere-formulare/</link>
			</item>
	<item>
		<title>Vergleich mit Konstanten</title>
		<description><![CDATA[Immer die Konstante links der Komparators halten, falls man mal aus Versehen eine Zuweisung draus macht.
if 13 == Pech then
]]></description>
		<link>http://www.theCurity.de/2007/10/16/vergleich-mit-konstanten/</link>
			</item>
	<item>
		<title>Prepared Statements</title>
		<description><![CDATA[Wenn möglich alle extern gelieferten Parameter via Prepared Statements einbinden. SQL Injection wird so unwarscheinlicher.
]]></description>
		<link>http://www.theCurity.de/2007/10/16/prepared-statements/</link>
			</item>
	<item>
		<title>Datenbank Zugriffsrechte</title>
		<description><![CDATA[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!
]]></description>
		<link>http://www.theCurity.de/2007/10/16/datenbank-zugriffsrechte/</link>
			</item>
</channel>
</rss>
