Sanieren von PHPSESSID

8

Ich übergebe PHPSESSID an eine PHP-Seite (via POST) und ich frage mich, wie man die Eingabe am besten saniert. Würde mysql_real_escape_string genügen? Gibt es etwas Besonderes, das ich berücksichtigen sollte, wenn ich mit Sitzungs-IDs zu tun habe (ich meine, das können nur Buchstaben und Zahlen sein?)?

BEARBEITEN: Um die Frage zu klären, was ich wirklich wissen möchte: Wenn jemand die POST-Daten manipuliert, kann er eine schädliche Zeichenfolge als PHPSESSID senden, die etwas Böses tun würde, wenn ich session_id($_GET['PHPSESSID']) anrufe? Ich persönlich kann nicht an etwas denken, aber besser als Nachsicht ...

Danke

nico

    
nico 17.09.2010, 13:41
quelle

3 Antworten

7

Gutes Denken, aber soweit ich sehen kann, besteht keine Notwendigkeit, diesen Input zu bereinigen. Die PHPSESSID wird an session_id() weitergegeben.

session_id hat tatsächlich einige Einschränkungen:

  

Abhängig vom Sitzungshandler sind nicht alle Zeichen innerhalb der Sitzungs-ID erlaubt. Zum Beispiel erlaubt der Datei-Session-Handler nur Zeichen im Bereich a-z A-Z 0-9, (Komma) und - (minus)!

Aber session_id() sollte Abweichungen von diesen Regeln mit einer Fehlermeldung behandeln. (Möglicherweise möchten Sie diese Fehlermeldung abfangen und das Skript bei einem Fehler beenden.)

Die einzige wirkliche Gefahr, die ich sehen kann, ist, wenn Sie einen benutzerdefinierten Session-Handler verwenden, der z. verbindet sich mit einer Datenbank. Sie werden in diesem Fall die Eingabe bereinigen, z. mit mysql_real_escape_string() . Dies sollte jedoch innerhalb des benutzerdefinierten Sitzungshandlers erfolgen

.

Wenn Sie die Sitzungs-ID in einem anderen Kontext verwenden, z. B. als Parameter in einem HTML-Formular, müssen Sie selbstverständlich die für diese bestimmte Ausgabe erforderlichen Sanierungsmaßnahmen ergreifen (In diesem Fall htmlspecialchars() ). .

    
Pekka 웃 17.09.2010, 13:46
quelle
2

Wenn Sie wirklich eine Sitzungs-ID über POST weiterleiten müssen (kann nicht sehen, warum wirklich ...) und Sie wissen, welche Zeichen Sie erlauben möchten, würde ich einen regulären Ausdruck verwenden, um das zu überprüfen.

mysql_real_escape_string ist für die Datenbankeingabe und benötigt eine Datenbankverbindung und bereinigt nichts, sondern entkommt nur einige Sonderzeichen.

    
jeroen 17.09.2010 13:51
quelle
1
  

Würde mysql_real_escape_string ausreichen?

Falsch. Sie sollten Daten immer mit einer geeigneten Methode für den Ort bereinigen, an den Sie den Wert schreiben. Sie würden nur mysql_real_escape_string () verwenden, wenn / wenn Sie einen Wert in eine MySQL-Datenbank schreiben.

Aus deinem Kommentar geht nicht klar hervor, was genau du tust. Meinst du, du benutzt curl in PHP um den POST zu erstellen? Wenn ja, dann ist keine Bereinigung erforderlich (nicht streng zutreffend - aber curl macht es für Sie), wenn Sie CURLOPT_POSTFIELDS als Array übergeben - aber Sie müssen den Wert per URL eingeben, wenn Sie CURLOPT_POSTFIELDS als Zeichenfolge übergeben.

Schreiben Sie den Wert in den Browser, damit der Benutzer den Wert senden kann? In diesem Fall würden Sie htmlentities () verwenden, um den Wert in das Formularfeld zu schreiben.

Noch etwas?

    
symcbean 17.09.2010 15:35
quelle

Tags und Links