verification links...λογική;

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

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

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

verification links...λογική;

Δημοσίευση από geomagas » 07 Νοέμ 2013 13:35

Οποιοσδήποτε αλγόριθμος hashing σου κάνει.
Το θέμα είναι να περάσεις μία παράμετρο που θα σου παρέχει μεγάλη ποικιλία στα παραγόμενα hashes.
Salt δεν χρειάζεται, γιατί το θέμα εδώ δεν είναι η ασφάλεια, αλλά η εντροπία.

Μία ιδέα στο φτερό είναι να κάνεις hash το $new_email.time()

Δες όμως και την uniqid().

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

verification links...λογική;

Δημοσίευση από gvre » 07 Νοέμ 2013 16:51

Επειδή η uniqid δεν είναι και τόσο unique :) και το $new_email.time() δεν είναι και τόσο random, είναι προτιμότερο να χρησιμοποιήσεις κάποια library όπως την RandomLib.

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

verification links...λογική;

Δημοσίευση από geomagas » 07 Νοέμ 2013 17:21

Εξαρτάται από την εντροπία που χρειάζεσαι.

Εδώ το κύριο θέμα είναι να μην υπάρχουν conflicts στα nonces που είναι ενεργά σε δεδομένη χρονική στιγμή, και λιγότερο να μην "μαντεύονται" εύκολα.

Οπότε, ο βαθμός της εντροπίας εξαρτάται από:
- Πόσους χρήστες εχεις
- Πόσο συχνά θέλουν να αλλάξουν το e-mail τους
- Πόση ώρα μεσολαβεί από τη στιγμή που θα δημιουργήσεις το nonce μέχρι αυτό να χρησιμοποιηθεί (="καταστραφεί")

Αντικειμενικά πάντως, συμφωνούμε ότι και τα δύο είναι πρόχειρες λύσεις (εξ ου και "στο φτερό").

Serghio
Δημοσιεύσεις: 455
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

verification links...λογική;

Δημοσίευση από Serghio » 07 Νοέμ 2013 17:25

geomagas έγραψε: Οπότε, ο βαθμός της εντροπίας εξαρτάται από:
- Πόσους χρήστες εχεις
- Πόσο συχνά θέλουν να αλλάξουν το e-mail τους
- Πόση ώρα μεσολαβεί από τη στιγμή που θα δημιουργήσεις το nonce μέχρι αυτό να χρησιμοποιηθεί (="καταστραφεί")

Αντικειμενικά πάντως, συμφωνούμε ότι και τα δύο είναι πρόχειρες λύσεις (εξ ου και "στο φτερό").
To μόνο σίγουρο είναι οτι με τον καιρό οι χρήστες θα αυξάνουν...μέχρι να "ταβανιάσει" το πράγμα υποθέτω.
Τα υπόλοιπα 2 ερωτήματα είναι αδύνατον να απαντηθούν νομίζω.

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

verification links...λογική;

Δημοσίευση από geomagas » 07 Νοέμ 2013 17:55

Σου εύχομαι να "ταβανιάσει" γρήγορα, για να πας για "πανωσήκωμα"! :D

Και τα τρία είναι θέμα στατιστικής. Όσο οι διαδικασίες σου χρησιμοποιούνται, τόσο έχεις δεδομένα για να κάνεις τη χρήση μετρήσιμη.
Γι αυτό είπα πιο πριν ότι ίσως δεν θέλεις να σβήνεις τις αιτήσεις αλλά να τις σημειώνεις ως "καμένες".

Αν πάντως διαλέξεις από την αρχή μία πολύ ισχυρή μέθοδο, όπως λέει ο gvre, νομίζω ότι θα "καθαρίσεις" για πολύ καιρό.

Serghio
Δημοσιεύσεις: 455
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

verification links...λογική;

Δημοσίευση από Serghio » 07 Νοέμ 2013 18:00

geomagas έγραψε: Γι αυτό είπα πιο πριν ότι ίσως δεν θέλεις να σβήνεις τις αιτήσεις αλλά να τις σημειώνεις ως "καμένες".
Aυτό φαντάζομαι το λες για να μπορώ να κρατώ στατιστικά.π.χ πόσο συχνά αλλάζου τα mail τους οι χρήστες
geomagas έγραψε: Αν πάντως διαλέξεις από την αρχή μία πολύ ισχυρή μέθοδο, όπως λέει ο gvre, νομίζω ότι θα "καθαρίσεις" για πολύ καιρό.
Ποια θα μπορούσε να είναι πολύ ίσχυρη μέθοδο(δεδομένου ότι τις δύο προηγούμενες τις χαρακτήρισες πρόχειρες);Έχεις έτοιμη απάντηση να μου δώσεις ή αυτή την στιγμή δεν σου έρχεται τίποτα στο μυαλό;

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

verification links...λογική;

Δημοσίευση από geomagas » 07 Νοέμ 2013 18:54

Serghio έγραψε:
geomagas έγραψε: Γι αυτό είπα πιο πριν ότι ίσως δεν θέλεις να σβήνεις τις αιτήσεις αλλά να τις σημειώνεις ως "καμένες".
Aυτό φαντάζομαι το λες για να μπορώ να κρατώ στατιστικά.π.χ πόσο συχνά αλλάζου τα mail τους οι χρήστες
Ναι. Αν κρατάς την ώρα της αίτησης και την ώρα της διεκπεραίωαης, τότε
- η μέση διαφορά τους είναι ο μέσος χρόνος διεκπεραίωσης
- ο αριθμός των αιτήσεων επί του χρόνου από την παλιότερη έως "τώρα" είναι ο ρυθμός των αιτήσεων.
Serghio έγραψε:
geomagas έγραψε: Αν πάντως διαλέξεις από την αρχή μία πολύ ισχυρή μέθοδο, όπως λέει ο gvre, νομίζω ότι θα "καθαρίσεις" για πολύ καιρό.
Ποια θα μπορούσε να είναι πολύ ίσχυρη μέθοδο(δεδομένου ότι τις δύο προηγούμενες τις χαρακτήρισες πρόχειρες);Έχεις έτοιμη απάντηση να μου δώσεις ή αυτή την στιγμή δεν σου έρχεται τίποτα στο μυαλό;
Τις χαρακτήρισα αντικειμενικά πρόχειρες, γενικά σαν hashing. Πχ για password hashing θα ήταν απαράδεκτες.
Αλλά το nonce είναι άλλο φρούτο. Εξήγησα και τη διαφορά.

Κοίταζα το link που έδωσε ο gvre. Πιστεύω, χρησιμοποιώντας το συγκεκριμένο με

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

$charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
$nonce = $generator->generateString(32, $charset);
...θα σου είναι υπεραρκετό.

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

verification links...λογική;

Δημοσίευση από gvre » 07 Νοέμ 2013 19:19

geomagas έγραψε:Εξαρτάται από την εντροπία που χρειάζεσαι.

Εδώ το κύριο θέμα είναι να μην υπάρχουν conflicts στα nonces που είναι ενεργά σε δεδομένη χρονική στιγμή, και λιγότερο να μην "μαντεύονται" εύκολα.
Αυτό που πρότεινα έχει περισσότερο νόημα στην περίπτωση ανάκτησης κωδικού λόγω απώλειας. Εκεί θα μπορούσε κάποιος άλλος χρήστης να αιτηθεί νέο κωδικό και μέσω της "μαντικής" να κάνει reset το password του χρήστη.
Καλό είναι πάντως να χρησιμοποιηθεί library και στην περίπτωση της αλλαγής του email για να μην κακομαθαίνουμε με λύσεις τύπου uniqid :)

Serghio
Δημοσιεύσεις: 455
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

verification links...λογική;

Δημοσίευση από Serghio » 08 Νοέμ 2013 17:21

geomagas έγραψε:

Κοίταζα το link που έδωσε ο gvre. Πιστεύω, χρησιμοποιώντας το συγκεκριμένο με

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

$charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
$nonce = $generator->generateString(32, $charset);
Δεν μπορώ να καταλάβω όμως ποιο από τα παρεχόμενα αρχεία της library θα πρέπει να κάνω require στο script που θα "παίξει" η παραπάνω μέθοδος.
Κάνοντας require το generator.php π.χ μου βγάζει ο browser 2 σφάλματα:
Είτε οτι το generator είναι undefined variable είτε οτι το generateString είναι function ενός non.object. Aν μαζί με το Generator.php εισάγω και το Factory.php τότε μου βγαίνει σφάλμα

Class 'SecurityLib\AbstractFactory' not found
Ξέρετε λοιπόν ποιά scripts της library πρέπει να κάνω require;

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

verification links...λογική;

Δημοσίευση από alou » 08 Νοέμ 2013 18:31

Φαντάζομαι πρώτα πρέπει να κάνεις instantiate το class

$generator = new namespace/classname

και μετά να καλέσεις ότι μέθοδο έχει. Αν χρησιμοποιείς composer θα κάνεις και ένα dump-autoload για να φτιάξει και το autoload.php που χρειάζεται να κάνεις require, αλλιώς θέλει ψάξιμο.

To πρώτο σφάλμα είναι επειδή δεν έκανες instantiate, το δεύτερο επειδή το factory.php πάει να κάνει extend μια κλάση που δεν υπάρχει. Είναι στο abstractmixer.php οπότε κάνει και αυτό include και ψάχνεις για το επόμενο σφάλμα :D

Serghio
Δημοσιεύσεις: 455
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

verification links...λογική;

Δημοσίευση από Serghio » 09 Νοέμ 2013 16:29

τελικά αποφάσισα να χρησιμοποιήσω αυτό:

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

sha1(uniqid());
Για αρχή...(θα συνεχίζω να ψάχνω πως θα κάνω να "παίξει" το library μα τα generators)εκτός αυτού, από ένα ψάξιμο που έκανα καλό είναι αυτά τα links να λήγουν μετά από κάποιο διάστημα...π.χ 24ώρες, πως θα μπορούσα να το υλοποιήσω αυτό;

Χρειάζομαι λιγη βοήθεια με το date object για να υλοποιήσω το παραπάνω.

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

verification links...λογική;

Δημοσίευση από geomagas » 09 Νοέμ 2013 18:43

Οκ.

Για να μην κάνουμε υποθέσεις όμως, καλό είναι να ανεβάσεις τη δομή του πίνακα που έχεις φτιάξει (ή θα φτιάξεις) και το κομμάτι του κώδικα php που χρησιμοποιείς για το insert.

Για το data object, μπορεί να το χρειαστείς, μπορεί και όχι.
(φαντάζομαι ότι αν η υλοποίησή σου το απαιτεί, η ερώτησή σου θα ήταν ήδη πιο συγκεκριμένη)

Serghio
Δημοσιεύσεις: 455
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

verification links...λογική;

Δημοσίευση από Serghio » 10 Νοέμ 2013 11:28

geomagas έγραψε:Οκ.

Για να μην κάνουμε υποθέσεις όμως, καλό είναι να ανεβάσεις τη δομή του πίνακα που έχεις φτιάξει (ή θα φτιάξεις) και το κομμάτι του κώδικα php που χρησιμοποιείς για το insert.
Σωστό...
Να το insert(όπως εμφανίζεται στο PHP script):

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

query('insert into email_change(user,email_changecol,nonce) values 
                                          ("'.$userid.'","'.$newemail.'","'.$nonce.'")');
Το table τώρα:

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

CREATE TABLE `email_change` (
  `user` int(11) NOT NULL,
  `email_changecol` varchar(255) NOT NULL,
  `nonce` varchar(45) NOT NULL,
  PRIMARY KEY (`nonce`),
  KEY `fk_email_change_users1_idx` (`user`),
  CONSTRAINT `fk_email_change_users1` FOREIGN KEY (`user`) REFERENCES `users` (`user_ID`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8_general_ci

geomagas έγραψε: Για το data object, μπορεί να το χρειαστείς, μπορεί και όχι.
(φαντάζομαι ότι αν η υλοποίησή σου το απαιτεί, η ερώτησή σου θα ήταν ήδη πιο συγκεκριμένη)
Eίπα date object, OXI data object, αν και νομίζω κατάλαβες τι εννοώ...όταν φθάσω σε εκείνο το σημείο(διάρκεια που πρέπει να έχει το verification link δηλαδή) θα το ξαναθέσω το θέμα

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

verification links...λογική;

Δημοσίευση από geomagas » 10 Νοέμ 2013 12:11

Serghio έγραψε:
geomagas έγραψε: Για το data object, μπορεί να το χρειαστείς, μπορεί και όχι.
(φαντάζομαι ότι αν η υλοποίησή σου το απαιτεί, η ερώτησή σου θα ήταν ήδη πιο συγκεκριμένη)
Eίπα date object, OXI data object, αν και νομίζω κατάλαβες τι εννοώ...όταν φθάσω σε εκείνο το σημείο(διάρκεια που πρέπει να έχει το verification link δηλαδή) θα το ξαναθέσω το θέμα
Εχμ... ναι... date object εννοούσα κι εγώ... Το σύνδρομο FFTB ξαναχτύπησε...

Για να υλοποιήσεις εύρος ισχύος, θα πρέπει πρώτα απ' όλα να καταχωρείς την ημερομηνία/ώρα της αίτησης.
Αυτός ήταν και ο λόγος που ήθελα τη δομή του πίνακα, για να δω τι datatype χρησιμοποιείς για αυτό το πεδίο.
Και τη διαδικασία insert, για να δω πως το ενημερώνεις.

Πχ άλλο είναι να κρατάς timestamp και άλλο datetime. Και εντελώς άλλο, varchar (όπως αφελώς γίνεται συχνά...)

Επίσης, άλλο είναι να κάνεις

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

query('insert into email_change(user,email_changecol,nonce,insert_time) values
                                          ("'.$userid.'","'.$newemail.'","'.$nonce.'",NOW())');
και άλλο

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

$now=date("Y-m-d H:i:s");
query('insert into email_change(user,email_changecol,nonce,insert_time) values
                                          ("'.$userid.'","'.$newemail.'","'.$nonce.'","'.$now.'")');
Επικεντρώνομαι σε αυτές τις διαφορές διότι από αυτές εξαρτάται ο έλεγχος που θα κάνεις αργότερα.

Serghio
Δημοσιεύσεις: 455
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

verification links...λογική;

Δημοσίευση από Serghio » 10 Νοέμ 2013 21:57

Αυτό που θα κάνω είναι να φτιάξω ένα 4ο column τυπου timestamp οπότε και ωρα/ημερομηνία δημιουργίας του nonce θα καταγράφεται αυτόματα.

Εκτός και αν έχεις να προτείνεις κάτι άλλο...

Απάντηση

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

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

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