we_will_rise Δημοσ. 5 Φεβρουαρίου 2015 Δημοσ. 5 Φεβρουαρίου 2015 Καλησπέρα και καλή βραδιά, αναρωτιέμαι μερικές φορές πόσο ασφαλές είναι να υλοποιούμε διάφορες λειτουργίες σε javascript με την έννοια ότι οποιοσδήποτε μπορεί πανεύκολα να δει τι γίνεται, πως γίνεται και υπό συνθήκες να το κάνει (πχ να καλεί functions) σε φάσεις που δεν είναι intended.. Παραδείγματος χάριν.. function CreateOrder(selectedCustomerPK, selectedContaktPK) { if (currentAjaxRequest != null) currentAjaxRequest.abort(); currentAjaxRequest = $.ajax({ async: true, type: 'POST', url: 'DummyService.asmx/CreateOrder', contentType: 'application/json; charset=utf-8', dataType: 'json', data: JSON.stringify({ CustomerPK: selectedCustomerPK, ContactPK: selectedContaktPK }), beforeSend: function () { ShowLoading(); }, success: function (resp) { if (resp.d.Succeeded) { window.location = '../Main.aspx'; } else { //... } }, error: function (response) { //.. }, complete: function () { HideLoading(); } }); } Ποιος εμποδίζει τον χρήστη απ'το να καλεί CreateOrder(-1,-1), CreateOrder(a,a)? Και καλά, εγώ μέσα στην DummyService.asmx/CreateOrder έχω όλους τους απαραίτητους ελέγχους και ξεχωρίζω τους αμνούς απ'τα ερρίφια αλλά ποιος μου λέει ότι δε θα στήσει ένα bot ο χρήστης και να βαράει ασταμάτητα requests στην service μου; Γενικά, μέχρι που φτάνει ο έλεγχος του προγραμματιστή;;
alou Δημοσ. 5 Φεβρουαρίου 2015 Δημοσ. 5 Φεβρουαρίου 2015 Το πρώτο πράγμα που μπορείς να κάνεις είναι ένα token. Αν υπάρχει και είναι valid (και πιθανώς αντιστοιχεί σε logged in χρήστη ή ότι άλλες προδιαγραφές πρέπει να υπάρχουν) πας παρακάτω. Γενικά, το να κάνεις authenticate κάθε request είναι μια καλή αρχή για οτιδήποτε. Τα bot μπορούν να χτυπάνε οποιοδήποτε service, είτε απαντάει σε json είτε είναι από normal post / get ή ajax ή σε οτιδήποτε, τι διαφορά έχει? H ασφάλεια δε συζητιέται σε τόσο γενικό πλαίσιο ούτε εξαντλείται ποτέ αλλά σε γενικές γραμμές, οι ανάγκες σε οδηγούν σε λύσεις και δεν ψάχνεις για υποθετικά προβλήματα πέρα από αυτά που θεωρούνται good / best practices. 2
we_will_rise Δημοσ. 5 Φεβρουαρίου 2015 Μέλος Δημοσ. 5 Φεβρουαρίου 2015 Το πρώτο πράγμα που μπορείς να κάνεις είναι ένα token. Αν υπάρχει και είναι valid (και πιθανώς αντιστοιχεί σε logged in χρήστη ή ότι άλλες προδιαγραφές πρέπει να υπάρχουν) πας παρακάτω. Γενικά, το να κάνεις authenticate κάθε request είναι μια καλή αρχή για οτιδήποτε. Δεν αναφέρομαι τόσο σε κακόβουλες επιθέσεις, όσο σε βλακεία του authenticated χρήστη. Για παράδειγμα, σε μία φόρμα επεξεργασίας παραγγελίας, ένας δραστήριος και πανούργος πελάτης, έπαιζε με hidden και disabled πεδία και πέρασε δεδομένα που "δεν θέλαμε".. Τα bot μπορούν να χτυπάνε οποιοδήποτε service, είτε απαντάει σε json είτε είναι από normal post / get ή ajax ή σε οτιδήποτε, τι διαφορά έχει? Καμία απολύτως, δεν είπα το αντίθετο H ασφάλεια δε συζητιέται σε τόσο γενικό πλαίσιο ούτε εξαντλείται ποτέ αλλά σε γενικές γραμμές, οι ανάγκες σε οδηγούν σε λύσεις και δεν ψάχνεις για υποθετικά προβλήματα πέρα από αυτά που θεωρούνται good / best practices. Με άλλα λόγια το ξεχνάμε το 100% safe.
alou Δημοσ. 5 Φεβρουαρίου 2015 Δημοσ. 5 Φεβρουαρίου 2015 Αλλάζει το σκηνικό, αυτό που λες έχει δευτερευόντως σχέση με js και κυρίως με server side, μιλάμε για validation / sanitization. Κάτι που κάνεις προαιρετικά client side (όπου ίσως απέφευγες τις τιμές που αναφέρεις με π.χ. disabled το submit) και σιγουρότατα server side (ορίζοντας και ελέγχοντας επιτρεπτές / μη επιτρεπτές τιμές ή συνθήκες στο service σου).
defacer Δημοσ. 5 Φεβρουαρίου 2015 Δημοσ. 5 Φεβρουαρίου 2015 Κανένας δεν εμποδίζει το χρήστη να στείλει ό,τι request του αρέσει. Αυτό που τον εμποδίζει από το να κάνει κιόλας ο,τι του αρέσει είναι βέβαια οι έλεγχοι που έχεις στον server. Δεν έχει να κάνει με τη JavaScript ούτε με την HTML ούτε με οτιδήποτε άλλο. Στην τελική ποιός εμποδίζει το "χρήστη" να ανοίξει σύνδεση στην 80 του server σου με οποιοδήποτε πρόγραμμα (ακόμα και με telnet client) και να δώσει ο,τι request του αρέσει; Το θέμα είναι απλά ότι η φύση του internet είναι τέτοια που ο server σου επικοινωνεί με κάποιο πρόγραμμα-client που δεν είναι υπό τον έλεγχό σου.
we_will_rise Δημοσ. 5 Φεβρουαρίου 2015 Μέλος Δημοσ. 5 Φεβρουαρίου 2015 Κανένας δεν εμποδίζει το χρήστη να στείλει ό,τι request του αρέσει. Αυτό που τον εμποδίζει από το να κάνει κιόλας ο,τι του αρέσει είναι βέβαια οι έλεγχοι που έχεις στον server. Δεν έχει να κάνει με τη JavaScript ούτε με την HTML ούτε με οτιδήποτε άλλο. Στην τελική ποιός εμποδίζει το "χρήστη" να ανοίξει σύνδεση στην 80 του server σου με οποιοδήποτε πρόγραμμα (ακόμα και με telnet client) και να δώσει ο,τι request του αρέσει; Το θέμα είναι απλά ότι η φύση του internet είναι τέτοια που ο server σου επικοινωνεί με κάποιο πρόγραμμα-client που δεν είναι υπό τον έλεγχό σου. Μάλιστα.. Κάπου εκεί είχα καταλήξει κι εγώ.. Άβυσσος η ψυχή του χρήστη
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα