Kategorie-Archiv: Tutorials

PHP-Bug im Vergleichsoperator == ?

Heute habe ich, zusammen mit einem Kollegen, feststellen müssen dass der Vergleichsoperator scheinbar ein Typecasting bei Vergleichen zwischen (etwaigen) Integerwerten und Strings vornimmt – und zwar immer zu Integer-Werten. Das hat zur Folge, dass Vergleiche mit „0“ mit einem String „abc“ zu einer wahren Aussage führen. Bei uns hat das eine „kleine“ Sicherheitslücke gerissen, die alles andere als schön war. Das ganze lässt sich unter Debian mit der PHP-Version 5.2.6-0.1~lenny1 und folgendem Code nachvollziehen:

$a = 0;
$b = "abdbbsb";
 
if($a == $b) echo 1;
else echo 0;
# Ausgabe 1

if((string)$a == $b) echo 1;
else echo 0;
# Ausgabe 0

if($a === $b) echo 1;
else echo 0;
# Ausgabe 0

Automatische Spracherkennung in PHP

Da ich es bisher schon ein paar Projekten benötigt habe, möchte ich hier ein kleines Script zur Ermittlung der vom Benutzer (bzw. Browser) gewünschten Sprache veröffentlichen. Es geht dabei nicht darum anhand der Benutzereingaben oder der geografischen Herkunft des Benutzers die Sprache zu ermitteln, sondern nur anhand der übermittelten Browserdaten. Natürlich hat dieses Verfahren den Nachteil, dass wenn keine vernünftige Anforderung durch den Browser erfolgt, eine Standardsprache verwendet werden muss. Andererseits wird dem Benutzer auch nicht auf Grund der Herkunft seiner IP-Adresse, die nicht mit seiner tatsächlichen Herkunft übereinstimmen muss, eine x-beliebige Sprachversion der Website vorgesetzt wird. Der Code bedarf denke ich über die schon vorhandenen Kommentare hinaus keiner weiteren Erläuterung.

// set $requested_language = "" for security reasons (activated register globals or what ever else)
$requested_language = "";
// first step: check if this is allready done
if (!isset($_SESSION["language"]))
{
	// second step - check if something usefull had been committed
	if(isset($_SERVER["HTTP_ACCEPT_LANGUAGE"]) && $_SERVER["HTTP_ACCEPT_LANGUAGE"] != "")
	{
		// get the iso-code for the requested language - mostly these are the first alphabethical and decimal signs)
		$requested_language = preg_split("/[\W]+/",$_SERVER["HTTP_ACCEPT_LANGUAGE"], 2);
		$requested_language[0] = strtolower($requested_language[0]);
	}
	// set the language, if the first signs are alphabetical or decimal and if there is a language-file in the given folder
	if (preg_match('/^[\w]{2,3}$/', $requested_language[0]) && is_file(BACKEND_PATH."config/languages/".$requested_language[0].".php")) 
	{
		$_SESSION["language"] = $requested_language[0];
	}
	// otherwise set the DEFAULT_LANGUAGE - you will have to set this somewhere else (e.g.: define("DEFAULT_LANGUAGE", "de"))
	else 
	{
		$_SESSION["language"] = DEFAULT_LANGUAGE;
	}
}
// include the language-file - in this case the containing array $langVar have all the language-vars
require_once (CONFIG_PATH."languages/".$_SESSION["language"].".php");

Was lange wärt …

… wird endlich gut. Das gilt auch für meine Bachelorarbeit die ich im Rahmen dieses Artikels nun endlich veröffentlichen möchte. Was, trotz schon lange erfolgter Freigabe, immer wieder hinaus geschoben wurde. Benotet wurde sie (insgesamt) mit einer 2,3.

Kurz zum Thema der Arbeit: es ging um die Usability von sogenannten Web2.0-Seiten. Im Rahmen der Arbeit habe ich geprüft, in wie weit die wichtigsten Richtlinien – hierzu zählen unter anderem 2 ISO-Normen und ein Bundesgesetz – mit dem JBoss Richfaces Framework umsetzbar sind. Interessant dürfte der Inhalt der Arbeit aber auch allgemein, wenn es um das Design und die Entwicklung von Internet- und Intranetanwendungen geht. Das genaue Thema lautete: „Umsetzbarkeit der Standards zur Dialoggestaltung und Barrierefreiheit mit
JBoss Richfaces“

Hier nun kurz zusammen gefasst der Inhalt der Arbeit:

1. Teil: Zusammenfassung und Erklärung der wichtigsten Begriffe in der Software-Ergonomie

2. Teil: Erklärung der Anforderungen aus den Normen und Gesetzen zur Software-Ergonomie und Barrierefreiheit, sowie die Umsetzbarkeitsstudie

3. Teil: Zusammenfassung der Ergebnisse aus Teil 3

4. Teil: Fazit und Ausblick

Für die Unterstützung auf meinem Weg bis hin zum abgeschlossenem Studium, möchte ich meinem (nunmehr) ehemaligen Arbeitgeber, der Deutschen Telekom AG (Telekom Training GmbH) und hier speziell meiner Betreuerin auf Seiten der TT sowie meinen Kollegen bei meinem Einsatzbetrieb (T-Systems) in Weinheim danken. Auch wenn es während dieser Zeit nicht immer schön war, möchte ich sie doch zum allergrößten Teil nicht missen. Weiterhin gilt mein Dank meinen Eltern und meiner Freundin, die mich während der ganzen Zeit nicht nur moralisch unterstützt haben.

Hier nun also der versprochene Download-Link! (klick hier)

Die Arbeit steht unter der Creative-Commons-Lizenz, es dürfen Veränderungen an ihr vorgenommen und sie darf weiterverbreitet werden. Einschränkungen:

1. Mein Name (als Urheber) darf nicht aus dem Text entfernt werden
2. Änderungen müssen veröffentlicht und ebenfalls unter der CC-Lizenz veröffentlicht werden, des weiteren würde ich mich freuen über Änderungen in Kenntnis gesetzt zu werden
3. Die kommerzielle Nutzung des Inhaltes dieser Arbeit ist nur unter den in 1. und 2. genannten Bedingungen gestattet