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

Πολύ περίεργο πρόβλημα με PHP


L34x88iT

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

 

Ενώ παλιά δούλευε σωστά...

Έχω 1 random νούμερο που το έχω αποθηκεύσει σε μια μεταβλητή.

πχ

$random = mt_rand(10,99);

Και την αποθηκεύω σε ένα session

$_SESSION['tokensession'] = $random ;

Αν κάνω echo $_SESSION['tokensession']." - ".$random θα πάρω αποτέλεσμα πχ 18 - 18

οκ μεχρι εδώ.

======================================

Εγώ θέλω όμως να κάνω έναν έλεγχο στο κοντρολερ οπότε όταν στέλνω ένα hidden input το $random στο controler παίρνω διαφορετικο αποτέλεσμα. Δηλαδή από την φόρμα στέλνω

<input type="hidden" class="form-control"  value="<?php echo $random;?>" name="token">

<?php $_SESSION['tokensession'] = $random ;?>

και στο controller έχω

$inputvalue = $this->input->post('token');

$tokenvalue = $_SESSION['tokensession'];

Αν κάνω τώρα echo $tokenvalue ." - ".$random δεν θα πάρω ίδια νούμερα πχ 18-18 αλλά κάτι σαν 75-18

Τι μπορεί να φταίει? Παλιά δούλευε σωστά...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

5 ώρες πριν, Kercyn είπε

Όπου κάνεις access το $_SESSION['tokensession'], έχεις κάνει session_start() πρώτα; Αν μπορείς βάλε τον κώδικα.

όχι δεν έχω κάνει. Ο κώδικας όσο αφορά το session είναι μόνο αυτό που έγραψα. Η σελίδα είναι σε codeigniter

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

3 ώρες πριν, L34x88iT είπε

όχι δεν έχω κάνει. Ο κώδικας όσο αφορά το session είναι μόνο αυτό που έγραψα. Η σελίδα είναι σε codeigniter

Αν και δεν ξέρω καθόλου php

Θα κάνω μία υπόθεση :

<input type="hidden" class="form-control"  value="<?php echo $random;?>" name="token">

Εδώ δίνεις στο value ένα random value (π.χ. 75)

<?php $_SESSION['tokensession'] = $random ;?>

Εδώ βάζεις στο session ένα άλλο random value (π.χ. 18)

και στο controller έχω

$inputvalue = $this->input->post('token');

Εδώ διαβάζεις το value απο το input (οπότε είναι το 75)

$tokenvalue = $_SESSION['tokensession'];

Εδώ διαβάζεις το value απο το session (οπότε είναι το 18)

Εγώ java ξέρω , αλλά αν ισχύει ότι όποτε καλείς την random έστω και με echo τρέχει η μέθοδος της random τότε για αυτό έχεις 2 διαφορετικές τιμές

Μπορεί να λέω και αρλούμπες :)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Moderators
Δημοσ. (επεξεργασμένο)
54 λεπτά πριν, tsofras είπε

Αν και δεν ξέρω καθόλου php

Θα κάνω μία υπόθεση :

<input type="hidden" class="form-control"  value="<?php echo $random;?>" name="token">

Εδώ δίνεις στο value ένα random value (π.χ. 75)

<?php $_SESSION['tokensession'] = $random ;?>

Εδώ βάζεις στο session ένα άλλο random value (π.χ. 18)

και στο controller έχω

$inputvalue = $this->input->post('token');

Εδώ διαβάζεις το value απο το input (οπότε είναι το 75)

$tokenvalue = $_SESSION['tokensession'];

Εδώ διαβάζεις το value απο το session (οπότε είναι το 18)

Εγώ java ξέρω , αλλά αν ισχύει ότι όποτε καλείς την random έστω και με echo τρέχει η μέθοδος της random τότε για αυτό έχεις 2 διαφορετικές τιμές

Μπορεί να λέω και αρλούμπες :)

Το $random είναι μεταβλητή, άρα και στα 2 το ίδιο βάζει.

Αυτό που σκέφτομαι εγώ είναι μήπως κάτι γίνεται με το session και δεν ανανεώνει την τιμή σωστά. Βλέπω ότι το codeigniter λίγο-πολύ λέει ότι τα sessions "παίζουν μόνα τους" οπότε λογικά το session_start το κάνει εσωτερικά κάπου. Όταν κάνεις submit τη φόρμα τι στέλνει; Δοκίμασε να βάλεις κι ένα breakpoint εκεί που κάνεις generate το $random, και μετά δες τι τιμές πάει και κάνει echo στη φόρμα και τι βάζει στο session.

Επεξ/σία από Kercyn
  • Like 1
  • Thanks 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Έκανα κάποια πειραματάκια και ακούστε πιο είναι το περίεργο.

Αν στην $random βάλω καρφωτά μια τιμή (πχ 25), τότε στο controller και το input και το session, φέρνει 25.

Αν στην $random βάλω τιμή από το mt_rand και πάρει μια τιμή (πχ 40) και αναθέσω αυτή την μεταβλητή στο session. $_SESSION['tokensession'] = $random και στο καπάκι κάνω echo για δοκιμή και το $_SESSION['tokensession'] και το $random, θα εμφανίσει ίδιες τιμές.

Με λίγα λόγια πιο συνοπτικά.

  • Με καρφωτές τιμές στο $random, το session και to input, μου φέρνει στο controller τις ίδιες τιμές.
  • Με mt_rand τιμές στο $random, το session και to input, μου φέρνει στο controller τις διαφορετικές τιμές.

Και τώρα η ερώτηση του ενός εκατομμυρίου. Πως τόσα χρόνια δούλευε και τώρα χωρίς να αλλάξω κάτι δεν δουλεύει???

 

Επεξ/σία από L34x88iT
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η απάντηση εξαρτάται από πολλές παραμέτρους. Αν θέλεις λύση, ανέβασε ολόκληρο το αρχείο με τον κώδικά σου ή ακόμη και ολόκληρο το script. Μπορεί να άλλαξε η PHP version και κάποια μεταβλητή να ορίζεται δύο φορές. Μπορεί να άλλαξε μία τιμή στο php.ini ή ένα extension.

https://phpdecode.xyz/

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Σιγουρέψου ότι η μεταβλητή σου δηλώνετε κ τρέχει μια φορά κάθε φορά, η $random = mt_rand(10,99); θα αλλάζει σε κάθε κλίση / ανανέωση της σελίδας. Παίζει ρόλο τι θέλεις να πετύχεις; Κάποια ασφάλεια ελέγχου της φόρμας; Σωστά; Πρέπει τότε η μεταβλητή σου να μπει σε ένα σημείο κ μόνο εκεί που ξεκινάει το Session με το session_start() πιθανόν εκτός της φόρμας σελίδας...

Τώρα γιατί έπαιζε παλιά κ όχι τώρα, πιθανόν νεότερων εκδόσεων php / components / controller / framework etc etc... και τη μεριά του server μην ξεχνάμε. 

 

Επεξ/σία από villa&spa
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Στις 26/8/2022 στις 1:46 ΜΜ, L34x88iT είπε

Αν κάνω τώρα echo $tokenvalue ." - ".$random δεν θα πάρω ίδια νούμερα πχ 18-18 αλλά κάτι σαν 75-18

Λογικότατο. Θα πρέπει να κάνεις:

<?php echo $tokenvalue . "-" . $inputvalue; ?>

 

Επίσης, πρόσεξε στο $_SESSION['tokensession'] να αποθηκεύσεις την τιμή της $random αφού έχεις πάρει πρώτα την τιμή που έχει ήδη και την έχεις αποθηκεύσει στη $tokenvalue.

  • Thanks 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Όλο αυτό το είχα κάνει σαν έξτρα ασφάλεια οτι το submit της φόρμας γίνεται από εμένα και όχι από κάποια άλλη σελίδα. Μέχρι να βρω λύση αφαίρεσα αυτά που είχα κάνει για να μπορεί να δουλέψει το site και έβαλα ένα recaptcha. 

Υ.Γ. Για να αποτρέψω όπως είπα το submit της φόρμας από άλλο site υπάρχει κάποιος πιο "επίσημος τρόπος". Χρησιμοποιώ codeigniter. Επίσης είχα βρει και εισάγει κάποια πρόσθετη ασφάλεια στην htaccess αλλά δεν θυμάμαι αν έκανε και αυτό που περιγράφω. 

Οι γραμμές ήταν:

<IfModule mod_headers.c>
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS
Header set X-XSS-Protection "1; mode=block"
Header always append X-Frame-Options SAMEORIGIN
Header set X-Content-Type-Options nosniff
</IfModule>

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Στις 27/8/2022 στις 12:51 ΜΜ, L34x88iT είπε

Έκανα κάποια πειραματάκια και ακούστε πιο είναι το περίεργο.

Αν στην $random βάλω καρφωτά μια τιμή (πχ 25), τότε στο controller και το input και το session, φέρνει 25.

Αν στην $random βάλω τιμή από το mt_rand και πάρει μια τιμή (πχ 40) και αναθέσω αυτή την μεταβλητή στο session. $_SESSION['tokensession'] = $random και στο καπάκι κάνω echo για δοκιμή και το $_SESSION['tokensession'] και το $random, θα εμφανίσει ίδιες τιμές.

Με λίγα λόγια πιο συνοπτικά.

  • Με καρφωτές τιμές στο $random, το session και to input, μου φέρνει στο controller τις ίδιες τιμές.
  • Με mt_rand τιμές στο $random, το session και to input, μου φέρνει στο controller τις διαφορετικές τιμές.

Και τώρα η ερώτηση του ενός εκατομμυρίου. Πως τόσα χρόνια δούλευε και τώρα χωρίς να αλλάξω κάτι δεν δουλεύει???

 

Κάπου γίνεται ίσως refresh η σελίδα και παράγεται νεό random. Μην βάζεις την συνάρτηση random μέσα σε view, δημιούργησε την κάπου άλλου και στείλ την έτοιμη. To file δηλαδή που περιέχει την random() δεν πρέπει να στέλνεται στο browser, Θα στέλνεται μόνο η παραγόμενη τιμή. Τέλος μην χρησιμοποιείς τόσο απλό sessiontoken με το δεύτερο χρήστη έχεις 1/100 να έχεις ίδιο token.   :)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

14 ώρες πριν, k33theod είπε

Κάπου γίνεται ίσως refresh η σελίδα και παράγεται νεό random. Μην βάζεις την συνάρτηση random μέσα σε view, δημιούργησε την κάπου άλλου και στείλ την έτοιμη. To file δηλαδή που περιέχει την random() δεν πρέπει να στέλνεται στο browser, Θα στέλνεται μόνο η παραγόμενη τιμή.

Καταλαβα τι λες. Αν και τώρα το έσβησα τελείως και ψάχνω τα ενσωματωμένα token του Codeigniter.

14 ώρες πριν, k33theod είπε

Τέλος μην χρησιμοποιείς τόσο απλό sessiontoken με το δεύτερο χρήστη έχεις 1/100 να έχεις ίδιο token.   :)

 To random αυτό το έγραψα χάριν παραδείγματος. Κανονικά το έχω μεγάλο ψηφίο. mt_rand(10000000,99999999)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Στις 1/9/2022 στις 10:50 ΠΜ, L34x88iT είπε

 

 To random αυτό το έγραψα χάριν παραδείγματος. Κανονικά το έχω μεγάλο ψηφίο. mt_rand(10000000,99999999)

Χρησιμοποίησε καλύτερα αυτό που σου έστειλε ο @Kercyn ή get_random_bytes($length) οι αριθμοί μόνο δεν είναι ασφαλείς

  • Thanks 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

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

Σύνδεση

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

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