Beitrags-Archiv für die Kategory 'Coding'

Eingeloggt bleiben – Eine Funktion und ihre Tücken

Sunday, 16. August 2009 19:31

Sobald man irgendwo auf eine Seite mit Registrierung gelangt und man diese Seite öfer besucht, merkt man schnell, wie nervig es ist, selbst mit Firefox-Passwortmanager, ständig sich einzuloggen.
Als Programmeirer stellt sich schnell die Frage ob man eine Funktion ala “Eingeloggt bleiben” anbietet. Wie OWASP in ihren Top 10 empfehlen sollte jeder Entwickler auf diese aus Sicherheitsgründen verzichten.
Meiner Meinung nach sollte man jedoch gerade bei solch wichtigen Funktion usability vor Security stellen. Nun nicht falsch verstehen, natürlich sollte man auf Sicherheit achten. Aber gerade bei einem Login ist es wichtig, dass die Leute sich gerne wieder einloggen um Neuigkeiten zu erfahren. Ist der Login umständlich, so meldet man sich ungern noch einmal an, weil es eine geühlte Ewigkeit dauert.

Um troz einer Funktion “Eingeloggt bleiben” genug Sicherheit zu haben um auch das Cookie-Riding zu verhindern verweise ich also gerne auf diesen Eintrag.

Improved Persistent Login Cookie Best Practice

Thema: PHP | Kommentare (0) | Autor: Simon

Doppelposting vermeiden

Thursday, 13. August 2009 17:00

Das aktualisieren der Seite wird oftmals von Besuchern auch nach einem Forumular benutzt. Damit jedoch kein Doppelposting entsteht erkläre ich kurz eine Funktion.

Hierzu muss bereits am Anfang der php-Datei eine Session mit session_start(); gestartet werden.
Zusätzlich muss in das Formular ein zusätzliches Feld hinzugefügt werden. Der name kann natürlich Frei gewählt werden.

echo "<input name='rft' type='hidden' value='".random_form_token()."' />";

Bei der Verarbeitung des Formulars muss nun nurnoch vor dem Speichern dies hier abgeprüft werden.

if(random_form_token($_POST['rft'])){
  // Schreiben
}
else{
  // Doppelposting erkannt
}

Und nun hier noch die Funktion selbst.

function random_form_token($value=NULL){
	if($value == NULL){
		$token = hash("sha256","tanzmal".microtime());
		$_SESSION['random_form_token'] = $token;
		return $token;
	}
	else{
		if($value == $_SESSION['random_form_token']){
			unset($_SESSION['random_form_token']);
			return true;
 
		}
		else
			return false;
	}
}

Thema: PHP | Kommentare (0) | Autor: Simon

Standard Sprachen anhand des Browsers definieren

Saturday, 20. September 2008 15:36

Sobald man mehrere Sprachen unterstützt, ist es natürlich leicht den Besucher selbst aussuchen zu lassen welche Sprache er ansehen will.
Um die Standard-Sprache zu setzen habe ich auf selfhtml eine schöne Sprachfunktion gefunden.
Sinnvoll ist diese um eine Standardsprache auszuwählen und eine Menge an unterstützen Sprachen.

Thema: PHP | Kommentare (0) | Autor: Simon

Verzeichnis rekursiv auslesen (mit Dateigröße)

Friday, 12. September 2008 17:07

Ein Verzeichnis rekursiv mit PHP auszulesen bedarf es nicht viel.

Hier habe ich ein beispiel mit lediglich 3 kleinen Funktionen.

  • Die Erste gibt eine lesbare Dateigröße aus
  • Die zweite Funktion definiert, wie die Dateien angezeigt werden sollen
  • Die Dritte Liest die Ordner aus und ruft gegebenenfalls Sich slebst mit neuem Parameter auf
function byteConvert($bytes){
	$symbol = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
	$exp = 0;
	$converted_value = 0;
	if( $bytes > 0 ){
		$exp = floor( log($bytes)/log(1000) );
		$converted_value = ( $bytes/pow(1000,floor($exp)) );
	}
	return sprintf( '%.2f '.$symbol[$exp], $converted_value );
}
function file_detail($dir,$name){
	$stat = @stat($dir.$name);
	#print_r($stat);
	$returner .= "<td>$name</td>";
	$returner .= "<td>".byteConvert($stat['size'])."</td>";
	return $returner;
}
function rec_scan_dir($dir){
	$returner = "<table>\n";
	$files = scandir( $dir );
	sort($files);
	foreach($files as $file){
		if( $file!="." && $file!=".."){
			if(is_dir($dir.$file)){
				$returner .= "<tr><td class='dir'>$file</td></tr>\n";
				$returner .= "<tr><td><div class='dir_pad' style='padding-left:10px;'>".rec_scan_dir($dir.$file)."</div></td></tr>\n";
			}
			else{
				$returner .= "<tr>";
				$returner .= file_detail($dir,$file);
				$returner .= "</tr>\n";
			}
		}
	}
	$returner .= "</table>\n";
	return $returner;
}
 
$dir = './files/';
echo "<h1>$dir</h1>";
print_r(rec_scan_dir($dir));

Thema: PHP | Kommentare (0) | Autor: Simon

Localization Fun

Sunday, 6. July 2008 1:55

Um Webseiten zu internationalisieren, benötigt es mehr als nur die übersetzten Texte. Ich erkläre hier die Grundlagen die man benötigt um eine erfolgreiche Internationalisierung vorzunehmen.

Nehmen wir an wir haben unsere normale Seite. Natürlich sind hier durchaus mehr Texte denkbar.

1
2
echo "Herzlich Willkommen"."\n";
echo "Link zum Gästebuch";

[...]

Thema: PHP | Kommentare (0) | Autor: Simon