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

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

Δημοσ.

Καλησπερα

 

Διαβαζω ενα βιβλιο που χρησιμοποιει javascript object σε Node.js για να αποθηκευσει και να επεξεργαστει εναν Χρηστη. 

 

Ειναι ασφαλες να αποθηκευσεις κρυπτογραφημενο (hashed) password σε javascript αντικειμενο, ακομα και αν μιλαμε για back-end? Θεωρω καλη πρακτικη να το παρεις απο μια φορμα, να τ κρυπτογραφησεις και να το αποθηκευσεις στη βαση δεδομενων.

Oχι να το αποθηκευσεις σε ενα object και να ειναι εκει καθολη τη διαρκεια ζωης του object γιατι φοβαμαι οτι θα μπορει καποιος να το παρει. 

 

Εχω συνηθισει απο πιο απλα project με Apache και synchronous PHP που περνεις το password, το κρυπτογραφεις και το αποθηκευεις, και κρατας μονο το id του χρηστη στο session για να ξερεις ποιος ειναι. 

 

Ειναι ασφαλες να κρατησεις το password σε ενα object η απλα υπερβαλλω?

 

Ο κωδικας απο το βιβλιο

function User(obj){
  for (var key in obj)
  {this[key]=obj[key;]}
}


User.prototype.save = function (fn){
  var user = this;
  user.hashPassword(function (err){
    var id = user.id;
    //save user on redis...
  })
}

User.prototype.hashPassword = function (fn){
  var user = this;
  bcrypt.genSalt(12, function(err,salt){
  user.salt = salt;
    bcrypt.hash(user.pass, salt, function(){
      user.pass = hash;
     fn();
    })
  })

και μετα προσθετω 

var tobi = new User({
    name:'tobi',
    pass:'im a ferret'
});

tobi.save(function (err){
    if (err)throw error;
})  

και χτυπαω στη κονσολα 

node folder/filename.js

για να τρεξει και να το τεσταρω

 

Το βιβλιο ειναι το "Node.js in Action", Mike Cantelon, Marc Harter, T.J. Holowaychuk and Nathan Rajlich, Manning Publications, ©2014, pp. 233-236

 

Ευχαριστω

Δημοσ.

Ειναι ασφαλες να κρατησεις το password σε ενα object η απλα υπερβαλλω?

 

Δεν ορίζεται η έννοια "ασφαλές" αν δεν αναφέρεσαι ταυτόχρονα και σε κάποιο συγκεκριμένο threat model. Ποιό είναι το threat model εδώ; Ότι ο attacker έχει πρόσβαση στον server σου και μπορεί να διαβάσει μνήμη από άλλα processes? Ότι ο attacker μπορεί να κάνει inject κώδικα μέσα στην εφαρμογή σου; Κάτι άλλο;

 

Υπόψη ότι στα δύο παραδείγματα που ανέφερα you are owned ο,τι κι αν χρησιμοποιείς, όχι συγκεκριμένα node κλπ.

Δημοσ.

Απλα σκεφτηκα οτι οσο εκτελειτε ο κωδικας αυτος και παραμενει "ζωντανο" το object κουβαλαει και το password μαζι. Η λογικη μου ειναι μπακαλιστικη η υπερβολικη η απλα λαθος και ειναι του τυπου "Γιατι να υπαρχει αυτο εκει, κρυπτογραφησε το και ξεφορτωσου το γιατι μπορει καποιος να το δει με καποιο τροπο". 

Δημοσ.

Νομίζω είναι μπακαλίστικη και ίσως να την πεις και λάθος. Λάθος επειδή διαβάζοντας τον κώδικα, αν καλέσεις την hashPassword όπως προβλέπεται υποτίθεται πως πλέον δεν υπάρχει plaintext password πουθενά -- αν και, αυτό μόνο όταν είμαστε σε ενδιάμεσο επίπεδο γνώσεων (σε υψηλό επίπεδο ξέρεις ότι δεν έχει σημασία επειδή immutable strings οπότε είτε αντικαταστήσεις είτε όχι μικρή διαφορά).

 

Τώρα όσον αφορά το μπακαλίστικη.

 

1, Threat model! Πού είναι; Αν δεν έχεις δε γίνεται κουβέντα. Αν δε μπορείς να σκεφτείς κάποιο ρεαλιστικό που να σε επιβεβαιώνει πάλι δε γίνεται κουβέντα.

 

2, Αν φοβάσαι πως θα μας διαβάσουν τη μνήμη, αυτό δε θα μπορούσε να γίνει και σε οποιοδήποτε άλλο πρόγραμμα σε οποιαδήποτε γλώσσα μου δείξεις που να αποθηκεύει passwords;

 

3. Πες ότι δε μπορούν να μας διαβάσουν τη μνήμη απευθείας. Πώς ξέρεις ότι το password που πέρασε από τη μνήμη δε θα καταλήξει λόγω ΧΥΖ συνθηκών να γραφτεί π.χ. στο swapfile και από το δίσκο μετά να περάσει στα χέρια των κακών; Αν το threat model σου θεωρεί ότι αυτό είναι πρόβλημα, τα passwords που κάποια στιγμή πέρασαν έστω και για λίγο από τη μνήμη είναι επίσης επικίνδυνα.

 

Δες αν θέλεις εδώ για περισσότερο background σχετικά με το τελευταίο (επίσης: αν σ' ενδιαφέρει ο τομέας της ασφάλειας, μπορείς να διαβάσεις οτιδήποτε έχει γράψει ποτέ ο Thomas Pornin σε κείνο το site).

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

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

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

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

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

Σύνδεση

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

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