L34x88iT Δημοσ. 22 Ιουλίου 2020 Δημοσ. 22 Ιουλίου 2020 (επεξεργασμένο) Καλησπέρα. Θέλω να κάνω μια ερώτηση για θέμα ασφάλειας. Επειδή θέλω να είμαι σίγουρος. Μην βαράτε μπορεί να είναι πολύ γελοία η ερώτηση, γιατί είμαι 99% σίγουρος οτί δεν γίνεται αυτό που περιγράφω παρακάτω, απλά θέλω να είμαι 100% σίγουρος 'Εχω φτιάξει ένα custom site, ο χρήστης κάνει login και δημιουργείται από την php (codeigniter) ενα session με userdata. πχ. id=5, loggedin = true κλπ. Και απο το controller μεταξύ άλλων στέλνω τα data από ένα model πχ. if($this->session->userdata('id') != 0 && $this->session->userdata('id') != NULL && $this->session->userdata('id') != "") { $user_id = $this->session->userdata('id'); $data["user_data"] = $this->users_model->get_user_info($user_id); } $this->load->view('templates/header',$data); $this->load->view('pages/'.$page,$data); $this->load->view('templates/footer',$data) και το view το έχω έτσι <?php if(($this->session->userdata('loggedin'))){?> <?php foreach($user_data as $user){?> . . . . . . . . <? } ?> <? } ?> Οπως το έχω φτιάξει δουλέυει μια χαρά, απλά είμαι περίεργος γιατί θέλω να είμαι ασφαλής, μπορεί κάποιος από frontend να αλλάξει κάποια τιμή που έχει αποθηκευθει στο session του? Δηλαδή να κάνει εγγραφή, το id του να είναι 45, να ανοίγει τα στοιχεία που τραβιούνται από την βάση και που ανήκουν στον χρήστη 45, αλλά με κάποιο τρόπο από frontend (javascript?, εξωτερική σελίδα?) να αλλάξει το session id του σε 43. Οπότε να βλέπει τα δεδομένα του 43. Επεξ/σία 22 Ιουλίου 2020 από L34x88iT
elvizakos Δημοσ. 22 Ιουλίου 2020 Δημοσ. 22 Ιουλίου 2020 Αναφορά σε κείμενο Μπορεί να αλλάξει ο χρήστης το session? Γενικά, και χωρίς να έχω κοιτάξει τον κωδικά σου: όχι. Το session υπάρχει στο server. Αν δεν στείλεις εσύ στοιχεία στον client και δεν "αφήσεις" εσύ με κάποιον τρόπο να κάνει αλλαγές ο client, δεν μπορεί δει και να αλλάξει τιμές του. Αν όμως έχεις κάτι τέτοιο: $_SESSION['a'] = $_GET['test']; τότε μπορεί να αλλάξει ότι υπάρχει στο κλειδί 'a', "χτυπώντας" απλά στο site σου με ένα url argument με όνομα "test" και ότι τιμή θέλει. Με το παραπάνω παράδειγμα μπορεί να πειράξει το κλειδί "a" και τα "παιδιά" του βάζοντας ότι τιμές θέλει (πχ μπορεί δημιουργήσει και να βάλει τιμή εδώ: $_SESSION['a']['b']). Δεν μπορεί να ξεφύγει όμως από αυτό και να πειράξει πχ το $_SESSION['b']. Μπορεί επίσης να ζητήσει νέο session id (αν απλά δεν στείλει session id) ή να στείλει session id άλλου χρήστη και έτσι να έχει το session του άλλου χρήστη αν το γνωρίζει.
k33theod Δημοσ. 22 Ιουλίου 2020 Δημοσ. 22 Ιουλίου 2020 Αυτό που λες λέγεται session hijacking Μπορεί ο χρήστης να στείλει οποιοδήποτε session_id θέλει είτε αλλάζοντας την τιμή στο coockie είτε βάζοντας το ως παράμετρο στο url πχ "http://host/index.php?PHPSESSID=1234" Είναι όμως δύσκολο να πετύχεις κάποιο id px εμένα σε αυτό το session μου έδωσε 0419ce12b40000fcb55d083207000001
elvizakos Δημοσ. 22 Ιουλίου 2020 Δημοσ. 22 Ιουλίου 2020 Καλά ναι. Έτσι κι αλλιώς ο TS πιστεύω εννοούσε για μεμονωμένες τιμές στο session. Εγώ απλά ανέφερα και αυτό σαν πιθανότητα.
L34x88iT Δημοσ. 23 Ιουλίου 2020 Μέλος Δημοσ. 23 Ιουλίου 2020 (επεξεργασμένο) 9 ώρες πριν, k33theod είπε Αυτό που λες λέγεται session hijacking Μπορεί ο χρήστης να στείλει οποιοδήποτε session_id θέλει είτε αλλάζοντας την τιμή στο coockie είτε βάζοντας το ως παράμετρο στο url πχ "http://host/index.php?PHPSESSID=1234" Είναι όμως δύσκολο να πετύχεις κάποιο id px εμένα σε αυτό το session μου έδωσε 0419ce12b40000fcb55d083207000001 12 ώρες πριν, elvizakos είπε Γενικά, και χωρίς να έχω κοιτάξει τον κωδικά σου: όχι. Το session υπάρχει στο server. Αν δεν στείλεις εσύ στοιχεία στον client και δεν "αφήσεις" εσύ με κάποιον τρόπο να κάνει αλλαγές ο client, δεν μπορεί δει και να αλλάξει τιμές του. Αν όμως έχεις κάτι τέτοιο: $_SESSION['a'] = $_GET['test']; τότε μπορεί να αλλάξει ότι υπάρχει στο κλειδί 'a', "χτυπώντας" απλά στο site σου με ένα url argument με όνομα "test" και ότι τιμή θέλει. Με το παραπάνω παράδειγμα μπορεί να πειράξει το κλειδί "a" και τα "παιδιά" του βάζοντας ότι τιμές θέλει (πχ μπορεί δημιουργήσει και να βάλει τιμή εδώ: $_SESSION['a']['b']). Δεν μπορεί να ξεφύγει όμως από αυτό και να πειράξει πχ το $_SESSION['b']. Μπορεί επίσης να ζητήσει νέο session id (αν απλά δεν στείλει session id) ή να στείλει session id άλλου χρήστη και έτσι να έχει το session του άλλου χρήστη αν το γνωρίζει. Καλημέρα. Όλο το Session το δίνω εγώ από το backend. Δεν χρησιμοποιώ πουθενά GET. Δηλαδή όταν κάποιος κάνει login και συμφωνεί το email του και ο κωδικός του, τότε φτιάχνεται ένα array με το id του που είναι ο άυξων αριθμός που παίρνει από τον πίνακα users στη βάση και αντιστοιχεί σε αυτόν. $userdata ( "id" => $row->id, "loggedin" => true) και μπαίνει στο session του. Τώρα αν θέλει αυτός ο χρήστης να δει τα μηνύματά του, καλούνται από τον πίνακα messages στην βάση, όλα τα μηνύματα που αφορούν το συγκεκριμένο id και στέλνονται στο view του χρήστη. $data["messages"] = $this->users_model->get_messages($this->session->userdata('id')); -------------------------ΓΙΑ ΠΑΡΑΔΕΙΓΜΑ---------------------------- Αν συνδεθεί ο χρήστης και πάρει στο session του το id του που είναι ο αριθμός του στην βάση, πχ 35, τότε έχουμε. $userdata ( "id" => 35, "loggedin" => true) και $data["messages"] = $this->users_model->get_messages(35); Αυτο που ρωτάω και με απασχολεί είναι το εξής: Μπορεί ο χρήστης από τον browser του να κάνει κάτι και αλλάξει στο session του το id του? Δηλαδή να το κάνει 34 για παράδειγμα, οπότε... $userdata ["messages"] = $this->users_model->get_messages(34); και να βλέπει τα μηνύματα του 34? Επεξ/σία 23 Ιουλίου 2020 από L34x88iT
elvizakos Δημοσ. 23 Ιουλίου 2020 Δημοσ. 23 Ιουλίου 2020 Όχι ακριβώς. Μπορεί να αλλάξει το session id του (ένα cookie είναι στο browser, όπως εξηγεί ο @k33theod) αλλά δεν είναι το ίδιο με το id που δίνεις εσύ. Επίσης επειδή είναι hashed δεν είναι εύκολο να βρει το προηγούμενο, το επόμενο κλπ. Αν όμως γνωρίζει το session id κάποιου άλλου χρήστη, τότε ναι, μπορεί να το κάνει και θα έχει συνδεθεί σαν εκείνον χωρίς να χρειάζεται να εισάγει κωδικό και όνομα χρήστη.
k33theod Δημοσ. 23 Ιουλίου 2020 Δημοσ. 23 Ιουλίου 2020 Ακριβώς το ID που λες εσύ δεν έχει καμία σχέση με το session_id. Το δεύτερο αλλάζει σε κάθε νέο session (κάθε φορά που κλείνεις τον browser) και υπάρχει για να γνωρίζει ο server σε κάθε νέο request από που έγινε αυτό. 1
L34x88iT Δημοσ. 23 Ιουλίου 2020 Μέλος Δημοσ. 23 Ιουλίου 2020 Κατάλαβα. ¨Αρα είναι ασφαλής ο τρόπος που χρησιμοποιώ ε?
παπι Δημοσ. 23 Ιουλίου 2020 Δημοσ. 23 Ιουλίου 2020 Αφου εισαι σε framework, γιατι δε βαζεις κανα δοκιμασμενο module? Ειναι και πιο βολικο, πχ σε laravel με το Auth::user() εχεις ενα instance του model του συνδεδεμενου χρηστη 1
flienky Δημοσ. 25 Ιουλίου 2020 Δημοσ. 25 Ιουλίου 2020 Στις 23/7/2020 στις 12:08 ΜΜ, L34x88iT είπε Κατάλαβα. ¨Αρα είναι ασφαλής ο τρόπος που χρησιμοποιώ ε? Ναι εισαι μια χαρα. 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα