• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[sicherheit] header('Location:

  • Ersteller Gelöschtes Mitglied 3007
  • Erstellt am
Status
Für weitere Antworten geschlossen.
G

Gelöschtes Mitglied 3007

Guest
schafe ich auf meiner homepage eine sicherheitslücke, wenn ich schreibe

PHP:
if($_GET['refresh'])
{
    header('Location: ' . $_GET['refresh']);
}

also könnte man den header irgendwie manipulieren, das böse leute an meine daten kommen?

MFG
 
Werbung:
Thoretisch wäre es möglich z.B. an Download-Dateien zu kommen, wenn ich deine Pfade kennen würde.
Die Location verändert die URL im Browser in den Wert den ich angebe.
 
Die Location verändert die URL im Browser in den Wert den ich angebe.

das weiß ich ja... aber könnte man den header so manipulieren das man jetzt z.b. orgendwie durch ?referer=index.php;+Content-Type: ....
an php daten kommen kann o.ä.
 
Werbung:
Sowas ist natürlich in deinem Script momentan Möglich.

Bei Headern solltest du immer sicherstellen, dass da nur Werte hinein gelangen, die dir auch passen!

- regular expressions
- [phpnet]header[/phpnet]

*edit*
Aus der phpnet geht folgendes hervor:
Anmerkung: Seit PHP 4.4.2 und PHP 5.1.2 unterbindet die Funktion das gleichzeitige Versenden mehrerer Header zum Schutz gegen Header Injection Angriffe.
Das heißt also, dass pro header() Befehl auch nur einer modifiziert werden kann.
 
Zuletzt bearbeitet von einem Moderator:
wenn ihr mir ein beispiel einer solchen attacke geben könntet, könnte ich auch versuchen sie zu verhindern *gg*
 
Werbung:
Ich weiß ja nicht, was für ein Zweck du mit deinem redirect hast.
Ich würde aber die Ziele die du erreichen möchtest, über ein CASE abfragen, und dann die URL selber in den header schreiben.
 
ok... case währ vielleicht schon eine IDEE aber es geht um viele verschiedene dateien... das CMS ist modular erweiterbar und somit kann ich nicht einfach die case ändern weil ich nicht weiß was noch für module drin sein könnten...

ich könnte zwar auch einfach jedesmal einen mysql eintrag machen und das ziel speichern, aber mitlerweile will ich einfach nur wissen, ob es geht, dass man über einen header daten ergattern kann und wenn ja wie sonst schaffe ich noch irgendwelche sicherheitslücken und das phöse :p

//Edit: ach ja und damit will ich erreichen, dass ich mir n bissel code durch <meta> erspare ;)
 
Werbung:
Wie ich schon gesagt habe, kann ein [phpnet]header[/phpnet] jedesmal nur eine einzige Veränderung vornehmen.
Da du das ganze auf "Location: " beziehst, kann man einzig und allein versuchen an Dateien direkt heranzukommen. Wenn diese jedoch richtig Programmiert wurden, sollte in einem CMS der direkte Aufruf unterbunden sein.

Sobald du aber Daten auf deinem Webspace hast, die NICHT interpretiert werden, und die du NICHT nach aussen hin zugänglich machen möchtest, MUSST du die Werte prüfen.

Desweiteren kann ich über die Location auf die .htaccess (falls vorhanden) zugreifen.
Wenn ich dort jetzt deine User nud Gruppen Datei finde, habe ich schonmal den Usernamen, mit dem ich in den Bereich komme, sowie das verschlüsselte Passwort.
Je nach dem wie sehr ich in dein System hinein gelangen möchte, kann ich ein Bruteforce oder Social Engeneering tool über die Datei laufen lassen, und so in gewisser Zeit die asswörter aus der .htaccess datei holen und mich dann einloggen.
Je nach dem, wie oft das Passwort für den User genutzt wird (viele haben nur ein Passwort) komm ich dann auch an viele andere Vertrauliche Daten, wie z.B. Mailaccounts usw...
 
wenn ich das richtig verstehe willst du damit seiten aufrufen, die
in deiner cms vorhanden sind,
hab jetzt nicht alles gelesen aber mach doch:


PHP:
if ($_GET['refresh'])
{

function loadfile($status = false) 
{

$file = dirname(__FILE__) . "./dateien/" . $_GET['refresh'] . ".php";

if (file_exists($file))
{
if ($status) echo "File succesful load!<br>\n";
include ($file);

}
else {
if ($status) echo "Couldn't load file. Error: File doesn't exists!<br>\n";
include "./dateien/home.php";
}

}

loadfile(1);

}
loadfile(1); <- Mit Statusmeldung

So kannst du verhindern, dass jede x-beliebige Datei geladen werden KANN.
Mach dann halt statt include einfach header();

Kannst ja ne Blacklist machen und die als Array speichern:

PHP:
$blacklist[] = "verbindungsdaten";
$blacklist[] = "meinschweinkram";
[...]

if (in_array($_GET['refresh'], $blacklist)) {
die("Error: Given file on blacklist.");
}
 
ehm nein genau sowas will ich nicht :-D sowas kriege ich auch alleine hin ;)

Aber vielen dank loki :)

und most informier dich mal n bisschen ;)

?refresh=../../../../../ect/....%00 ;)
 
Zuletzt bearbeitet von einem Moderator:
Werbung:
Mir ist gerade noch eingefallen, dass du weg von den Relativen Dateipfaden gehen solltest.

Wenn du z.B. als default-wert "http://www.deinedomain.de" nimmst, und dann den $_GET['request'] dahinter baust, kann auch keiner mit '../../../...' an deine Daten gelangen. Dann sind die Systemdateien zumindest erstmal gesichert.
Musst dir nur Gedanken um deine eigenen Dateien machen ;)
 
mit sowas kenne ich mich aus *gg*

aber über den header habe ich gestern das erste mal nachgedacht und dachte da frag ich einfach mal :)

hab aber jetzt alles in eine mysql datenbank geschrieben und wird nurnoch ne ID übergeben ;) da kann man einfach am wenigsten falsch machen *gg*
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben