Wege weisende Werbung
Rettet den Regenwald e.V.
Das Waldprojekt
Was kann ICH denn TUN?
www.bessereweltlinks.de

Kolibri-Ethos


Globale Ziele


Lokale Wege


Pinnwand



06:26:05
121591 Zugriffe




Wege
Suche die Liebe!
Schütze das Leben!
Verehre das Heilige!
Sei Du selbst!
Gestalte diese Welt!

und Worte
Die Situation
Die Grenzen
Das Netz
Die Begegnung
Das Auslegen

Sicherheitsprobleme von Wikis und Gegenmaßnahmen

Neben dem anfänglichen Einfügen von Links auf Hackerseiten oder kritischen Inhalten in Commentboxen finden sich in den Logfiles ständig weitere Angriffsversuche.
Bei anderen PmWiki-Seiten waren einige nicht so nette und erfolgreiche Angriffe zu sehen.
Das hat zu folgenden Gegenmaßnahmen geführt:

  1. Mithilfe der RewriteEngine von Apache werden alle URLs gefiltert und solche mit Sonderzeichen, mit libwww-perl, “..” oder mit http: im Querystring abgelehnt. Mithilfe der RewriteEngine kann ein Angriff auf unterster Ebene vor jedem Zugriff auf das Filesystem oder der Verarbeitung in Skriptinterpretern oder Applikationsservern abgefangen werden. Gegen Würmer und Botnetze sind diese Maßnahmen dringend zu empfehlen.
  2. Alle übergebenen Variablen werden nach verschiedenen Suchmustern und Sonderzeichen durchsucht.
  3. In eingegebene Kommentaren werden alle Links deaktiviert und Kommentare mit bestimmten Wörtern gelöscht.
  4. Edit und Admin Zugänge werden nicht nur über starke Passwörter abgesichert (Cookies, geschützte Verzeichnisse) (IP-Prüfung In Arbeit)
  5. Einzelne IPs und IP-Bereiche von denen aus das Forum zugemüllt wird, können bei Untergruppen (Forum) ausgesperrt werden.
  6. Nach den Vorschlägen bei Heise wurden sichere PHP.INI Dateien in allen offenen Verzeichnissen mit PHP-Scripts eingefügt.

Der Code ist unten dokumentiert. Für Verbesserungsvorschläge und weitere Ideen sind wir immer dankbar!


RewriteRules in .httaccess im aktuellen Directory

Achtung: Bei den RewriteRules kann man etwas durcheinander kommen. Die Pattern werden hier ähnlich, aber nicht exakt nach der Perlsyntax gebildet und die Patterns für die Mustererkennungsbefehle in PHP werden wieder etwas anders gebildet!!
(siehe: http://www.modrewrite.de/mod_rewrite.links.sources.phtml)

Order Deny,Allow
Allow from all

# Use mod_rewrite to enable "Clean and Secure URLs" for a PmWiki installation.
RewriteEngine On
# Define the rewrite base.
RewriteBase /

#libwww-perl verbieten
RewriteCond %{HTTP_USER_AGENT} ^libwww-perl
RewriteRule ^.*$ - [F]


#http-variablen verbieten
# (    )+ Die Klammer umschließen das Muster, + bedeutet: Dieses Muster muss mindestens einmal vorkommen.
# Dann wird zur RewriteRule verzweigt und diese schickt alles nach Forbidden 403.
RewriteCond %{QUERY_STRING} (\.\.)+  [OR]
RewriteCond %{QUERY_STRING} (http:)+ 
RewriteRule ^.*$ - [F]

#Allgemeine Regeln: Schutz vor Sonderzeichen
# [    ] bildet eine Menge von erlaubten Zeichen 
#  ^ besagt: finde ein Zeichen, das nicht zu dieser erlaubten Menge gehört (Gegenmenge). 
#  \s steht für Leerzeichen. Der - muss allein ganz am Anfang stehen. 
#  ?& kann man streichen, da beides vorher zu Umgebungsvariablen verarbeitet wird und nicht Teil der URL ist.
#  ]+ nach der Menge gibt an, dass das nicht erlaubte Zeichen ein oder mehrmals vorkommen muss, bevor die Regel anschlagt.
#  [L] schlägt die Regel an, bricht ModRewrite hier ab.
RewriteRule [^-a-zäüößA-ZÄÜÖ0-9#\+\.%_\/\s]+ not_accepted_go_away.txt [L]


# Send requests without parameters to pmwiki.php.
RewriteRule ^$           pmwiki.php  [L]
# Send requests for index.php to pmwiki.php.
RewriteRule ^index\.php$ pmwiki.php  [L]
# Send requests to pmwiki.php, appending the query string part.
RewriteRule ^([A-Z0-9\xa0-\xff].*)$ pmwiki.php?n=$1  [QSA,L]



Integriertes Script zum Prüfen der übergebenen Variablen

############   Eingabevariablen checken   #################

include_once("./cookbook/siteprotect.php");


<?php if (!defined('PmWiki')) exit();

# Es reicht den Array nach den Sonderzeichen zu durchsuchen und ggf die Anfrage mit exit abzuweisen.
# Action=edit von der Untersuchung ausnehmen, hier greift die Passwortsicherung und $text darf Sonderzeichen enthalten


#Abbruch bei unerlaubten Zeichen in den übergebenen Variablen
if (!($action=="edit")) {
#print("kein edit");
    if (stringcheck(arraytostring($_REQUEST))){
    print("Kein Zugang wegen unerlaubter Zeichen für die Anfrage: <p> ");
    if (true) {
        print(arraytostring($_REQUEST));
        }
    exit();
    }
}

#_____________________FUNKTIONEN_____________________________________


function arraytostring($request){
# geht durch den Eingabearray und verkettet ggf auch Unterarrays zu einem String
$strrequesttext ="";
$strDelimiter  = "____";
while(list($strName,$value) = each($request))
 {
  if(is_array($value))
  {
   foreach($value as $value_array)
   {
       if(!($value_array=="text")){
       $strrequesttext .= $value.$strDelimiter.$value_array."-—"; #oder $strName statt  $value
       }
   }
  }
  else
  {
    if(!($strName=="text")){
    $strrequesttext .= $strName.$strDelimiter.$value."++++";
    }
  }
 }

return $strrequesttext;

}


function  stringcheck($neu){
# Sucht erstes Vorkommen bestimmter Muster in dem übergebenen String
# Die Zeichen + und # werden akzeptiert  
$linkskennung = array("..","$","§","///","~","*","@","[","]","{","}","\\","^","€","°","(",);

$gefunden=false;
for ($mi = 0; $mi < count($linkskennung); $mi++) {
$Suchmuster = $linkskennung[$mi];
   while (strpos($neu, $Suchmuster) >0) {
   $gefunden=true;
   break;
   }
} # Ende for
return $gefunden;
}


Funktion für die Eingaben in Commentboxen

function HandleCommentPost($pagename) {
  global $_GET,$_POST,$JournalPattern,$DiaryPattern,$Author;
  global $AuthFunction, $oAuthFunction;
  if (!@$_POST['post'] || @$_POST['text']=='') Redirect($pagename);
  LinkDeaktivation();


.....

  exit;
}

function LinkDeaktivation(){
global $_POST;
$neu =$_POST['text'];
$post_lower =strtolower($neu);;
$linkskennung = array("www.","http://","<a ","href=","</a>");
$Ersatz ="-";

for ($mi = 0; $mi < 5; $mi++) {
$Suchmuster = $linkskennung[$mi];
   while (strpos($post_lower, $Suchmuster) >0) {
   $neu = eregi_replace (  $Suchmuster,  $Ersatz,  $neu );
   $post_lower = ereg_replace (  $Suchmuster,  $Ersatz,  $post_lower );
   }
} # Ende for
$_POST['text']= $neu ;
}



Beispiele für Angriffe:

Bei diesen Angriffen wurde wahrscheinlich nur das Edit-Passwort erraten.
Findet allerdings jemand eine Lücke, lassen sich PHP-Websites mit Crawlern relativ schnell finden und automatisch angreifen.


nur KolibriEthos.de

Feedback zu dieser Seite bitte unter Diskussion mitteilen oder für nicht-öffentliche Anmerkungen das Emailformular verwenden
( Letzte Änderung am 30.06.2008 )
____________________________________________________________________________

ThemenWolke der Kolibri-Ethos Site

Aktion Auslegen Begegnung Du Grenzen Grundbegriffe
Grundwerte HeiligesVerehren Kolibri LebenSchützen Netz
Regeln Situation WeltGestalten Ziele Weltreligionen

Ziele:
Frieden und Gerechtigkeit, Ehrlichkeit und Wahrheit, Glück und Zufriedenheit, Freundschaft und Liebe vermehren und durch stabile Strukturen sichern

____________________________________________________________________________