philos Δημοσ. 18 Φεβρουαρίου 2015 Δημοσ. 18 Φεβρουαρίου 2015 Καλησπέρα Θα ήθελα μερικές πληροφορίες για το εξής που θέλω να φτιάξω σε 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? Είναι εφικτό κάτι τέτοιο;
chrism4111 Δημοσ. 19 Φεβρουαρίου 2015 Δημοσ. 19 Φεβρουαρίου 2015 Αν θυμάμαι καλά για να δεις από που έρχεται το Request χρησιμοποιείς το παρακάτω$domain = $_SERVER['HTTP_REFERER'];Πειραματίσου όμως με τα Referers...Όσο για την ασφάλεια των XML μπορεί να ασφαλίσεις ένα αρχείο xml:1ον : Αλλάζοντας τα δικαιώματα του αρχείου σε 700. Έτσι την πλήρη διαχείριση την έχει ο δημιουργός του αρχείου.2ον: Μέσω .htaccess RewriteEngine on RewriteRule ^yourfile.xml$ 404.html Με αυτό το Rule μόλις γίνετε κάποιο request προς το αρχείο αυτό τότε θα τον πηγαίνει στην σελίδα 404.html3ον : να κρυπτογραφείς το αρχείο xml και να το αποκρυπτογραφείς onthefly την ώρα που κάνεις το Rendering. Αυτό βέβαια σίγουρα θα σε ρίξει σε Performance. Πάντα ανάλογα με τον όγκο των δεδομένων που αποθηκεύονται στα XML.Εγώ πάντως αν ήμουν στη θέση μάλλον όλο αυτό δεν θα το έκανα σε PHP αλλά σε έναν NodeJS server με Javascript (Backend) AngularJS (FrontEnd) και MongoDB (Data Store).
alou Δημοσ. 19 Φεβρουαρίου 2015 Δημοσ. 19 Φεβρουαρίου 2015 Το 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% - απλά ίσως αποφασίσεις να κάνεις τα στραβά μάτια αν δεν είναι κάτι μείζωνος σημασίας. 1
philos Δημοσ. 19 Φεβρουαρίου 2015 Μέλος Δημοσ. 19 Φεβρουαρίου 2015 Δεν είναι κάτι μείζωνος σημασίας. Θα ήθελα περισσότερες πληροφορίες για το "Αλλάζοντας τα δικαιώματα του αρχείου σε 700. Έτσι την πλήρη διαχείριση την έχει ο δημιουργός του αρχείου.". Απ' ότι βλέπω γίνεται με τη συνάρτηση chmod της PHP. Αυτό που θέλω είναι το php αρχείο που θα τραβάει ο embed code να μπορεί να διαβάζει το αρχείο xml, ενώ αν κάποιος ξέρει το URL του xml, να μη μπορεί να το προβάλλει "έτσι" στον browser. Οπότε αν το κάνω chmod 700 θα δουλέψει; Ρωτάω γιατί δεν ξέρω αν έχει διαφορά στο ποιος είναι ο ιδιωκτήτης του xml όταν α) διαβάζεται μέσα από php αρχείο (public υπολογίζεται; ) ή β) διαβάζεται άμεσα από τον browser (εδώ σίγουρα είναι public)
parsifal Δημοσ. 19 Φεβρουαρίου 2015 Δημοσ. 19 Φεβρουαρίου 2015 Κατά τη γνώμη μου, μη μπλέκεις με τα δικαιώματα των .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; } ...θα σου έκανε δουλειά.
chrism4111 Δημοσ. 19 Φεβρουαρίου 2015 Δημοσ. 19 Φεβρουαρίου 2015 Συμφωνώ με τον 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 θα είναι πάντα κάτι που θα μένει σταθερό .
philos Δημοσ. 20 Φεβρουαρίου 2015 Μέλος Δημοσ. 20 Φεβρουαρίου 2015 Καλή κι αυτή η ιδέα με το md5, θα την ακολουθήσω Το μόνο ότι με προβληματίζει μη και τυχών η μηχανή (vbulletin) κάνει σε κανά πρόσθετο (addon) ή ο πυρήνας της, request σε xml/json μέσω του browser και με το deny all υπάρξει πρόβλημα. Πως μπορεί να αποκλειστεί αυτό το ενδεχώμενο; Μήπως αν: - Έφτιαχνα το περιεχόμενο των αρχείων σε κάποιο format (xml/json) - Τους έδινα μια εντελώς δική μου κατάληξη αρχείου - Έκανα deny all στο htaccess την κατάληξη αυτή - Τραβούσα μετά τα δεδομένα στο PHP. Θα τα δεχτεί κανονικά; Ευχαριστώ
parsifal Δημοσ. 20 Φεβρουαρίου 2015 Δημοσ. 20 Φεβρουαρίου 2015 Δεν είναι πρόβλημα. Σε 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, ενώ θα αρκούσε μία απευθείας (και ταχύτερη) κλήση συστήματος. 1
philos Δημοσ. 23 Φεβρουαρίου 2015 Μέλος Δημοσ. 23 Φεβρουαρίου 2015 Τελικά παιδιά έβαλα ένα .htaccess μέσα στο φάκελο των δεδομένων: Deny from all ...και ξεμπέρδεψα! Ελπίζω να είναι ασφαλές (στις δοκιμές μου, δεν ανοίγει ο browser τα αρχεία). Κάτι άλλο: χρησιμοποίησα επίσης την md5 της PHP για τα ονόματα των αρχείων. Την τρέχω συνολικά 4 φορές στο αρχείο που θα προσπελαύνεται συνέχεια. Μήπως σαν συνάρτηση είναι βαριά για τον server; Απλά το αρχείο θα γίνεται συνέχεια request και θέλω να μην επιβαρύνει πολύ τον server. Thanks
PC_MAGAS Δημοσ. 23 Φεβρουαρίου 2015 Δημοσ. 23 Φεβρουαρίου 2015 Δεν μου αρέσει η λύση του iframe θα προριμούσα NodeJs που θα λειτουργεί σαν web crawler που μέσω μιας database είτε με Mongo DB είτα uname it με αποθηκευμένα urls θα επισκέπτεται τα site και θα ανανεώνει την Html σελίδα και οποιαδήποτε εικόνα θες.
philos Δημοσ. 23 Φεβρουαρίου 2015 Μέλος Δημοσ. 23 Φεβρουαρίου 2015 Θα ασχοληθώ κάποια στιγμή και με NodeJs, απλά επειδή το βιάζομαι περιορίζομαι στις γνώσεις που έχω. Το script κάνει την εξής χρήση μνήμης: Memory Usage: 732.140625 KB Δηλαδή 732KB. Είναι καλή τιμή;
παπι Δημοσ. 23 Φεβρουαρίου 2015 Δημοσ. 23 Φεβρουαρίου 2015 2. Για λόγους ασφαλείας και αυθεντικοποίησης (αν χρησιμοποιώ τη σωστή λέξη), θέλουμε ο κώδικας iframe/embed code να τρέχει σε συγκεκριμένα sites που ορίζει ο χρήστης (δλδ ορίζει μια whitelist). Κι αυτή η λίστα θα είναι κασαρισμένη (και ενδεχωμένος στο xml αρχείο). Οπότε αν κάποιος τοποθετήσει το iframe στην ιστοσελίδα του domain.com και το domain.com δεν είναι στη λίστα, τότε δε θα το εμφανίζει/ θα βγάζει error. Το θέμα είναι: με ποια μεταβλητή μπορώ να ελέγξω μέσα στο αρχείο, το URL του site που κάνει το request? Είναι εφικτό κάτι τέτοιο; μονο με api key θα εισαι οκ. 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα