Hallo,
Ist es möglich, den Quellcode jedes Skripts und jedes Moduls - sowie
die Inhalte der Skalare eines Skripts - zu sehen, die im Browser
aufgerufen werden können?
Kommt darauf an. Wenn die Dateien allesamt außerhalb des Document-Root oder innerhalb von cgi-bin liegen, dann werden sie beim Aufruf ausgeführt und der Benutzer bekommt nur die Ausgabe der Dateien zu sehen, nicht jedoch die Dateien selbst. Wenn Du ein Perl-Script natürlich ins Document-Root kopierst und der Webserver nicht angewiesen ist, bspw. *.pl trotzdem auszuführen, dann wird's natürlich komplett an den Besucher übermittelt. Oder wenn Du's als .txt im Document-Root abspeicherst. Bei Modulen sieht's etwas anders aus, *.pm wird im Normalfall vom Webserver nicht ausgeführt (wozu auch?) - im cgi-bin-Verzeichnis (oder jeglichem anderen ScriptAlias) gibt's halt bei einer *.pm-Datei höchstens ein 403 Forbidden oder 500 Internal Server Error (je nach Konfigurationsdetails, ist aber im Prinzip egal, Zugriff kann nicht stattfinden), wenn's normal im Document-Root Verfügbar ist, wird die *.pm-Datei an den Client übermittelt und wenn's außerhalb des Document-Root liegt, interessiert das den Webserver nicht.
Wenn ja, kann ich mich dagegen irgendwie schützen?
Alle Module außerhalb des Document-Root lagern, alls Perl-Scripte nach /cgi-bin/ oder den Webserver anweisen, dass er *.pl immer ausführt.
Wenn nein, wie kann ich Pfade zu Konfigurationsdateien etc.
verbergen, die in meinen Skripts und Modulen genutzt werden?
Für Konfigurationsdateien gilt das gleiche wie für Module: raus aus dem Document-Root; in ScriptAlias-Verzeichnissen schaden sie zwar nicht unbedingt, aber schön ist das nicht.
Nun liest mein Loginskript "/anydir/web/cgi/login.cgi" die
Passwortdatei /anydir/auth/user.conf aus.
Der Pfad /anydir/auth/ ist natürlich nicht in der httpd.conf
freigegeben.
Könnte ein Besucher trotzdem die Datei einsehen?
Über den Webserver alleine (sofern der keine Sicherheitslücke hat): nein. Über eine in Deinen Scripten vorhandene Sicherheitslücke: möglicherweise ja.
Wenn Module nicht eingesehen werden können, wäre es dann besser,
wenn ich das Auslesen einer Datei einer Funktion in einem Modul
überlasse, als dem Skript selbst?
Wenn Du's richtig anstellst, kriegt keiner Deinen serverseitigen Quellcode mit, von daher: pack die Funktionen/Klassen/sonstwas dorthin, wo sie Dir programmiertechnsich am sinnvollsten erscheinen. Die Dateien, die den Krempel enthalten, teilst Du in 2 Teile auf: solche, die über's Web aufgerufen werden sollen, die kommen nach /cgi-bin/ oder der Webserver wird angewiesen sie auch außerhalb von /cgi-bin/ auszuführen (dann ist der Quellcode nicht sichtbar), der Rest der Dateien kommt außerhalb des Document-Root, so dass der Webserver gar nicht dran denkt, sie ausführen zu wollen. Dann passiert auch nichts (seitens des Webservers).
Viele Grüße,
Christian