Hi, ich wollte nochmal auf dien Posting bezüglich des Hacks deiner Seite zurück kommen. Wie ich mir dachte liegt es an den PHP-Scripten, schau Dir mal den ersten Eintrag deines Gästebuches an und melde dich bei mir, ich erklär dir dann, wo die Lücke wahrscheinlich liegt.
Gruß Xafford
Viren, Spyware, Datenschutz 11.258 Themen, 94.807 Beiträge
Hi, hab deine Mail bekommen und mir, wie du gesagt hast, das erste Posting meines GB angesehen. Tja, anscheinend hast du Recht. Wie bist du darauf gekommen? Und wie bist du ins Admin-Web-Frontend gelangt?
Gruß,
Björn
Das Problem ist der include. Du hängst zwar ein .'php' an, aber include inkludiert auch Dateien über Server hinweg. Ein kleines Script auf einem anderen Server mit http://url übergeben inkludiert den fremden Code und man kann im Prinzip auf deinem Webspace machen, was man will.
Um das zu beseitigen kannst Du entweder den übergebenen Parameter besser überprüfen, was aber unsicherer ist, oder Du machst eine Positivliste, was sicherer ist. Das sollte dann ungefähr so aussehen:
switch($HTTP_GET_VARS['site'])
{
case 'blabla':
$url='url1.php';
break;
...
}
Hey vielen Dank, ich werde das morgen gleich mal umsetzen. Allerdings stellt sich mir da noch eine Frage. Wenn ich dich jetzt richtig verstanden habe, dann muss ich in der Alternation alle möglichen Sites abfragen. Ich hab etwa 22 Stück. Wenn bei jedem Seitenwechsel ein switch mit max. 22 cases durchgeführt werden muss, wird dann das Laden der Site nicht langsamer? Oder macht sich die Verzögerung bei einem durchschnittlichen Webserver nicht bemerkbar?
Das macht sich so gut wie nicht bemerkbar. Es wäre vielleicht meßbar im Bereich von Millisekunden, aber wirklich nicht merklich.
Wenn Du dir die Administration bei neuen Seiten erleichtern willst, dann kannst Du auch eine Datei bauen, die die Mappings von Seitenparameter und URL enthält, aber das könnte eventuell neue Lücken öffnen je nach Ausführung. Also würd ich bei 22 Seiten einen einfachen switch nutzen.
Ok, ich habe meine Website nach deinem Vorschlag hin geändert. Ich hoffe, ich habe alles richtig gemacht. Die Seiten werden jetzt mittels der switch-Anweisung inkludiert. Zur Sicherheit habe ich sämtliche Passwörter nochmal geändert. Kannst du evt. nochmal auf meiner Website vorbeischauen ob das jetzt ok ist?
Gruß,
Bo
Sorry, aber geht immer noch. Was noch fehlt ist, daß Du die Variable $url vorbelegst, bzw sicher stellst, daß diese nicht per URL übermittelt werden kann.
Zum Beweis, daß es noch geht hab ich dir eine Bilddatei in das Verzeichnis gelegt, zu finden unter:
Screenshot
Hm Mist das verstehe ich jetzt nicht wirklich. Was muss ich denn da tun, damit das funktioniert? Momentan sieht es ja so aus:
switch($HTTP_GET_VARS['site'])
{
case 'projects':
$url='prog_projects.php';
break;
case 'tricks':
$url='prog_tipps.php';
break;
....
....
include ($url);
}
?>
aussehen sollte es so:
$url='';
switch($site)
{
case 'projects':
$url=prog_projects.php';
break;
...
default:
$url='home.php';
}
include($url);
So wäre es am sichersten.
Ok ich habs jetzt geändert. Wo ist eigentlich der Unterschied zwischen $HTTP_GET_VARS['site'] und $site ? Gibts da auch einen sicherheitsrelevanten Unterschied?
Ja und nein. Es gibt dabei den Unterschied, daß $HTTP_GET_VARS['site'] die nur für Variablen gilt, die über die URL übergeben werden, wird site z.B. über ein Formular mit POST versandt wirkt es nicht.
Wenn in der php.ini allerdings register_globals auf On steht macht es sicherheitstechnisch keinen großen Unterschied, es empfiehlt sich trotzdem auf die $HTTP_ Variablen zu setzen, da register_globals ab PHP4.1.0 aus Sichehreitsgründen auf Off steht und dann $site nicht mehr gesetzt wäre auch wenn über die URL site gesetzt wird.
Ok so weit so gut. Hoffe, meine Website ist nun einigermaßen sicher vor weiteren Angriffen dieser Art. Leider musste ich meine komplette Tipps&Tricks-Rubrik runter nehmen, da nochmal gut 50 Dateien im switch berücksichtigt werden müssten. Da würde das switch dann doch einen etwas großen Umfang nehmen. Könntest du nochmal kurz testen, ob es jetzt geht?
Also die alten Lücken scheinen geschlossen, was allerdings nicht bedeutet, daß es nicht noch andere gibt. Ich vermute aber, daß das ehemalige Einfallstor in deine Seite jetzt erst mal geschlossen ist.
Das ist ja erstmal eine gute Nachricht. Dass es wahrscheinlich noch andere Sicherheitslücken in meiner Website/auf meinem PC/auf dem Webserver geben kann, ist natürlich nicht auszuschließen. Dank dir habe ich jetzt aber zumindest diese offene und leicht auszunutzende Sicherheitslücke schließen können. Komisch, dass der technische Support meines Hosters nicht auf die Idee gekommen ist. Da hieß es sofort mein PC hätte eine Sicherheitslücke. Und hier bei Nickles sah es nicht anders aus. Alle waren der Meinung, ich hätte einen Trojaner, den meine unzähligen Scanner wie Kaspersky, BitDefender, a2, PestPatrol nicht nicht finden könnten. Du warst der einzige, der sich meine Website angesehen hat und da dann auch den Fehler entdeckt hat. Also nochmals vielen Dank für deine Bemühungen und die erfolgreiche Hilfe.
Gruß,
Bo
Keine Ursache.