Apache und PHP Versions-Header entfernen

Apache und PHP sind unter Ubuntu standardmässig etwas gespächig einstellt und teilen dem Browser so immer die Apache und PHP Version mit. Auch die Serversignatur (bei Fehlermeldungen) zeigt die Versionsnummern an. Dies ist aufgrund der Sicherheit nicht empfehlenswert, denn was der Hacker nicht weiss, mach ihn nicht heiss. Die HTTP-Header sehen Standardmässig so aus:
HTTP/1.1 200 OK
Date: Mon, 04 May 2009 11:23:04 GMT
Server: Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.5 with Suhosin-Patch
X-Powered-By: PHP/5.2.4-2ubuntu5.5

Content-Length: 4045
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html


In der Datei apache2.conf kann man mit den Optionen ServerTokens und ServerSignature die HTTP-Headers und die Signatur etwas kürzen:
ServerTokens Prod
ServerSignature Off

Die HTTP-Headers vom Apache sehen dann nur noch so aus:
HTTP/1.1 200 OK
Date: Mon, 04 May 2009 11:43:17 GMT
Server: Apache
X-Powered-By: PHP/5.2.4-2ubuntu5.5

Content-Length: 4045
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html


Nun muss nur noch das X-Powered-By von PHP weg und dann ist sind die Headers sauber. Dazu muss man in der Datei php5.ini die Option expose_php anpassen:
expose_php = Off
Und nun sind in den Headers keine Versionsnummern mehr drin.
HTTP/1.1 200 OK
Date: Mon, 04 May 2009 11:45:13 GMT
Server: Apache
Content-Length: 4045
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html

mySQL Passwort ändern

Wie man einen mySQL Server unter Ubuntu Linux installiert habe ich ja schon beschrieben. Der erste Schritt, den man nach der Installation machen sollte ist das ändern des Passwortes. Denn sonst kann man ohne Passwort auf den mySQL Server zugreifen. Wenn auch nur vom localhost.
Mit den folgenden Befehlen kann man das root Passwort ändern.
mysql -u root -p
Enter password:
mysql> set password=password("neues passwort");
Wenn man sich nun wieder bei mySQL einloggt, muss man das neue Passwort eingeben.

Trafficklau mit htaccess verhindern

Das Szenario ist wohl manchen Webdesigner bekannt. Bilder die man auf dem eigenen Webserver hat, werden von anderen Leuten direkt eingebunden. Dies führt zu einem erhöhten Traffic, denn man schlussendlich ja selber bezahlt. Derjenige, der das Bild auf einer anderen Webseite einbindet gibt kaum die Quelle an und zahlt natürlich auch nichts an die höheren Traffickosten. Ich habe bereits früher über einige Möglichkeiten zum verhindern von Trafficklau berichtet. Nun habe ich noch eine andere Möglichkeit. Mittels einer htaccess Datei werden Zugriffe mit bestimmten Referer auf Bilder geblockt. Dies setzt einen Apache Webserver voraus.
# kein zugriff auf bilder fuer die angegebenen referer
<Files ~ "\.(gif|GIF|jpg|JPG|bmp|BMP|jpeg|JPEG|pdf|PDF)$">
    SetEnvIfNoCase Referer bbs bilderklau=yes
    SetEnvIfNoCase Referer ebay bilderklau=yes
    SetEnvIfNoCase Referer foren bilderklau=yes
    SetEnvIfNoCase Referer forum bilderklau=yes
    SetEnvIfNoCase Referer gamez bilderklau=yes
    SetEnvIfNoCase Referer guestbook bilderklau=yes
    SetEnvIfNoCase Referer jappy.de bilderklau=yes
    SetEnvIfNoCase Referer kwick.de bilderklau=yes
    SetEnvIfNoCase Referer live.com bilderklau=yes
    SetEnvIfNoCase Referer mybbforo bilderklau=yes
    SetEnvIfNoCase Referer myspace bilderklau=yes
    SetEnvIfNoCase Referer phpBB bilderklau=yes
    SetEnvIfNoCase Referer viewtopic.php bilderklau=yes

    deny from env=bilderklau
</Files>

Mit imgRed gibt es zudem ein Service im Internet, mit dem man zwar Bilder, aber nicht den Traffic klauen kann. Als Bildadresse gibt man die Adresse mit vorangestellter imgRed Adresse an. Zum Beispiel so:
http://imgred.com/http://plog.t-error.ch/images/35.jpg

Da imgRed das Bild aber Cached, wird dem Besitzer des Webspaces zwar kein Traffic gestohlen, das Bild aber immer noch. Dies lässt sich aber auch mit htaccess ganz einfach verbieten:
# imgRed blocken
order allow,deny
deny from 64.131.64.202
allow from all

Zeilenumbrüche aus Variabeln entfernen

Manchmal ist es wichtig, dass eine Variable nur eine Zeile hat. Zum Beispiel beim versenden von E-Mails über PHP kann es so möglich sein CC oder BCC Empfänger einzuschmuggeln. Verhinden kann man das ganz einfach mit dem folgenden Codeschnippsel:
<?
$trim
=array("name","subject","mail");
foreach(
$trim AS $value)
{
    
$_POST[$value]=preg_replace("/\n.*$/mi","",$_POST[$value]);
}
?>

Damit werden Zeilenumbrüche ein den Variabeln $_POST['name'], $_POST['subject'] und $_POST['mail'] entfernt.

Sichere Passwörter

http://images.t-error.ch/blog/64/image.gifIn den heutigen Zeit ist ein sicheres Passwort sehr wichtig. Bei manchen Computersystemen wird verlangt, dass man das Passwort jeden Monat ändert. Aber was ist ein sicheres Passwort und wie kreiere ich eines?

Ich habe einige Punkte zusammengestellt, die für ein sicheres Passwort wichtig sind.
  • das Passwort muss mindestes 8 Zeichen lang sein
  • es müssen Groß- und Kleinbuchstaben, Ziffern sowie Sonderzeichen vorkommen
  • Leerzeichen sind nicht zulässig
  • es sollte keine Tastaturfolge wie z.B. "qwerty" oder "asdfgh" sein
  • es sollte kein Wort einer bekannten Sprache sein
  • das Passwort sollte man schnell eingeben können, damit es niemand beim Eintippen mitlesen kann
  • das Passwort sollte für andere Benutzer sinnlos sein

Wie kommt man nun auf so ein Passwort? Wildes rumhacken auf der Tastatur führt wohl kaum zum erfolg.
Hier habe ich eine Möglichkeit um ein sicheres Passwort zu kreieren.

Schritt 1
Zuerst bracht man zwei bis drei Wörter, ob sie einen zusammenhang haben ist nicht wichtig. Die Wörter sollten zusammen mindestens 8 Zeichen haben.
nothing to loose


Schritt 2
Nun werden Buchstaben durch ähnliche Zahlen ersetzt. Ein o kann man durch 0 ersetzen, ein i durch eine 1 usw.
n0th1ng t0 l00se


Schritt 3
Wenn nötig kann man nun noch mehrere Zahlen hinzufügen oder doppelte abändern. Schlussendlich sollte man mindestens 2 verschiedene Zahlen haben
n0th9ng t5 l82se


Schritt 4
Nun kann man die Leerzeichen durch Sonderzeichen ersetzen. Zu beachten ist, dass gewisse Systeme Probleme mit einigen Zeichen haben. Mit , . - _ ( ) usw. fährt man aber immer gut.
Das Passwort sollte mindestes ein Sonderzeichen enthalten.
n0th9ng,t5_l82se


Schritt 5
Zum Schluss kommt noch die Gross-/Kleinschreibung. Es ist darauf zu achten, dass mindestes 2 Zeichen gross geschrieben werden. Optimal ist eine verteilung von je 50%.
n0tH9Ng,t5_L82sE


Schritt 6
Der letzte und wohl schwierigste Teil. Das auswenig lernen des Passwortes. Denn das beste Passwort nützt nichts, wenn es auf auf ein Post It geschrieben wird, das am Bildschirm klebt.


Hier noch ein weiteres beispiel:
Homer Simpson
H0mer S1mps0n
H0m4r S1mps6n
H0m4r,S1mps6n
H0m4R,S1mPs6N