php content= Aufrufe beschränken?
-
- Beiträge: 2427
- Registriert: 06.12.2005 10:38:46
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Baustelle
php content= Aufrufe beschränken?
auf meinem shared hosting (uberspace) bastel ich gerade an einem projekt mit meinem Sohn.
Die Seite ist mit hat eine index-php, die dann mit "content=" Daten läd (primär Bilder und eine text Datei). Allrdings stelle gerade jemand fest, dass man so auch infos aufrufen kann die man direkt eingibt.
Irgendwie stehe ich aber gerade auf der Leitung wie ich das korrekt einschränke. Ich habe zwar jetzt schon gelesen, dass die Daten immer "validiert" werden sollen, bevor sie php übergeben werden.
Aber wie mache ich das technisch? Ein Liste, die die "zulässigen Verzeichnisse und Dateien enthält?
Bei Datenvalidierung und php - Suchen finde ich das Thema immer nur, wenn es um Formulare geht, die auf der website vom user gefüllt werden.
Sicher eine rudimentäre Frage, aber irgendwie finde ich nicht die richtigen Ansätze
Die Seite ist mit hat eine index-php, die dann mit "content=" Daten läd (primär Bilder und eine text Datei). Allrdings stelle gerade jemand fest, dass man so auch infos aufrufen kann die man direkt eingibt.
Irgendwie stehe ich aber gerade auf der Leitung wie ich das korrekt einschränke. Ich habe zwar jetzt schon gelesen, dass die Daten immer "validiert" werden sollen, bevor sie php übergeben werden.
Aber wie mache ich das technisch? Ein Liste, die die "zulässigen Verzeichnisse und Dateien enthält?
Bei Datenvalidierung und php - Suchen finde ich das Thema immer nur, wenn es um Formulare geht, die auf der website vom user gefüllt werden.
Sicher eine rudimentäre Frage, aber irgendwie finde ich nicht die richtigen Ansätze
- sbruder
- Beiträge: 333
- Registriert: 24.06.2016 13:54:36
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Franken
Re: php content= Aufrufe beschränken?
Schnell zusammengefrickelt:
Nicht besonders schön, aber funktioniert.
Noch ein Tipp: ALLE unvertrauenswürdigen Eingaben (also alle Nutzer-Eingaben) durch htmlspecialchars() drücken. mysql_real_escape_string() kann auch nicht schaden.
EDIT: Kommentar hinzugefügt
Code: Alles auswählen
<?php
/* public domain */
function clearInput($input) {
// The throwaway-array defines the phrases to thow away (by default '../', beginning with '/' and beginning with '~/')
$throwaway = array(); // Initialize the trowaway-Array
$throwaway[] = '/\.\.\//';
$throwaway[] = '/^\//';
$throwaway[] = '/^~\//';
/*
Here you can define your own
*/
return preg_replace($throwaway, '', $input); // replace all from the throwaway-array with nothing
}
// Example function call
echo clearInput('../../../etc/passwd');
?>
Noch ein Tipp: ALLE unvertrauenswürdigen Eingaben (also alle Nutzer-Eingaben) durch htmlspecialchars() drücken. mysql_real_escape_string() kann auch nicht schaden.
EDIT: Kommentar hinzugefügt
-
- Beiträge: 2427
- Registriert: 06.12.2005 10:38:46
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Baustelle
Re: php content= Aufrufe beschränken?
Danke Dir.
Also direkte usereingaben gibt es ja nicht. Es geht primär darum die direkte Manipulation der URL zu verhindern.
Also direkte usereingaben gibt es ja nicht. Es geht primär darum die direkte Manipulation der URL zu verhindern.
- sbruder
- Beiträge: 333
- Registriert: 24.06.2016 13:54:36
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Franken
Re: php content= Aufrufe beschränken?
Eine Nutzereingabe ist alles, was der Nutzer setzen kann und Du in Deinem Skript ausliest. Auch über den User-Agent kann man XSS/Code Injection machen! $_GET ist auch etwas, dass der Nutzer kontrollieren kann.mclien hat geschrieben: Also direkte usereingaben gibt es ja nicht. Es geht primär darum die direkte Manipulation der URL zu verhindern.
Re: php content= Aufrufe beschränken?
Um was geht es dir jetzt eigentlich?mclien hat geschrieben: Aber wie mache ich das technisch? Ein Liste, die die "zulässigen Verzeichnisse und Dateien enthält?
Bei Datenvalidierung und php - Suchen finde ich das Thema immer nur, wenn es um Formulare geht, die auf der website vom user gefüllt werden.
Um die Validierung von Text aus Dateien? Um die Validierung von Eingaben aus der URL ($_GET)? Oder um die Zugriffskontrolle auf Dateien auf deinem Webserver?
-
- Beiträge: 2427
- Registriert: 06.12.2005 10:38:46
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Baustelle
Re: php content= Aufrufe beschränken?
Primär um die Validierung der Eingaben aus der URL ($_GET), weil da das Problem auffiel.thoerb hat geschrieben:Um was geht es dir jetzt eigentlich?mclien hat geschrieben: Aber wie mache ich das technisch? Ein Liste, die die "zulässigen Verzeichnisse und Dateien enthält?
Bei Datenvalidierung und php - Suchen finde ich das Thema immer nur, wenn es um Formulare geht, die auf der website vom user gefüllt werden.
Um die Validierung von Text aus Dateien? Um die Validierung von Eingaben aus der URL ($_GET)? Oder um die Zugriffskontrolle auf Dateien auf deinem Webserver?
Der Inhalt aus dem die Seite zusammengebaut wird sind 2 Ordner (Bild und Text), daraus wird dann jeweils die nächste Seite eines Webcomics erstellt. Und noch ein paar andere Infos. Mit sbruders function müste ich das ja auf die beabsichtigten erzeichnisse beschrönken können (.. generell verbieten und alle Ordner die auf der erlaubten Ebene liegen, aber nicht direkt Content liefern auch verbieten).
der freundliche, aber für mich erstmal nicht direkt hilfreiche Tip dazu war:
Code: Alles auswählen
allerdings sollte man generell auch noch einmal darauf achten, dass alle daten, die an phph übermittelt, vorher validiert werden
Und der obere Teil ist was ich bisher daraus glaube verstandne zu haben.
(Die Texte sind plain text und können nur on 2 Personen an die passende Stelle auf dem Webserver befördert werden. Und nur dahin über einen ssh key mit command-prefix).
Bei der Zugriffskontrolle au die Dateien meinst direkt aufdem Server nicht über die website?
Re: php content= Aufrufe beschränken?
Dass außer den zwei Personen niemand auf deine Textdateien zugreifen oder diese herunterladen kann. Also dass man da nicht über einen Webbrowser sondern nur über ssh dran kommt. Ich dachte das sei deine Frage gewesen.mclien hat geschrieben: (Die Texte sind plain text und können nur on 2 Personen an die passende Stelle auf dem Webserver befördert werden. Und nur dahin über einen ssh key mit command-prefix).
Bei der Zugriffskontrolle au die Dateien meinst direkt aufdem Server nicht über die website?
-
- Beiträge: 2427
- Registriert: 06.12.2005 10:38:46
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Baustelle
Re: php content= Aufrufe beschränken?
Ach so. Sorry mit dem Vokabuöar in dem Kontext bin ich (noch) nicht so ganz vertraut.thoerb hat geschrieben:Dass außer den zwei Personen niemand auf deine Textdateien zugreifen oder diese herunterladen kann. Also dass man da nicht über einen Webbrowser sondern nur über ssh dran kommt. Ich dachte das sei deine Frage gewesen.mclien hat geschrieben: (Die Texte sind plain text und können nur on 2 Personen an die passende Stelle auf dem Webserver befördert werden. Und nur dahin über einen ssh key mit command-prefix).
Bei der Zugriffskontrolle au die Dateien meinst direkt aufdem Server nicht über die website?
Bei uberspace gibt es immer einen Nutzer, der in "seinem" home dann per ssh Vollzugriff hat.Und die uploads habe ich dann folgerndermaßen geregelt:
Auf meinem andern uberspace hatte ich eh schon ein horde laufen, auf dem habe ich dann die file-share Funktion mit drauf getan (die ich eh brauchte,um endlich mal eine ANtwort auf die Frage zu haben, wie man denn sonst MB-große Daten austauschet, wenn nicht per E-Mail).
Dort hat die Künstlerin der Comics dann auch einen share Bereich. Und auf meinem serer habe ich dann einen cronjob eingerichtet, der dann per ssh-keypair den rsync bewerkstelligt (und den pub-key auf dem Empfänger habe ich auf eben diesen rsync beschränkt)
HOWTO on Tomas Krenn:
https://www.thomas-krenn.com/de/wiki/Au ... %C3%A4nken
Soweit das Intermezzo. Ich denke dann mal, dass ich den Tip von sbruder mit den throwaway arrays nutzen werde.
die Option mit "mysql_real_escape_string()" brauche ich je nur/erst, wenn da tatsächlich ein mysql läuft, oder habe ich da was falsch verstanden?
Re: php content= Aufrufe beschränken?
Dann solltest du aber gleich MySQLI oder PDO nutzen, die MySQL-Funktionen sind deprecated.mclien hat geschrieben:.
die Option mit "mysql_real_escape_string()" brauche ich je nur/erst, wenn da tatsächlich ein mysql läuft, oder habe ich da was falsch verstanden?
http://php.net/manual/de/migration55.deprecated.php
- sbruder
- Beiträge: 333
- Registriert: 24.06.2016 13:54:36
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Franken
Re: php content= Aufrufe beschränken?
Ja, die verhindert zum Beispiel was in der Art »blabla'); DROP TABLE passwords; --«. Wie thoerb schon gesagt hat, solltest Du aber PDO benutzen, weil Du dadurch schon von Haus aus mehr Sicherheit hast.mclien hat geschrieben: die Option mit "mysql_real_escape_string()" brauche ich je nur/erst, wenn da tatsächlich ein mysql läuft, oder habe ich da was falsch verstanden?