octa Δημοσ. 9 Φεβρουαρίου 2023 Δημοσ. 9 Φεβρουαρίου 2023 (επεξεργασμένο) Καλησπέρα, οι Έχω μια φόρμα, μέσα στο <textarea name="something" onchange="saveform()"></textarea> Η saveform σώζει στη mysql τα πεδία της φόρμας μέσο ajax. Η ερώτηση είναι Τα bot θα αποθηκεύουν στη db; Δηλαδή αν μπει ένα bot και περάσει δεδομένα στη form θα γίνει η εισαγωγή στη MySql ; Ευχαριστώ Επεξ/σία 9 Φεβρουαρίου 2023 από octa
Moderators Kercyn Δημοσ. 9 Φεβρουαρίου 2023 Moderators Δημοσ. 9 Φεβρουαρίου 2023 Ναι, γιατί να μη γίνει εισαγωγή; Ο κώδικάς σου δεν ξέρει ποιος το καλεί. Δηλαδή αν μπω εγώ στη σελίδα σου και βάλω ένα loop με 100000 κλήσεις στη saveform(), θα βάλω 100000 εγγραφές στη βάση σου.
octa Δημοσ. 9 Φεβρουαρίου 2023 Μέλος Δημοσ. 9 Φεβρουαρίου 2023 @Kercyn Ναι τόσο απλό είναι. Δίκιο έχεις. Ευχαριστώ. Το ChatGTP απάντησε Αναφορά σε κείμενο Ναι, εάν ένα bot δώσει δεδομένα στη φόρμα, η συνάρτηση saveform θα εκτελεστεί και θα πραγματοποιηθεί η εισαγωγή των δεδομένων στην βάση δεδομένων MySQL. Ωστόσο, αν θέλετε να ελέγξετε αν ένα δεδομένο εισήχθη από ένα bot ή από έναν χρήστη, μπορείτε να χρησιμοποιήσετε μερικές πρακτικές ελέγχου π.χ. έλεγχος της IP διεύθυνσης του συστήματος που καταχωρεί τα δεδομένα. Ο μόνος τρόπος είναι να ελέγξω το IP . Θα βάλω ένα captcha πριν τη φόρμα λέω, είναι σωστή πρακτική. Άλλος τρόπος είναι να ελέγχει μέσω javascript το IP αν υπάρχει κάτι τέτοιο, το ψάχνω.
Moderators Kercyn Δημοσ. 9 Φεβρουαρίου 2023 Moderators Δημοσ. 9 Φεβρουαρίου 2023 Η σωστή πρακτική σίγουρα δεν είναι να κάνεις κλήση με ajax στη βάση. Πρέπει να έχεις ένα backend το οποίο θα κάνει όλους τους απαραίτητους ελέγχους πριν γράψει στη βάση. Η λύση που λες με την IP δεν είναι λύση για πολλούς λόγους. Καταρχάς μπορεί εγώ να την αλλάζω σε κάθε κλήση. Κατά δεύτερον, μπορεί να βάλω πολλά μηχανήματα με διαφορετικές IP. Κατά τρίτον, τι έλεγχο ακριβώς θα βάλεις; Η λύση σου λέγεται backend. Ό,τι και να βάλεις στο front μπορεί πολύ εύκολα να ξεπεραστεί, για τον απλούστατο λόγο ότι τρέχει στον client σου. 1 1
Lanike71 Δημοσ. 9 Φεβρουαρίου 2023 Δημοσ. 9 Φεβρουαρίου 2023 39 λεπτά πριν, Kercyn είπε Η σωστή πρακτική σίγουρα δεν είναι να κάνεις κλήση με ajax στη βάση. Πρέπει να έχεις ένα backend το οποίο θα κάνει όλους τους απαραίτητους ελέγχους πριν γράψει στη βάση. Η λύση που λες με την IP δεν είναι λύση για πολλούς λόγους. Καταρχάς μπορεί εγώ να την αλλάζω σε κάθε κλήση. Κατά δεύτερον, μπορεί να βάλω πολλά μηχανήματα με διαφορετικές IP. Κατά τρίτον, τι έλεγχο ακριβώς θα βάλεις; Η λύση σου λέγεται backend. Ό,τι και να βάλεις στο front μπορεί πολύ εύκολα να ξεπεραστεί, για τον απλούστατο λόγο ότι τρέχει στον client σου. Έχεις κάποιο λινκ να δούμε τη σωστή πρακτική;
Moderators Kercyn Δημοσ. 9 Φεβρουαρίου 2023 Moderators Δημοσ. 9 Φεβρουαρίου 2023 Μόλις τώρα, Lanike71 είπε Έχεις κάποιο λινκ να δούμε τη σωστή πρακτική; Link για ποιο πράγμα; Για το ότι δεν είναι καλό να χτυπάς απευθείας τη βάση από το frontend;
octa Δημοσ. 9 Φεβρουαρίου 2023 Μέλος Δημοσ. 9 Φεβρουαρίου 2023 (επεξεργασμένο) Βήμα βήμα. 1) Έβαλα στην html ένα JavaScript var , ένα κλειδί που υπάρχει και στη mysql . Πριν το POST ελέγχει αν συμφωνούν. 2) Δέχομαι στο back end $_SERVER['HTTP_REFERER'] μόνο το url της σελίδας. Το μόνο που μπορεί να κάνει ο κακόβουλος χρήστης είναι να γράψει κώδικα για το console. Δεν μπορεί να κάνει και πολλά νομίζω. Άλλο τρόπο δεν έχω σκεφτεί. Επεξ/σία 9 Φεβρουαρίου 2023 από octa
Ponous Δημοσ. 10 Φεβρουαρίου 2023 Δημοσ. 10 Φεβρουαρίου 2023 Αν δεν έχεις κώδικα στον δικό σου server που να κάνει τους απαραίτητους ελέγχους... ό,τι έλεγχο και να κάνεις στο front-end δεν μετράει. Κατ' αρχάς εκτός από τον κώδικα στο console, μπορεί να κάνει και επιθέσεις με proxy server, man in the middle ή να κάνει το ajax call που χρησιμοποιείς σε μια δική του σελίδα (δεν θα μιλήσω για εργαλεία). Μια καλή πρακτική είναι το CSRF token. Ουσιαστικά, κάνεις κάτι σαν το κλειδί που έβαλες στην html... αλλά προς θεού μην δίνεις κλειδιά που υπάρχουν στην mysql! Αν θες όμως όντως, να ελέγξεις αν ο χρήστης είναι bot ή άνθρωπος τότε ναι ίσως χρειαστεί να βάλεις captcha. 9 ώρες πριν, octa είπε 1) Έβαλα στην html ένα JavaScript var , ένα κλειδί που υπάρχει και στη mysql . Πριν το POST ελέγχει αν συμφωνούν. Αυτό δεν βοηθάει. Αν το κλειδί δεν αλλάζει, τότε κάποιος μπορεί να διαβάσει το var που έβαλες, και να το χρησιμοποιήσει. 9 ώρες πριν, octa είπε Το μόνο που μπορεί να κάνει ο κακόβουλος χρήστης είναι να γράψει κώδικα για το console. Δεν μπορεί να κάνει και πολλά νομίζω. Ο Χρήστης δεν έχει μόνο το console. Μπορεί να φτιάξει και ένα script σε python άμα θέλει και να εκτελέσει ό,τι κάνεις και στην φόρμα. Εδώ μπορείς να βρεις μια λίστα με δωρεάν courses τα οποία πάνω κάτω αντιστοιχούν με μια ύλη που θα έβρισκες σε ένα πανεπιστήμιο. Προτείνω να δεις λίγο τα courses για internet/web security. 1
octa Δημοσ. 10 Φεβρουαρίου 2023 Μέλος Δημοσ. 10 Φεβρουαρίου 2023 Ευχαριστω @ponous ! Η PHP δέχεται το $_SERVER['HTTP_REFERER'] και πρέπει να είναι το url της σελίδας. Έτσι δεν κάνω επεξεργασία με κάποιο απομακρυσμένο Python or JavaScript scripts παρά μόνο όσα έχουν referer το δικό μου το rl. Κάνω λάθος ;
Λύση k33theod Δημοσ. 10 Φεβρουαρίου 2023 Λύση Δημοσ. 10 Φεβρουαρίου 2023 (επεξεργασμένο) Χαιρετώ όλους Βασικά δεν έχω καταλάβει τι κάνει η συνάρτηση που καλείς. Εάν όμως είναι αυτό που φαντάζομαι save είναι τελείως λάθος. To onchange γίνεται fire σε κάθε γράμμα που γράφεις ή σβήνεις, αυτό σημαίνει ότι αν γράψεις 1000 χαρακτήρες θα σου κάνει 1000 call και 1000 save. Ακόμα και εάν η συνάρτηση σου κάνει update στη βάση, ισχύει το ίδιο και η βάση θα χτυπηθεί 1000 φορές. Βάλε λοιπόν ένα submit και στείλτο στη βάση μία φορά. The change event is fired for <input>, <select>, and <textarea> elements when the user modifies the element's value. Επεξ/σία 10 Φεβρουαρίου 2023 από k33theod
octa Δημοσ. 10 Φεβρουαρίου 2023 Μέλος Δημοσ. 10 Φεβρουαρίου 2023 13 λεπτά πριν, k33theod είπε Χαιρετώ όλους Βασικά δεν έχω καταλάβει τι κάνει η συνάρτηση που καλείς. Εάν όμως είναι αυτό που φαντάζομαι save είναι τελείως λάθος. To onchange γίνεται fire σε κάθε γράμμα που γράφεις ή σβήνεις, αυτό σημαίνει ότι αν γράψεις 1000 χαρακτήρες θα σου κάνει 1000 call και 1000 save. Ακόμα και εάν η συνάρτηση σου κάνει update στη βάση, ισχύει το ίδιο και η βάση θα χτυπηθεί 1000 φορές. Βάλε λοιπόν ένα submit και στείλτω στη βάση μία φορά. The change event is fired for <input>, <select>, and <textarea> elements when the user modifies the element's value. Χαίρετε. Καμμία φορά είναι δύσκολο να αφήσει πολλές ώρες εργασίας. Αλλά θα σεβαστώ την άποψη σου και θα βάλω ένα submit. Ευχαριστώ
k33theod Δημοσ. 10 Φεβρουαρίου 2023 Δημοσ. 10 Φεβρουαρίου 2023 Στις 9/2/2023 στις 11:14 ΠΜ, Kercyn είπε Link για ποιο πράγμα; Για το ότι δεν είναι καλό να χτυπάς απευθείας τη βάση από το frontend; Για να ακριβολογούμε, τη βάση δεν μπορεί να την καλέσει κάποιος από το frond end ούτως η άλλως. Αλίμονο αν γινότανε!!! Όλες οι κλήσεις των forms ή ajax πάνε στο backend. Στις 9/2/2023 στις 2:20 ΜΜ, octa είπε Βήμα βήμα. 1) Έβαλα στην html ένα JavaScript var , ένα κλειδί που υπάρχει και στη mysql . Πριν το POST ελέγχει αν συμφωνούν. 2) Δέχομαι στο back end $_SERVER['HTTP_REFERER'] μόνο το url της σελίδας. Το μόνο που μπορεί να κάνει ο κακόβουλος χρήστης είναι να γράψει κώδικα για το console. Δεν μπορεί να κάνει και πολλά νομίζω. Άλλο τρόπο δεν έχω σκεφτεί. Αυτά που γράφεις δεν υπάρχουν αλλά οκ
Ponous Δημοσ. 10 Φεβρουαρίου 2023 Δημοσ. 10 Φεβρουαρίου 2023 4 ώρες πριν, octa είπε Κάνω λάθος ; Βασικά όλο το σκεπτικό σου είναι λάθος 😁 4 ώρες πριν, octa είπε $_SERVER['HTTP_REFERER'] Ε όπως είπες κι εσύ τότε, πάρ'το βήμα βήμα. Τι κάνει το $_SERVER? Ψάχνοντας στο documentation εδώ θα δεις πως παίρνει τιμές από το header (μεταξύ άλλων). Το Http είναι προτόκολλο, το οποίο μπορεί να χρησιμοποιηθεί από όποιαδήποτε συσκευή (άρα δεν επικοινωνείς με http μόνο με τον browser). Το HTTP_REFERRER είναι τιμή την οποία θα βάλει κάποιος στον header. Ε άρα άμα κάνω εγώ ένα bot και του περάσω στον header το HTTP_REFERRER πάλι θα περάσει. Και για να ακριβολούμε, όχι απλά bot, μια εντολή curl είναι αρκετή 21 ώρες πριν, Ponous είπε Μια καλή πρακτική είναι το CSRF token. Ουσιαστικά, κάνεις κάτι σαν το κλειδί που έβαλες στην html... αλλά προς θεού μην δίνεις κλειδιά που υπάρχουν στην mysql! Δες αυτό που σου έστειλα. Το CSRF αποτελεί το πρόβλημα. Άμα πας πιο κάτω θα δεις πως προσπαθούν να προστατεύσουν μια σελίδα από τέτοιες επιθέσεις. Όταν το καταλάβεις αυτό, τότε ψάξε πως το κάνουν στην php.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα