|
06:26:05 |
Sicherheitsprobleme von Wikis und GegenmaßnahmenNeben dem anfänglichen Einfügen von Links auf Hackerseiten oder kritischen Inhalten in Commentboxen finden sich in den Logfiles ständig weitere Angriffsversuche.
Der Code ist unten dokumentiert. Für Verbesserungsvorschläge und weitere Ideen sind wir immer dankbar! RewriteRules in .httaccess im aktuellen DirectoryAchtung: 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!!
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.
![]() |
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
____________________________________________________________________________