Προστασία αρχείων

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
nikirtsi
Δημοσιεύσεις: 169
Εγγραφή: 02 Ιουν 2006 16:35

Προστασία αρχείων

Δημοσίευση από nikirtsi » 20 Νοέμ 2008 11:08

Έστω η κάτωθι δομή αρχείων

-main
---files
------a.pdf
---phpFiles
------getFile.php

Στον φάκελο main υπάρχουν οι φάκελοι files kai phpFiles)
Στον φάκελο files υπάρχουν διάφορα αρχεία προς διάθεση "download",
στο παράδειγμα μόνο το a.pdf
και στον φάκελο "phpFiles" υπαρχει το αρχείο getFile.php το οποίο είναι αρμόδιο να σερβήρει τα περιεχόμενα του φακέλου "files"

Πιο συγκεκριμένα το getFile.php συνδέει τον χρήστη στον σύστημα με κάποια λογική login και κατ επέκτασι του αποδίδει κάποια δικαιώματα, σύμφωνα με τα οποία δικαιώματα του εμφανίζει ποια αρχεία από τον φάκελο "files" μπορεί να κατεβάσει.

Ως εδώ όλα καλά επομένως .
Το πρόβλημα είναι όμως ότι ο καθένας μπορεί να γράψει ως URL ...../main/files/a.pdf
και να κατεβάσει το αρχείο a.pdf χωρίς να έχει εξουσιοδοτηθεί μέσω της λογικής του αρχείου getFiles.php

Πώς θα μπορούσε να μήν συμβαίνει αυτό?
Δηλαδή η πρόσβαση στα περιεχόμενα του φακέλου "files" προγραμματιστικά
να ήταν εφικτή ΜΟΝΟ μέσω της λογικής του getFiles.php.
Ακόμα και ο ήλιος, στό αριστερό μελίγγι μου ανατέλλει καί στό ζερβό δύει.

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Προστασία αρχείων

Δημοσίευση από cpulse » 20 Νοέμ 2008 21:37

Στο directory files βάζεις ένα αρχείο με όνομα ".htaccess" και με περιεχόμενο "deny from all"

Άβαταρ μέλους
nikirtsi
Δημοσιεύσεις: 169
Εγγραφή: 02 Ιουν 2006 16:35

Προστασία αρχείων

Δημοσίευση από nikirtsi » 20 Νοέμ 2008 22:51

Όχι Αλέξη δεν είναι αυτό...

Αν κάνω αυτό που μου λες τότε θα αγνοεί τελείως ο Apache τον φάκελο "files"
απαγορεύοντας μου να τον διαχειριστώ προγραμματιστικά μέσω του getFile.php
Ακόμα και ο ήλιος, στό αριστερό μελίγγι μου ανατέλλει καί στό ζερβό δύει.

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Προστασία αρχείων

Δημοσίευση από fafos » 20 Νοέμ 2008 23:08

Pos tha kserei o xrhsths thn diadromh tou arxeiou? tha thn exeis anakoinosei kapou h ypothetika tha arxizei na katevazei?

Άβαταρ μέλους
dik_
Δημοσιεύσεις: 476
Εγγραφή: 07 Ιουν 2007 11:28

Προστασία αρχείων

Δημοσίευση από dik_ » 20 Νοέμ 2008 23:20

Βγάζεις τα pdf εκτός webroot και τα σερβίρεις με τον κατάλληλο header με το getFile.php, αφού έχεις ελέγξει τα permissions του χρήστη.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Προστασία αρχείων

Δημοσίευση από korgr » 20 Νοέμ 2008 23:25

Αυτές οι δουλειές απαιτούν private folders πχ ένα dir "πίσω" από το site root όπου μόνο η php έχει access
πχ
folder downloads (εδώ τα αρχεία προς download)
folder httpdocs (εδώ το root του site)

και από το download.php που βρίσκεται στο site root δίνουμε "../downloads/filename.ext"

Φυσικά όχι σαν link αλλά σαν δυαδική έξοδο ορίζοντας τα ανάλογα php headers.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Προστασία αρχείων

Δημοσίευση από korgr » 20 Νοέμ 2008 23:26

dik_ έγραψε:Βγάζεις τα pdf εκτός webroot και τα σερβίρεις με τον κατάλληλο header με το getFile.php, αφού έχεις ελέγξει τα permissions του χρήστη.
με πρόλαβες :wink:

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Προστασία αρχείων

Δημοσίευση από cpulse » 21 Νοέμ 2008 00:17

nikirtsi έγραψε:Όχι Αλέξη δεν είναι αυτό...

Αν κάνω αυτό που μου λες τότε θα αγνοεί τελείως ο Apache τον φάκελο "files"
απαγορεύοντας μου να τον διαχειριστώ προγραμματιστικά μέσω του getFile.php
nop.. το .htaccess περιορίζει την πρόσβαση του apache, όχι της PHP
Αν ήθελες να περιορίσεις την πρόσβαση της PHP θα έπρεπε να παίξεις με open_basedir

Άβαταρ μέλους
nikirtsi
Δημοσιεύσεις: 169
Εγγραφή: 02 Ιουν 2006 16:35

Προστασία αρχείων

Δημοσίευση από nikirtsi » 21 Νοέμ 2008 21:13

Αλέξη το πας πολύ μακριά...

dik_ έβγαλα έξω από τον htdocs τον φάκελο "files"
και δεν μπορεί να το σερβίρει ο Apache πάλι, ούτε από το getFile.php

Όπως και να έχει ... μπορεί κάποιος να μιλήσει με κώδικα?
Ακόμα και ο ήλιος, στό αριστερό μελίγγι μου ανατέλλει καί στό ζερβό δύει.

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Προστασία αρχείων

Δημοσίευση από fafos » 21 Νοέμ 2008 23:51


Άβαταρ μέλους
nikirtsi
Δημοσιεύσεις: 169
Εγγραφή: 02 Ιουν 2006 16:35

Προστασία αρχείων

Δημοσίευση από nikirtsi » 22 Νοέμ 2008 12:46

Ευχαριστώ Fafos

Στην ουσία o κώδικας που με παραπέμπεις συσχετίζει φυσικά αρχεία με μοναδικά κλειδιά
για να μπορει να γραφεί κάτι σαν
download.php?id=12312asdasd123
αντι του download.php?filename=myFile.txt


Η ουσία των πραγμάτων (όπως έλεγε και ο dik_ και korgr)
είναι αυτό που βρίσκεται σε κάποιο σημείο του κώδικα που μου έστειλες και λέει

Κώδικας: Επιλογή όλων

 
   ob_start();
   $mm_type="application/octet-stream";
   $file = "actual_download.zip";
   $filename = "bogus_download_name.zip";
 
   header("Cache-Control: public, must-revalidate");
   header("Pragma: no-cache");
   header("Content-Type: " . $mm_type);
   header("Content-Length: " .(string)(filesize($file)) );
   header('Content-Disposition: attachment; filename="'.$filename.'"');
   header("Content-Transfer-Encoding: binary\n");
 
   ob_end_clean();
   readfile($file);
  
Kαι βάσει τον λεγομένων του cPulse το αρχείο
$file (= "actual_download.zip") δεν είναι ανάγκη να είναι "έξω" από τον htdocs, αρκεί ο φάκελος όπου θα το περιέχει να έχει στο .htaccess deny for all

Πολύ καλό, ευχαρτιστώ.
Ακόμα και ο ήλιος, στό αριστερό μελίγγι μου ανατέλλει καί στό ζερβό δύει.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες