Archive for December, 2006

Was mich an Firefox 2 etwas nervt ist der Close-Button auf den einzelnen Tabs. Vorher gab es einen globalen Close-Button ganz rechts, mit dem man schnell mehrere Tabs schließen konnte.

Um das “alte” Behaviour wieder herzustellen muss unter about:config der Eintrag browser.tabs.closeButtons auf 3 gesetzt werden.

Über die Sicherheit der Daten innerhalb einer Webanwendung sollte man sich stets Gedanken machen. übergibt man POST-Variablen ungeprüft der Anwendung kann die Sicherheit bereits gefährdet sein.

Angreifer können unter Umständen mittels SQL-Injektion Anfragen verändern oder neue erstellen.

Meine Schutzmaßnahme in einer PHP-Anwendung mit MySQL besteht in einer kleinen Hilfsfunktion, die alle Variablen, die in einer Anwendung verarbeitet werden für den SQL-Syntax valide terminiert:


// sanitize strings for db queries
function sanitize_sql($value) {
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
return mysql_real_escape_string($value);
}

In jeder Datenbankanfrage, der Variablen übergeben werden, bereinigt diese Funktion eventuellen Schadcode mittels Terminierung:


// get userID
function check_user($username, $userpass) {
$sql="SELECT userid
FROM mars_users
WHERE username='".$this->sanitize_sql($username)."' AND
userpass='".$this->sanitize_sql(md5($userpass))."' LIMIT 1";
$result=mysql_query($sql) or $this->errorLog($this->page, mysql_error());
if (mysql_num_rows($result)==1):
$resultarray=mysql_fetch_assoc($result);
return $resultarray['userid'];
else:
return false;
endif;
}

In PHP selbst kann man auch Variablen mittels Regular Expressions prüfen. Eine einfache Funktion zur Überprüfung eines Strings könnte so aussehen:


// sanitize string
function sanitize_string($value) {
$value=preg_replace("/[^\w\040\-_.!?]/","",$value);
$value=trim($value);
return $value;
}

Dazu bietet sich noch die Validierung von Formulareingaben mittels JavaScript an, wie im Beitrag vorher erwähnt.

Unter http://regexlib.com findet man eine sehr nette Sammlung an Regular Expressions.

Möchte man beispielsweise ein Eingabefeld eines Formulars mit Regular Expressions validieren kann das mit JavaScript so aussehen:


<script type="text/javascript"><!--
function allow_alpha(obj) {
if (/[^a-z]/i.test(obj.value))
obj.value=obj.value.replace(/[^a-z\040\-_.!?]/gi,'');
obj.value+='';
obj.focus();
return;
}
function allow_numeric(obj) {
if (/[^0-9]/i.test(obj.value))
obj.value=obj.value.replace(/[^0-9\040\-]/g,'');
obj.value+='';
obj.focus();
return;
}
function allow_alpha_numeric(obj) {
if (/[^\w]/i.test(obj.value))
obj.value=obj.value.replace(/[^\w\040\-_.!?]/gi,'');
obj.value+='';
obj.focus();
return;
}
// --></script>
<input onkeyup="allow_alpha(this);" size="20" type="text" />alpha
<input onkeyup="allow_numeric(this);" size="20" type="text" />numeric
<input onkeyup="allow_alpha_numeric(this);" size="20" type="text" />alpha numeric