Inhaltsverzeichnis
PHP
Apache-Kennwörter mit PHP erzeugen
Leider ist die Erzeugung der Kennwörter für die htaccess-Dateien etwas ungeschickt gelöst. Es gibt grundsätzlich vier Möglichkeiten :
- Kennwörter im Klartext (völliger Wahnsinn aber unter Windows am einfachsten)
- Crypt (Aus meiner Erfahrung plattformabhängig !?)
- MD5 (Leider ist der MD5 von Apache nicht standardkonform und damit mit keinem andern Programm so einfach zu erzeugen)
- SHA1-Base64 (Die Methode der Wahl)
SHA1-Base64 ist einfach ein SHA1 der Base64-kodiert wird. Allerdings wird nicht der Hexstring kodiert den jede normale Anwendung ausspuckt sondern deren ASCII-Version. Also muß man wie folgt vorgehen :
- SHA1-Key erzeugen ⇒ Hexstring
- Jedes Hex-Byte in seinen ASCII-Wert wandeln
- Den neuen String Base64-Kodieren.
Unter PHP (und ich nehme an die meisten brauchen es dort) sieht das folgendermaßen aus :
$sha1base64=base64_encode(pack("H*",sha1($kennwort)));
Mit diesem Wert kann dann einfach die Kennwortdatei erzeugt werden. Um Apache zu zeigen, welch Verschlüsselung man benutzt muß nur ein {SHA} vor das Kennwort gesetzt werden.
username:{SHA}verschlüsseltes Kennwort
testuser:{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=
Wie sieht ein Downloadheader in PHP aus
Eigenlich ist es ganz einfach. Nur zwei Dinge :
- Es darf kein Zeichen vor dem Header übertragen werden.
- Die Groß/Kleinschreibung muß genau stimmen.
header("Content-Type: application/octet-stream",TRUE); header("Content-Transfer-Encoding: binary"); header("Cache-Control: post-check=0, pre-check=0"); header("Content-Disposition: attachment; filename=".$name,TRUE); header("Content-Length: ".filesize($file),TRUE); //Und die Datei gleich hinterher $fp=fopen($file,"rb"); if ($fp!=FALSE) { while (!feof($fp)) { set_time_limit(30); $buffer = fread($fp, 8192); print $buffer; } }