Schreibrechte: Wie sicher ist das?

Die Datei, in der die benutzerdaten drinne stehen, sieht folgendermaßen aus:
PHP:
<?
   $User = array("Name","Passwort");
?>

Der Name und das passwort sind dabei natürlich mit md5 verschlüsselt.

Würde jemand diese Datei direkt aufrufen, würde er eigentlich nichts sehen. Oder?
Oder kann er per HTTP die Variabeln auslesen? Wobei diese ja eigentlich nicht
geschickt würden, da das Array auf dem Server erzeugt wird, und dann nur HTML
zum Client geschickt wird. Das ist doch so richtig?

Die Datei, welche dann die eigentlichen Inhalte beeinhaltet, ist ebenfalls als
array aufgebaut. Nicht als Klartext. Das wäre mir dann natürlich klar, das dann
der Inhalt der Datei sichtbar im Client-Browser erscheint.

Gruß
christhebaer
 
nana

wenn du es genau so als PHP Deklaration drinstehen hast dann wird dies vom Parser interpertiert und der der die File öffnet sieht eine leere seite!
 
Original geschrieben von christhebaer
Die Datei, in der die benutzerdaten drinne stehen, sieht folgendermaßen aus:
PHP:
<?
   $User = array("Name","Passwort");
?>


Der Name und das passwort sind dabei natürlich mit md5 verschlüsselt.

Würde jemand diese Datei direkt aufrufen, würde er eigentlich nichts sehen. Oder?
Das ist schon richtig. Eigentlich ist das logisch, aber ich schreibe das lieber jetzt nochmal: Die Include-Datei muss dann auch logischerweise die Endung .php bekommen. Wenn man Include-Datei schon direkt am Dateinamen kenntlich machen will, dann z.b. so: dateiname.inc.php. Wenn die Datei keine PHP-Endung trägt, wird der Inhalt im Klartext an den Browser geschickt. Wie gesagt, sollte logisch sein, nur noch mal zur Erinnerung ;)

Wer ganz sicher gehen will, der kann das so machen:

Im Hauptscript, welches eine oder mehrere Dateien inkludiert:

PHP:
<?
define('ROOT_PATH', $_SERVER["DOCUMENT_ROOT"].'/includes/');

include(ROOT_PATH.'user.inc.php');

/* ... */
?>
Die Include-Datei user.inc.php sieht dann so aus:

PHP:
<?
if (!defined('ROOT_PATH')) {
  die("Security violation");
}

/* ... */
?>
Wird jetzt direkt die Include-Datei aufgerufen, wird noch nicht mal der Inhalt, der nach der If-Abfrage kommt, ausgeführt, da, sofern die Konstante nicht definiert wurde (was im Hauptscript passiert), das Script direkt abgebrochen wird.

Ebenfalls wäre es praktisch, Dateien mit sensiblen Daten (wie z.b. Connect-Daten für die Datenbank) gar nicht erst in einem Ordner unterhalb des Webroots abzulegen. So gibt es keine Möglichkeit, diese Datei über den Browser abzurufen. Im PHP-Script lässt sich die Datei mit dem entsprechendem Pfad ganz gewöhnlich einbinden und stellt keinerlei Unterschied zur "herkömmlichen" Methode dar. Das ganze ist aber abhängig vom Provider bzw. wie dieser den Webserver konfiguriert hat. Mal ein kleines Beispiel zum besseren Verständnis:

Code:
/
/logs
/stats
/htdocs
/includes
So sieht beispielsweise die Ordnerstruktur eines Webservers aus. Im htdocs-Verzeichnis liegt unser Webroot. Da liegen erst einmal alle Dateien, die man über den Browser abrufen kann. Jetzt liegt aber direkt auf gleicher Ebene der Ordner includes, in dem jetzt die Include-Dateien liegen. Dieser Ordner ist über den Browser nicht erreichbar, da er nicht im Webroot liegt. Im PHP-Script kann man jetzt mittles:

PHP:
include('/includes/user.inc.php');
die Include-Dateien einbinden.
 
Hallo!

Also, um nochmal auf die eigentliche Frage zurückzukommen :-)

Wenn ich meine "Text-Datei", in denen Daten stehen (als Array), auf dem
Server mit Schreibrechten versehe, dann ist die Wahrscheinlichkeit, dass
jemand von Extern darin etwas reinschreiben kann eher unwahrscheinlich.

Die Frage stellte ich mir halt deswegen, da ich per chmod() bei meinem
Hoster nicht die Rechte über ein Script ändern kann. Und dann alles per
FTP-Connect zu machen sehe ich persönlich eher nicht so vorteilhaft
(Geschwindigkeit, Sicherheit,...)

Daher bin ich beruhigt, wenn ich weiß, das mit der Datei kein Unfug
von Extern betrieben werden kann. - Trotz der Schreibrechte.

ich danke Euch allen für Eure Hilfe!

Schönes Wochenende!

Gruß
christhebaer
 
Original geschrieben von Chino

PHP:
include('/includes/user.inc.php');
die Include-Dateien einbinden.

Wenn er aus dem Webroot ins Include will, müßte er aber vorher noch dort raus und dann in Include rein:

PHP:
include('../includes/user.inc.php');
 
Original geschrieben von low-group
Wenn er aus dem Webroot ins Include will, müßte er aber vorher noch dort raus und dann in Include rein:

PHP:
include('../includes/user.inc.php');
Nein, dass muss er nicht unbedingt. Wenn man zusätzlich mit mehreren Unterordnern arbeitet, müsste man den Pfad sowieso für jede Ebene entsprechend anpassen.

Bei meiner Version wird direkt vom Server-Root-Verzeichnis aus eingbunden (man beachte den ersten Slash am anfang der Verzeichnisangabe), ganz egal in welchem (Unter)-Ordner Du dich befindest. Man muss jedoch den Pfad natürlich seinen Serververhätlnissen anpassen. Meistens hat man einen Pfad wie z.b. /webs/domain.de/htdocs/. So muss man sich um Ordnerstrukturen keine großen Sorgen mehr machen. Einfach einen globalen Include-Ordner definieren, und in allen Scripten werden die darin befindlichen Dateien eingebunden.
 
Zurück