Sicherheitsinformationen für WWW2-Administratoren
Dateisystem-Rechte:
- nur Eigentümer (owner) und Gruppe benötigen Rechte, wobei Gruppe nur Lese und auf Verzeichnissen auch Ausführ- und Set-UID-Rechte benötigt
- die Verzeichnisse und Dateien sollten immer der Gruppe webserv zugeordnet sein, damit auch statische Inhalte (Bilder,CSS usw.) vom Webserver lesbar sind.
- Deshalb ist für Verzeichnisse das Set-UID-Flag auf Gruppen-Ebene eingetragen (chmod g+s dir) - bitte nicht zurücksetzen.
- ändern:
- auf www2.hu-berlin.de/webdav/<ihrverzeichnisname> können Rechte angeschaut und korrigiert werden
- Gruppen-Eigentümer können nur vom Server-Administrator (Mail an web-support@cms.hu-berlin.de) geändert werden und ist meist nicht nötig, wenn das Set-UID-Flag auf den Gruppen-Rechten der Verzeichnisse nicht gelöscht wurde.
Passwörter:
Passwörter innerhalb von Web-Anwendungen, wie Web-Content-Management-Systeme, Blogging, Wikis:
- mind. 8 Zeichen aus drei Zeichenklassen (Zeichenklassen: Groß-/Kleinbuchstabe, Zahlen, Sonderzeichen)
- keine Wörter, die man im Wörterbuch finden kann, auch keine Wörter mit Ersetzungen (O=0(Null) und dergleichen).
Updates für Ihre selbst installierte Software:
- ungepatchte Web-Anwendungen können missbraucht werden:
- Spammer
- Software-Verteilung
- Phishing
- für die meisten Web-Anwendungen gibt es Mailing-Listen, Newsticker etc., die über Updates informieren und Update-Anleitungen liefern
Eigene Skripte:
- häufigster Mißbrauch: Mail-Versand
- weitere Möglichkeiten: Phishing, verteilen illegaler Daten (Raubkopieren, (Kinder-)Pornographie etc.)
- Ursache: ungeprüfte Parameter aus Formularen, URLs, Datenbanken, Cookies
PHP: <code>$_GET, $_POST, $_REQUEST</code> müssen immer überprüft werden, und zwar auf das Prüfen, was drin
stehen darf und zwar sehr restriktiv; besonders gefährlich: zusätzliche Mail-Header aus ungeprüften Parametern
zusammenbauen - wird gerne von Spammern genutzt
Beispiel für den Check eine Mail-Adresse:
<pre>
function checkEMail($email) {
if (preg_match("^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$", $email)) {
list($username,$domain)=split('@',$email);
if ($domain == "cms.hu-berlin.de") return true;
}
return false;
}
</pre>
Perl: dasselbe Problem mit ungeprüften Parametern. Abhilfe: Shebang mit -T (taint check): #!/usr/bin/perl -T
use strict; use warnings; hilft auch