Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα :-)

 

Θα ήθελα μερικές πληροφορίες για το εξής που θέλω να φτιάξω σε PHP.

Πρόκειται για έναν embed code/ iframe, το οποίο θα τοποθετείται σε εξωτερικά sites και το οποίο θα "χτυπάει" ένα PHP file του server.

Το php file βασικά θα τραβάει δεδομένα από αρχεία xml που θα είναι ανεβασμένα στον server (δλδ δε θα κάνει database queries ή τίποτα βαρύ σε κώδικα) και θα ανανεώνονται κάθε 24 ώρες.

1. Υπάρχει μήπως κανένας άλλος προτεινόμενος τρόπος να κασάρω δεδομένα και να τα εμφανίζω με PHP? Απλά αν κάποιος ανακαλύψει το URL του xml θα δει τα δεδομένα και δε θα ήθελα να μπορεί ο καθένας να το κάνει αυτό.

2. Για λόγους ασφαλείας και αυθεντικοποίησης (αν χρησιμοποιώ τη σωστή λέξη), θέλουμε ο κώδικας iframe/embed code να τρέχει σε συγκεκριμένα sites που ορίζει ο χρήστης (δλδ ορίζει μια whitelist). Κι αυτή η λίστα θα είναι κασαρισμένη (και ενδεχωμένος στο xml αρχείο). Οπότε αν κάποιος τοποθετήσει το iframe στην ιστοσελίδα του domain.com και το domain.com δεν είναι στη λίστα, τότε δε θα το εμφανίζει/ θα βγάζει error.

Το θέμα είναι: με ποια μεταβλητή μπορώ να ελέγξω μέσα στο αρχείο, το URL του site που κάνει το request? Είναι εφικτό κάτι τέτοιο;

 

:-)

 

Δημοσ.

Αν θυμάμαι καλά για να δεις από που έρχεται το Request χρησιμοποιείς το παρακάτω

$domain = $_SERVER['HTTP_REFERER'];

Πειραματίσου όμως με τα Referers...


Όσο για την ασφάλεια των XML μπορεί να ασφαλίσεις ένα αρχείο xml:
1ον : Αλλάζοντας τα δικαιώματα του αρχείου σε 700. Έτσι την πλήρη διαχείριση την έχει ο δημιουργός του αρχείου.
2ον: Μέσω .htaccess 
        

       RewriteEngine on
       RewriteRule ^yourfile.xml$ 404.html

 

Με αυτό το Rule μόλις γίνετε κάποιο request προς το αρχείο αυτό τότε θα τον πηγαίνει στην σελίδα 404.html

3ον : να κρυπτογραφείς το αρχείο xml και να το αποκρυπτογραφείς onthefly την ώρα που κάνεις το Rendering. Αυτό βέβαια σίγουρα θα σε ρίξει σε Performance. Πάντα ανάλογα με τον όγκο των δεδομένων που αποθηκεύονται στα XML.

Εγώ πάντως αν ήμουν στη θέση μάλλον όλο αυτό δεν θα το έκανα σε PHP αλλά σε έναν NodeJS server με Javascript (Backend) AngularJS (FrontEnd) και MongoDB (Data Store).
 

Δημοσ.

Το referer είναι απλά μια παράμετρος του header, σε επίπεδο php μπορεί να αλλάξει οπότε αν πραγματικά σε νοιάζει, δεν σε καλύπτει κάτι τέτοιο - με 2 γραμμές οποιοδήποτε script ζητάει την πληροφορία και σου βάζει ότι http referer ότι θέλει - πx

$cp = curl_init('http://target-url.com');
curl_setopt($cp, CURLOPT_USERAGENT, 'http://www.google.com');
...

Σε αυτές τις περιπτώσεις, μια λογική λύση είναι να χρησιμοποιήσεις μια παράμετρο με κάποιο token πχ getFile.php?t=asdf4or3434fasdfjlasdfkj

το οποίο έχει μέσα κάποια στοιχεία που θα αποκωδικοποιήσεις αλλά προϋποθέτει και λίγο κώδικα σε αυτόν που σερβίρεις.

 

Οτιδήποτε και να τσεκάρεις στον browser, δεν μπορείς να το εμπιστευτείς 100% - απλά ίσως αποφασίσεις να κάνεις τα στραβά μάτια αν δεν είναι κάτι μείζωνος σημασίας.

  • Like 1
Δημοσ.

Δεν είναι κάτι μείζωνος σημασίας. Θα ήθελα περισσότερες πληροφορίες για το "Αλλάζοντας τα δικαιώματα του αρχείου σε 700. Έτσι την πλήρη διαχείριση την έχει ο δημιουργός του αρχείου.". Απ' ότι βλέπω γίνεται με τη συνάρτηση chmod της PHP.

 

Αυτό που θέλω είναι το php αρχείο που θα τραβάει ο embed code να μπορεί να διαβάζει το αρχείο xml, ενώ αν κάποιος ξέρει το URL του xml, να μη μπορεί να το προβάλλει "έτσι" στον browser. Οπότε αν το κάνω chmod 700 θα δουλέψει;

Ρωτάω γιατί δεν ξέρω αν έχει διαφορά στο ποιος είναι ο ιδιωκτήτης του xml όταν α) διαβάζεται μέσα από php αρχείο (public υπολογίζεται; ) ή β) διαβάζεται άμεσα από τον browser (εδώ σίγουρα είναι public)

Δημοσ.

Κατά τη γνώμη μου, μη μπλέκεις με τα δικαιώματα των .xml στο filesystem, γιατί ο σωστός συνδυασμός δικαιωμάτων θα εξαρτάται από τον τρόπο που τρέχουν και από τα privileges που έχουν τόσο ο web server όσο και ο PHP interpreter, που μπορεί να διαφέρουν από host σε host.

 

Καλύτερη λύση νομίζω πως είναι να μπλοκάρεις τη web πρόσβαση από το configuration του web server. Π.χ. με αρχείο .htaccess όπως πρότεινε ο chrism4111. Ή αν δεν είσαι με Apache server αλλά με nginx, π.χ. ένα τέτοιο location block μέσα στο server block του configuration αρχείου του site σου:

location ~ \.(xml)$ {
    deny all;
}

...θα σου έκανε δουλειά.

Δημοσ.

Συμφωνώ με τον Parsifal... 
Μην μπλέκεις με δικαιώματα αρχείων. 

Πέρα από αυτα άλλη μια πρόταση είναι η παρακάτω.

 

Παλαιότερα είχα ασχοληθεί πολύ με xml αρχεία. Ήμουν Junior τότε (μάθαινα προγραμματισμό).
Εγώ τότε είχα ασφαλίσει τα xml αρχεία δίνοντάς για ονόματα των αρχείων md5 hashes.
Νομίζω και αυτό σαν λύση είναι εφικτό. Αφου ένα md5 hash είναι πολύ δύσκολο να απομνημονευτεί. Ετσί εάν κάνεις τα request στο backend δεν θα φένεται πουθενά. Επίσης θα μπορουσες να αποθηκευεις τα xml με την παρακάτω μορφή και να αλλάζεις το filename κάθε φορά που κάνεις Refresh το xml.
 

$filename = md5( $real_file_name . $month . $day . $year) . ".xml";

οπου το $real_file_name θα είναι πάντα κάτι που θα μένει σταθερό .

 

Δημοσ.

Καλή κι αυτή η ιδέα με το md5, θα την ακολουθήσω :)

Το μόνο ότι με προβληματίζει μη και τυχών η μηχανή (vbulletin) κάνει σε κανά πρόσθετο (addon) ή ο πυρήνας της, request σε xml/json μέσω του browser και με το deny all υπάρξει πρόβλημα.

Πως μπορεί να αποκλειστεί αυτό το ενδεχώμενο;

 

Μήπως αν:

- Έφτιαχνα το περιεχόμενο των αρχείων σε κάποιο format (xml/json)

- Τους έδινα μια εντελώς δική μου κατάληξη αρχείου

- Έκανα deny all στο htaccess την κατάληξη αυτή

- Τραβούσα μετά τα δεδομένα στο PHP. Θα τα δεχτεί κανονικά;

 

Ευχαριστώ :)

Δημοσ.

Δεν είναι πρόβλημα. Σε Apache και nginx (φαντάζομαι και σε άλλους δημοφιλείς webservers), μπορείς να ορίσεις exception για HTTP requests που προέρχονται από το localhost/127.0.0.1.

 

Π.χ. σε nginx:

 

location ~ \.(xml)$ {
    allow 127.0.0.1;
    deny all;
}
Αν και δε νομίζω να το χρειαστείς, γιατί ειλικρινά δε βλέπω λόγο το backend του vB να φορτώνει XML αρχεία μέσω HTTP requests, ενώ θα αρκούσε μία απευθείας (και ταχύτερη) κλήση συστήματος.
  • Like 1
Δημοσ.

Τελικά παιδιά έβαλα ένα .htaccess μέσα στο φάκελο των δεδομένων:

Deny from all

...και ξεμπέρδεψα! Ελπίζω να είναι ασφαλές (στις δοκιμές μου, δεν ανοίγει ο browser τα αρχεία).

 

Κάτι άλλο: χρησιμοποίησα επίσης την md5 της PHP για τα ονόματα των αρχείων.

Την τρέχω συνολικά 4 φορές στο αρχείο που θα προσπελαύνεται συνέχεια. Μήπως σαν συνάρτηση είναι βαριά για τον server;

Απλά το αρχείο θα γίνεται συνέχεια request και θέλω να μην επιβαρύνει πολύ τον server.

 

Thanks :-)

Δημοσ.

Δεν μου αρέσει η λύση του iframe θα προριμούσα NodeJs που θα λειτουργεί σαν web crawler που μέσω μιας database είτε με Mongo DB είτα uname it με αποθηκευμένα urls θα επισκέπτεται τα site και θα ανανεώνει την Html σελίδα και οποιαδήποτε εικόνα θες.

Δημοσ.

Θα ασχοληθώ κάποια στιγμή και με NodeJs, απλά επειδή το βιάζομαι περιορίζομαι στις γνώσεις που έχω.

 

Το script κάνει την εξής χρήση μνήμης:

Memory Usage: 732.140625 KB

 

Δηλαδή 732KB. Είναι καλή τιμή;

Δημοσ.

2. Για λόγους ασφαλείας και αυθεντικοποίησης (αν χρησιμοποιώ τη σωστή λέξη), θέλουμε ο κώδικας iframe/embed code να τρέχει σε συγκεκριμένα sites που ορίζει ο χρήστης (δλδ ορίζει μια whitelist). Κι αυτή η λίστα θα είναι κασαρισμένη (και ενδεχωμένος στο xml αρχείο). Οπότε αν κάποιος τοποθετήσει το iframe στην ιστοσελίδα του domain.com και το domain.com δεν είναι στη λίστα, τότε δε θα το εμφανίζει/ θα βγάζει error.

Το θέμα είναι: με ποια μεταβλητή μπορώ να ελέγξω μέσα στο αρχείο, το URL του site που κάνει το request? Είναι εφικτό κάτι τέτοιο;

 

:-)

μονο με api key θα εισαι οκ.

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...