Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
@icebreaker Der Webserver soll doch auch drauf zugreifen können, der Benutzer aber nicht direkt über die URL wo ist das Problem? Falls du damit aber meintest, dass auch Benutzer einfach über Adresseingabe auf die Datei zugreifen können, dann würde ich gerne mal wissen wieso das bei mir nicht funktioniert.
Wenn der Webserver darauf zugreifen kann, kann es auch jeder Nutzer über das Internet, da gibt es keine weiteren Beschränkungen. Die Zugriffsrechte gelten nur für Linux, der Webserver darf es lesen, damit ist die Linux-Beschränkung aufgehoben, wenn man nun den Webserver nicht entsprechend konfiguriert (htaccess) wird die Datei jedem Nutzer angeboten.
GreenGene schrieb:
@bu1137 Man kann das auch anders raus finden ja, aber es ist nochmal etwas schwieriger...
ich verstehe aber das ganze .htaccess system nicht so ganz.
hab mich durch google geschlagen und das bis jetzt so verstanden:
wenn ich eine datei, mit dem namen ".htaccess" und folgendem inhalt..
Code:
<Files ~ "^\.(htaccess|htpasswd)$">
deny from all
</Files>
Options Indexes
order deny,allow
..in folgendes verzeichnis ablege..
Code:
/files/.htaccess
dann werden alle downloads aus dem ordner "files" und dessen unterordner blockiert, also auch /files/bla/bla/blabla.doc
@icebreaker, dass muss man erst mal wissen und allein deswegen ist es schwieriger... Ein Zeitlimit schützt auch nicht vollkommen aber es schränkt ein...
Und wie gesagt auf meinem Server gibt es einen Ordner picture es gibt keine .htacess Datei dafür, greife ich auf eine Datei darin zu bekomme ich ein Fehler, dass ich keine Rechte habe dafür. Ändere die Rechte von 700 auf 777 wird die Datei heruntergeladen, wie bitte erklärst du das dann?
@GreenGene: In dem Fall gehört die Datei einem anderen Benutzer, als dem Webserver. Der hat in dem Fall auch keinen Zugriff darauf (auch nicht über PHP) und benötigt entweder über die Gruppe oder Other Zugriff. Alles andere macht keinen Sinn.
GreenGene schrieb:
@bu1137 Man kann das auch anders raus finden ja, aber es ist nochmal etwas schwieriger...
Unter OSX brauchst du keine File Extensions. Vorallem früher wurden die sowieso weggelassen. Unter linux gibts das file utility, welches dir unkompliziert den Typ verrät. Das Weglassen der Extension ist eine total sinnlose Massnahme.
@Fynnjard: Lass das <Files ...></Files> weg. Eigentlich reicht einfach nur: deny from all
Und jeder Standard benutzer hat OSX und Linux aufm Rechner... Aber darum gehts hier auch gar nicht.
Die Datei gehören dem Webserver und man kann noch darauf zugreifen ich weiß auch nich wirklich wo der Widerspruch sein soll, immerhin läuft das Skript doch auf dem Server mit den Berechtigungen des entsprechenden Users. Und wenn die Dateien diesem User gehören, da er sie auch erstellt hat --> Upload dann kann auch nur er mit 700 auf diese Datein zugreifen und über readfile ausgeben...
@GreenGene: Ich weiss nicht wie man das noch erklären soll: Wenn der Webserver darauf Zugriff hat (Dateisystemrechte), und es in einem Verzeichnis innerhalb vom Webroot liegt, KANN DER BENUTZER ES DOWNLOADEN. Das Script (PHP) läuft unter dem Benutzer des Webservers - es läuft im Webserver-Prozess (normalerweise).
Nur weil du per FTP up/downloaden kannst, heisst es nicht, dass der Webserver darauf Zugriff hat. Ich schätze der FTP Server läuft bei deinem Hoster unter einem anderen Benutzer als der Webserver, das würde dein Missverständnis erklären.
bu1137 hat es dir doch erklärt, entweder der Webserver hat die Rechte die Datei zu lesen (Datei wird gesendet) oder diesem fehlen die Rechte (HTTP-Error 403). Und wenn die Rechte fehlen kannst du machen was du willst, dann ist kein Zugriff möglich, auch nicht "für spezielle Nutzer".
Dateien in der Datenbank speichern ist ja wohl kompletter Blödsinn, ob mit MySQL oder MS SQL. Das macht niemals wirklich sinn.
@GreenGene: Wie ice-breaker schon sagt. Mode 700 bringt gar nix, .htaccess oder in einem Verzeichnis welches nicht im Webroot ist. Und den Typ einer Datei findet man übrigens nicht nur über deren Endung heraus.
Es geht aber, ob ihr es glaubt oder nicht man kann nicht drauf zugreifen (direkt) aber es wird ausgegeben...
Und warum sollte der Webserver sich selbst Dateien zusenden? Er kann sie doch direkt lesen ice-breaker?
Ich werde nicht nochmals versuchen, dir Dateisystemrechte/Benutzer/... zu erklären. Aber betreffend Datenbank und Dateien speichern: Nur weil etwas geht, heisst es noch lange nicht, dass es eine intelligente Idee ist.
Das sollst du auch gar nicht, ich lade per Skript eine Datei hoch, diese wird gespeichert... leider momentan noch mit den falschen Berechtigungen, also ändere ich es per ftp und dann kann die Datei über ein Skript heruntergeladen werden aber nicht mehr direkt. Im Prinzip ist ja egal was dahinter steht, es funktioniert und zwar einwandfrei und ist deswegen meiner Meinung nach die einfachste Methode die Dateien zu schützen, als sich auch noch mit .htacess abzumühen.
Wie du selbst geschrieben hast das Skript läuft über den Webserverbenutzer = Dateinhaber der Normale Internetuser ist aber nicht der Besitzer also hat er keinen Zugriff was soll daran falsch sein? Und der ftp läuft über den selben Benutzer...
Dass deine Methode funktioniert basiert auf Glück oder einem Fehler deinerseits. Aber richtig kann es nicht sein. Und daher würde ich deinen Weg niemandem empfehlen.
Beispiel: Der "Internetuser" verbindet sich mit dem Webserver zu. Dieser läuft unter Benutzer www. Und mit diesen Rechten greift nun dein "Internetuser" auf Dateien zu. Und wenn PHP nicht zb. per fastcgi läuft, läuft es ebenfalls unter dem Benutzer www. Da gibt es keinen eigenen Benutzer "Internetuser".
Oder du irrst dich...
Link entfernt
ist der direkte Dateilink
Link entfernt
Der Link zum Skript
Und wenn ich auf den ersten Link klicke kommt ein Fehler, wenn ich den zweiten Link benutze funktioniert es...
Ergänzung ()
Es soll ja auch keinen Benutzer für den Internetuser geben, dieser läuft unter öffentlich oder sonst was aber eben nicht unter dem Skriptbenutzer, dieser ist ein anderer.
Der Internetuser läuft unter dem Webserver-Benutzer, und PHP (dein Script) in der Regel ebenso. Kein Unterschied. Ich weiss nicht wie oft ich das noch wiederholen soll.
Warum dein Gewurstel funktioniert, kann ich dir nicht sagen, ohne die Konfiguration zu sehen.
Und warum steht dann sogar auf sellphp.de das es geht? Damit hättest du dir im übrigen die Antwort gegeben es ist offensichtlich nicht so, dass beide den gleichen Benutzer haben...
Unter welchem Benutzer dein Script läuft, siehst du zb. in der Ausgabe von <?php phpinfo() ?> unter apache2handler (falls zutreffend) User/Group.
Und wem die Datei gehört solltest du mittels FTP Client herausfinden können. Da du die Datei per Script hochgeladen hast, wird sie dem Script Benutzer gehören. Oftmals ist es aber so, dass der FTP Server unter einem anderen User läuft. Lad auf dem Wege mal was hoch und Vergleich die Benutzer.
Unter welchem Benutzer der Server läuft, könntest du zb. mittels <?php system("ps aux"); ?> herausfinden, sofern system() nicht deaktiviert ist. httpd ist der relevante Prozess, der Benutzer steht in der ersten Spalte.
Also zunächst einmal das ganze ist ein V-Server sowohl FTP als auch Das Skript laufen über denselben nicht root benutzer. In der phpinfo() Ausgabe konnte ich zu deinem gewünschtem Eintrag nichts finden und auch nichts vergleichbares, aber die Dateien gehören wie ich schon gesagt habe und du auch vermutet hast dem selben Benutze unter dem das Skript läuft. Unter welchem Benutzer user laufen, die von außen direkt zugreifen weiß ich nicht, aber eben nicht über den selben so viel ist klar und wenn das beim threadersteller ebenfalls der fall ist und das scheint ja doch nicht so unüblich zu sein, wenn es auf selfphp steht dann kann er es doch auch über diese Methode versuchen, wenns klappt ist doch super.
Wenn ein Benutzer nicht am System (Linux) angemeldet ist, läuft er unter dem Account des Webservers (Sprich alle normalen anonymen Internetbenutzer agieren über den Benutzer des WebServers) . Erst wenn er sich am System anmeldet und ein authentifizierungstoken besitzt, kann der WebServer dieses Token verwenden, um im "Auftrag" des Nutzers Operationen auszuführen (Impersonation). Mit System ist dabei Linux gemeint und nicht ein in der eigenen DB angelegter Benutzer.
Schön, dass du einfach nur beleidigend bist aber weder zum Thema was beiträgst damit noch erklären kannst wieso es offensichtlich funktioniert. Und was bis jetzt jeder vollkommen ignoriert hat ist, dass die Lösung sogar auf selfphp.de steht die Leute da sind ja schließlich nich total dumm