Peter Silie: Lesestoff zu Python gesucht

Beitrag lesen

Deine Frage dreht sich alleine um die Rechtevergabe im Dateisystem und inwieweit du dem Nutzer deines Programms die Nutzung zutraust. Erlaubst du dem Nutzer, Einstellungen in einer separaten Datei zu sichern, wirst du dich damit abfinden müssen, dass er da auch Unsinn reinschreibt (und diesen Unsinn im Programm abfangen müssen), anders geht es nicht.

Darum geht es mir. Gibt es besonderheiten im Vorgehen bei lokalen Programmen, um „diesen Unsinn im Programm ab[zu]fangen“?

Nein. Es ist grundsätzlich völlig unerheblich, auf welchem Rechner dein Programm Dateien lädt und auswertet.

Wenn man zudem bedenkt, dass gerade PHP in der meist anzutreffenden Konfiguration als Modul des Webservers (-programmes) ein Problem an sich ist, da alle Skripte aller Servernutzer dann immer mit den Rechten des Webservers laufen, bist du mit eigenständig laufenden Skripten, d.h. solchen, die mit deinen Rechten unter deinem Namen laufen, sogar noch etwas mehr auf der sicheren Seite (was jetzt keine Laissez-faire-Politik sein soll, hingucken muss man trotzdem).

Um nochmal auf konkrete Punkte zurückzukommen und dabei zu erklären, warum deine Frage mich etwas verwirrt:

Die Pfade kann ich auf ihre Existenz prüfen, aber ob mir hypothetisch jemand, der die INI manipuliert hat, einen anderen Pfad unterjubelt, natürlich nicht.

Es ist Zweck einer Konfigurationsdatei, manipuliert zu werden, "manipuliert" im neutralen Sinne.
Möchtest du nicht, dass ein Wert manipuliert, lies: geändert wird, dann hat er in dieser Konfigurationsdatei nichts zu suchen (vielleicht in einer anderen, zweiten, die durch das Dateisystem vor unberechtigtem Zugriff geschützt wird; es gibt für viele Programme systemweite Einstellungen und solche des Benutzers). Hat nichts mit PHP, Python oder Webservern zu tun.

Dass von Benutzern eingegebene Werte, auch via Datei, immer innerhalb eines Bereichs fallen müssen, alleine schon, weil Benutzer auch mal Fehler machen, hast du ja bereits selbst erwähnt und ist auch keine Besonderheit. Anders gesagt: Ob dein Skript brav in seinem Arbeitsverzeichnis wurschtelt oder gerade sich selbst ausgibt, mitsamt den MySQL-Zugangsdaten, hast du hoffentlich bereits bei deinem (hypothetischen) in PHP geschriebenen Download-Formular geprüft.

Die Knochenarbeit beim Einlesen von .ini-Dateien kannst du https://docs.python.org/3/library/configparser.html überlassen.

Die Werteprüfung bei Pfaden wurde im anderen Beitrag schon beschrieben. Unbrauchbare Pfade weist das Dateisystem von sich aus zurück, du musst nicht selbst prüfen, ob ein Objektname ungültige Zeichen enthält oder länger als x ist (Paranoia mal beiseite).

Du solltest hingegen prüfen, ob der Pfad sich in einem akzeptablen Bereich befindet. Dateifunktionen bei PHP haben IIRC die unangenehme Eigenart, unter Umständen URLs zu akzeptieren. Bei Python ist das grundsätzlich nicht so, informiere dich trotzdem in der Beschreibung der jeweiligen Funktion.

Je nach Anwendung bietet es sich an, in der Konfigurationsdatei eine einzige, zentrale Wurzel angeben zu lassen; alle anderen Pfade dürfen nur relativ sein, sich auf diese Wurzel beziehen und im Endeffekt nicht auf Ziele oberhalb dieser Wurzel verweisen.

Ohne mich jetzt wiederholen zu wollen: Das sind allgemeine Fragen des sicheren Umgangs mit Benutzereingaben. Dass du unter dem Stichwort Python dazu nichts finden konntest, liegt vielleicht einfach daran, dass es nichts mit Python zu tun hat. Du wirst vielleich eher fündig, wenn du dich auf den speziellen Anwendungsfall konzentrierst, bei den Pfadangaben beispielsweise den Konventionen unter Windows (Rechte, Organisation des Dateisystems, speziell Benutzerverzeichnisse, %USERPROFILE% usw.).