δίνοντας ίδια τιμή σε πολλές μεταβλητές

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

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

Απάντηση
gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από gvre » 01 Φεβ 2012 23:22

Παραδείγματα από προβλήματα που μπορείς να έχεις από τη χρήση του $_REQUEST:

Ας υποθέσουμε ότι κάποιο site χρησιμοποιεί το $_REQUEST για να διαβάσει τον νέο κωδικό ενός χρήστη που θέλει να τον αλλάξει. Το όνομα του πεδίου ας πούμε ότι θα είναι password (ακόμα και να μην είναι, δεν είναι δύσκολο να βρεις το πραγματικό όνομα). Με κάποιο τρόπο ο επιτιθέμενος αποθηκεύει ένα cookie με όνομα password και βάζει τον κωδικό της αρεσκείας του (πχ 123qwe). Όταν ο χρήστης αλλάξει τον κωδικό του, το $_POST['password'] θα χαθεί και τη θέση του θα πάρει το $_COOKIE['password'].

Ας υποθέσουμε ότι είσαι σε ένα τραπεζικό site και θέλεις να μεταφέρεις ένα ποσό από τον ένα λογαριασμό σου στον άλλο. Ο επιτιθέμενος μπορεί να αποθηκεύσει ένα cookie με το όνομα του λογαριασμού προορισμού και τιμή το δικό του λογαριασμό και να του κάνεις δώρο μερικά ευρώ.

Ας υποθέσουμε ότι θέλεις να κάνεις update μια εγγραφή στη βάση. Συνήθως, έχεις ένα action=update και ένα id μαζί με τα υπόλοιπα στοιχεία. Ο επιτιθέμενος μπορεί να αποθηκεύσει σε ένα cookie με όνομα action την τιμή delete. Μόλις πατήσεις το save η εγγραφή θα διαγραφεί.

Ας υποθέσουμε ότι ο επιτιθέμενος μπορεί να αποθηκεύσει σε ένα cookie με όνομα action την τιμή logout. Ο χρήστης δε θα μπορεί να κάνει login μέχρι να σβήσει το cookie.

Μια πολύ απλή περίπτωση είναι να κρατάς σε cookie το user_id ή το username του χρήστη που έχει κάνει login. Κάποια στιγμή, ως admin, θέλεις να αλλάξεις τον κωδικό ενός χρήστη με user_id=123. Αυτό που θα πετύχεις είναι να αλλάξεις τον δικό σου κωδικό.

Γενικά υπάρχουν πολλές τέτοιες περιπτώσεις. Δεν είναι εύκολο να δημιουργήσεις το cookie για αυτές τις περιπτώσεις αλλά δεν είναι και απίθανο.
Το να περνάς το $_REQUEST από κάποια συνάρτηση για να κάνεις sanitize δεν αλλάζει κάτι καθώς δεν έχεις περίεργα data σε αυτές τις περιπτώσεις.

ps. Μπορείς να στείλεις εδώ ή σε pm τον κώδικα από τη μέθοδο getSafeVars();

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

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από korgr » 02 Φεβ 2012 11:00

Αν μιλάμε για sensitive data σαφώς και χρειάζονται άλλοι χειρισμοί.
Εγώ μιλούσα για typical data όπως είναι το currentPage ενός pagination κλπ.
Στην περιπτώσεις που αναφέρεις θα ήταν τρελός ένας developer να μην ελέγχει και την πηγή των δεδομένων.
Απλά έτσι όπως το ανέφερες, ακούστηκε «τζιζ, μην χρησιμοποιείτε ποτέ το $_REQUEST» πράγμα το οποίο δεν ισχύει γιατί δεν είναι όλες οι περιπτώσεις ίδιες.

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από Apostolis_38 » 02 Φεβ 2012 11:19

korgr έγραψε:Απλά έτσι όπως το ανέφερες, ακούστηκε «τζιζ, μην χρησιμοποιείτε ποτέ το $_REQUEST»
Κι εγώ έτσι το κατάλαβα.
Τζάμπα μας κοψοχόλιασε.
:D

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από burnmind » 02 Φεβ 2012 11:42

Sensitive ή insensitive data, καλό είναι να δουλεύουμε πάντα με τον πιο ασφαλή τρόπο και για λόγους συνήθειας, ακόμα κι αν είναι πιο χρονοβόρος (που στην συγκεκριμένη περίπτωση δεν είναι). :wink:

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

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από korgr » 02 Φεβ 2012 13:09

Προσωπικά στο δικό μου CMS
το

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

		
		$variables->getSafeVars(array_keys($_REQUEST));
το έκανα

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

		$_REQUEST = array_merge($_GET, $_POST);
		$variables->getSafeVars(array_keys($_REQUEST));
ώστε να έχω το ίδιο functionality

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από gvre » 02 Φεβ 2012 22:16

Apostolis_38 έγραψε:Ναι. Απλώς δεν έχω τώρα τη δυνατότητα να κάτσω να γράψω όλο το κατεβατό.
Πάντως μπήκες στο νόημα :wink:


Οσο για την function, βεβαίως και θα κάνει δουλειά. Οπως και άλλοι τρόποι.
Το θέμα είναι γιατί να παιδευτείς να γράψεις πολλές τέτοιες functions.
Κι αν προστεθούν κι άλλες σελίδες;
Ξανά πάλι τα ίδια;
Δε χρειάζεσαι πολλές συναρτήσεις. Με 3-4 κάνεις τη δουλειά σου σωστά και μπορείς να τις χρησιμοποιήσεις σε όλες τις σελίδες.

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από gvre » 02 Φεβ 2012 22:21

korgr έγραψε:Προσωπικά στο δικό μου CMS
το

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

		
		$variables->getSafeVars(array_keys($_REQUEST));
το έκανα

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

		$_REQUEST = array_merge($_GET, $_POST);
		$variables->getSafeVars(array_keys($_REQUEST));
ώστε να έχω το ίδιο functionality
Η getSafeVars() κάνει κάτι σαν το παρακάτω;

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

foreach($keys as $k)
        $GLOBALS[$k] = $_REQUEST[$k];

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

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από korgr » 03 Φεβ 2012 08:59

Η getSafeVars() κανει sanitize και περναει τις μεταβλητες ως public στην class $document
Μετα χρησιμοποιω αυτες που θελω ως $document->varName

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από Apostolis_38 » 03 Φεβ 2012 10:41

gvre έγραψε:
Apostolis_38 έγραψε:Ναι. Απλώς δεν έχω τώρα τη δυνατότητα να κάτσω να γράψω όλο το κατεβατό.
Πάντως μπήκες στο νόημα :wink:


Οσο για την function, βεβαίως και θα κάνει δουλειά. Οπως και άλλοι τρόποι.
Το θέμα είναι γιατί να παιδευτείς να γράψεις πολλές τέτοιες functions.
Κι αν προστεθούν κι άλλες σελίδες;
Ξανά πάλι τα ίδια;
Δε χρειάζεσαι πολλές συναρτήσεις. Με 3-4 κάνεις τη δουλειά σου σωστά και μπορείς να τις χρησιμοποιήσεις σε όλες τις σελίδες.
Νομίζω πως δεν έχει νόημα να συζητάμε για θέματα που άπτονται στον τρόπο που δουλεύει ο καθένας, γιατί λίγο πολύ είναι θέμα "περί ορέξεως".
Πάντως να σου πω οτι χρειάζεσαι τόσες functions όσες είναι και οι μεταβλητές σου και χρειάζεται να τις καλέσεις τόσες φορές όσες είναι και οι σελίδες που τις χρειάζονται. Ισως και περισσότερες.

Εμένα με βολεύει ο άλλος τρόπος.
Δηλώνω στην κατάλληλη σελίδα τις μεταβλητές, όπου και τις "θωρακίζω", και με ένα include τίς έχω όπου και όσο θέλω.
Ασε που αποφεύγω και ένα σκασμό warnings στο log file :wink:

Θα μου πεις υπάρχουν και κάποιες στάνταρ πρακτικές που πρέπει να ακολουθείς για λόγους ασφαλείας, πρακτικής κ.λ.π.
Σίγουρα, αλλά νομίζω πως όταν τηρείς κάποιους βασικούς κανόνες απο κεί και πέρα μπορείς να είσαι κάπως "ελαστικός" με τον τρόπο με τον οποίο προστατεύεις την εφαρμογή σου. Ελαστικός με την έννοια οτι μπορείς να διαλέξεις τι και πως θα υλοποιήσεις κάτι.
Προσωπικά αποφεύγω τα cookies όπου είναι δυνατόν, θωρακίζω τις μεταβλητές μέχρι σκασμού και με τον τρόπο που δουλεύω με βολεύει περισσότερο.
Και μέχρι στιγμής δεν έχω αντιμετωπίσει κανένα πρόβλημα.
Εκτός κι αν έχει τύχει να πέσω σε hackers που θέλουν μόνο να ρίξουν τη Μαιρούλα :D

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από gvre » 03 Φεβ 2012 10:56

Apostolis_38 έγραψε: Νομίζω πως δεν έχει νόημα να συζητάμε για θέματα που άπτονται στον τρόπο που δουλεύει ο καθένας, γιατί λίγο πολύ είναι θέμα "περί ορέξεως".
Πάντως να σου πω οτι χρειάζεσαι τόσες functions όσες είναι και οι μεταβλητές σου και χρειάζεται να τις καλέσεις τόσες φορές όσες είναι και οι σελίδες που τις χρειάζονται. Ισως και περισσότερες.

Εμένα με βολεύει ο άλλος τρόπος.
Δηλώνω στην κατάλληλη σελίδα τις μεταβλητές, όπου και τις "θωρακίζω", και με ένα include τίς έχω όπου και όσο θέλω.
Ασε που αποφεύγω και ένα σκασμό warnings στο log file :wink:

Θα μου πεις υπάρχουν και κάποιες στάνταρ πρακτικές που πρέπει να ακολουθείς για λόγους ασφαλείας, πρακτικής κ.λ.π.
Προσωπικά αποφεύγω τα cookies όπου είναι δυνατόν, θωρακίζω τις μεταβλητές μέχρι σκασμού και με τον τρόπο που δουλεύω με βολεύει περισσότερο.
Και μέχρι στιγμής δεν έχω αντιμετωπίσει κανένα πρόβλημα.
Εκτός κι αν έχει τύχει να πέσω σε hackers που θέλουν μόνο να ρίξουν τη Μαιρούλα :D
Σίγουρα ο καθένας δουλεύει όπως τον βολεύει. Εσένα σε βολεύει να έχεις όλες τις μεταβλητές σε ένα αρχείο, εμένα να τις διαβάζω τη στιγμή που θέλω να τις χρησιμοποιήσω. Γούστα είναι αυτά.
Σχετικά με τις συναρτήσεις, δε χρειάζεσαι τόσες functions όσες είναι και οι μεταβλητές σου.

Απάντηση

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

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

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