Blacklist für $_GET

Hallöchen,

ja der Titel ist doof gewählt!
Bin derzeit am Suchen wie ich einige Eingaben bei $_GET unterbinden kann.
Bspw. sollen Eingaben wie „…/“ einfach wegfallen.
Also das Dinge wie:

script.php?var=…/blabla/blub

nicht Funktionieren und er schön also dort bleibt wo er sein soll :slight_smile:!
Weil derzeit wird trotz der Pfadangabe bei eingabe von ?var=…/foo/bar das Ergebniss zu:

/home/user/httpd/…/foo/bar

Also man sieht dann schön den Inhalt von /home/user was so nicht sein sollte, auch wenn er ja wegen Berechtigungen dort nur 500er erhält.

Ich suche gerade schon Google ab, aber man findet dort immer nur IP-Blacklist’s usw. und das suche ich ja nicht, das habe ich eh schon !haue .

Hi,

du könntest doch prüfen ob 2 Punkte zw. 2 slash sind und dann abbrechen…

$a = explode("/",$_GET['var']); if array_search("..", $a) die("Fehler");

Ist jetz nicht getestet … allerdings könntest du überlegen ob du nicht vielleicht auf den pfad verzichten kannst…

LG flo

hi,

ich wurde Dir dringendst nahelegen, was auch immer da bei _GET abgefragt wird, nicht auf diese Art zu lösen was der Benutzer/Besucher Dir vorgibt.

Das ist speziell beim inkludieren von Dateien sehr problematisch, man könnte da ja /irgendeine/geheimedatei.php oder /passwörter.txt angeben - das ist hochgradig fahrlässig; bitte gib unbedingt vor WAS GENAU der Client inkludieren darf und bei exaktem Zutreffen führe dies aus, sonst ignoriere es.

zB.

switch($_GET['inkludiermich']) { default: case 'hauptseite': $include('./diehauptseitendatei.php'); break; case 'impressum': $include('./impressum.php'); break; }

damit hast Du in diesem Beispiel 2 mögliche Szenarien, Codeeinschleusung oder Befehlseinschleusung ist nicht möglich.

ciao

Wenn du unbedingt eine variable include-Funktion haben willst, solltest du sie so absichern und einschränken:

  • keine Punkte erlauben (erlaube speziell nur regex-gruppe [-_/a-zA-Z0-9] )
  • alle Include-Dateien in einem speziellen Verzeichnis (z.B. inc)
  • alle Dateien enden mit .php
  • Wenn du upload-Skripte hast, passe genau darauf auf, wo Dateien abgelegt werden (eigener Unterorder, keine doppelten Punkte, … ! )
define("INCDIR", __DIR__.'/inc');
$include=$_GET['include'];
preg_match('^[-_/a-zA-Z0-9]+$', $include) or die("ERROR");
require(INCDIR."/$include.php");

@miro: Das Script wird auf $_POST umgestellt. Absicherung ist erfolgt auch dafür.
@progandy: Bei regex-gruppe muss man Natürlich aufpassen, da auch Hashwerte usw. vorkommen.

Eine exakte Auslesung nach Datei-Endung, da muss ich dem Herrn Encoder dann auf die Nuss hauen nur noch .mp4 und .mkv zu nehmen. Aber derzeit ist das ja .mp4, .mkv und .avi .

Ich handhabe es auch so, dass es bei meinem Kram eine Liste von den Möglichkeiten gibt und wenn keine direkt passt wird die genommen die am ehesten passt. (Im Grunde das was Miro geschrieben hat, nur etwas erweitert.)
Nur von Get auf Post umstellen ist kein wirklicher Sicherheitsgewinn. Das ist wie die Hand vor die Augen halten und sagen “Ich kann dich nicht sehen, also kannst du mich auch nicht sehen”.

[quote=„drsomsos“]Ich handhabe es auch so, dass es bei meinem Kram eine Liste von den Möglichkeiten gibt und wenn keine direkt passt wird die genommen die am ehesten passt. (Im Grunde das was Miro geschrieben hat, nur etwas erweitert.)
Nur von Get auf Post umstellen ist kein wirklicher Sicherheitsgewinn. Das ist wie die Hand vor die Augen halten und sagen „Ich kann dich nicht sehen, also kannst du mich auch nicht sehen“.[/quote]

Ich sagte nicht das es ein Sicherheitsgewinn ist, aber es ist auch durchweg schöner wenn die Herrn Leecher ne saubere URL haben da oben.
Werde auch nächste Woche dann mal die Tipps hier durchgehen und umsetzen !haue

GET wird genutzt um eine Ressource (eine Seite, ein Dokument oder eine Datei) anzufordern, üblicherweise ohne, dass dabei eine Änderung der Daten auf Serverseite stattfindet (d.h. wenn man mehrmals den selben GET Befehl ausführt, sollte in der Praxis auch immer der selbe Effekt auftreten).

POST wird genutzt um eine Ressource (oder üblicherweise einfach Formulardaten) auf Serverseite hinzuzufügen.

Bitte nutze nicht POST, nur um “schönere URLs” zu haben sondern lediglich dann, wenn auch Daten zur Serverseite hinzugefügt werden (Statistiken oder Dinge wie Session-Informationen gelten nicht darunter).

mfg Balmung

[quote=„Balmung“]GET wird genutzt um eine Ressource (eine Seite, ein Dokument oder eine Datei) anzufordern, üblicherweise ohne, dass dabei eine Änderung der Daten auf Serverseite stattfindet (d.h. wenn man mehrmals den selben GET Befehl ausführt, sollte in der Praxis auch immer der selbe Effekt auftreten).

POST wird genutzt um eine Ressource (oder üblicherweise einfach Formulardaten) auf Serverseite hinzuzufügen.

Bitte nutze nicht POST, nur um „schönere URLs“ zu haben sondern lediglich dann, wenn auch Daten zur Serverseite hinzugefügt werden (Statistiken oder Dinge wie Session-Informationen gelten nicht darunter).

mfg Balmung[/quote]

Es ist ja ein Formular, das ist doch der Grund :ps:

[code]

—Bitte wählen—

[/code]

So und jetzt weiterhin wieder Daten hochladen/rüberladen !coffee