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

html input onchange και bots


octa
Μετάβαση στην απάντηση Απαντήθηκε από k33theod,

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

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

Καλησπέρα, οι

Έχω μια φόρμα, μέσα στο <textarea name="something" onchange="saveform()"></textarea> 

Η saveform σώζει στη mysql τα πεδία της φόρμας μέσο ajax.

 

Η ερώτηση είναι Τα bot θα αποθηκεύουν στη db;  Δηλαδή αν μπει ένα bot και περάσει δεδομένα στη form θα γίνει η εισαγωγή στη MySql ;

Ευχαριστώ 

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

  • Moderators

Ναι, γιατί να μη γίνει εισαγωγή; Ο κώδικάς σου δεν ξέρει ποιος το καλεί. Δηλαδή αν μπω εγώ στη σελίδα σου και βάλω ένα loop με 100000 κλήσεις στη saveform(), θα βάλω 100000 εγγραφές στη βάση σου.

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

@Kercyn Ναι τόσο απλό είναι. Δίκιο έχεις. Ευχαριστώ.

Το ChatGTP απάντησε

Αναφορά σε κείμενο

Ναι, εάν ένα bot δώσει δεδομένα στη φόρμα, η συνάρτηση saveform θα εκτελεστεί και θα πραγματοποιηθεί η εισαγωγή των δεδομένων στην βάση δεδομένων MySQL. Ωστόσο, αν θέλετε να ελέγξετε αν ένα δεδομένο εισήχθη από ένα bot ή από έναν χρήστη, μπορείτε να χρησιμοποιήσετε μερικές πρακτικές ελέγχου π.χ. έλεγχος της IP διεύθυνσης του συστήματος που καταχωρεί τα δεδομένα.

 

Ο μόνος τρόπος είναι να ελέγξω το IP .

Θα βάλω ένα captcha πριν τη φόρμα λέω, είναι σωστή πρακτική. 

Άλλος τρόπος είναι να ελέγχει μέσω javascript το IP αν υπάρχει κάτι τέτοιο, το ψάχνω.

 

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

  • Moderators

Η σωστή πρακτική σίγουρα δεν είναι να κάνεις κλήση με ajax στη βάση. Πρέπει να έχεις ένα backend το οποίο θα κάνει όλους τους απαραίτητους ελέγχους πριν γράψει στη βάση. Η λύση που λες με την IP δεν είναι λύση για πολλούς λόγους. Καταρχάς μπορεί εγώ να την αλλάζω σε κάθε κλήση. Κατά δεύτερον, μπορεί να βάλω πολλά μηχανήματα με διαφορετικές IP. Κατά τρίτον, τι έλεγχο ακριβώς θα βάλεις;

Η λύση σου λέγεται backend. Ό,τι και να βάλεις στο front μπορεί πολύ εύκολα να ξεπεραστεί, για τον απλούστατο λόγο ότι τρέχει στον client σου.

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

39 λεπτά πριν, Kercyn είπε

Η σωστή πρακτική σίγουρα δεν είναι να κάνεις κλήση με ajax στη βάση. Πρέπει να έχεις ένα backend το οποίο θα κάνει όλους τους απαραίτητους ελέγχους πριν γράψει στη βάση. Η λύση που λες με την IP δεν είναι λύση για πολλούς λόγους. Καταρχάς μπορεί εγώ να την αλλάζω σε κάθε κλήση. Κατά δεύτερον, μπορεί να βάλω πολλά μηχανήματα με διαφορετικές IP. Κατά τρίτον, τι έλεγχο ακριβώς θα βάλεις;

Η λύση σου λέγεται backend. Ό,τι και να βάλεις στο front μπορεί πολύ εύκολα να ξεπεραστεί, για τον απλούστατο λόγο ότι τρέχει στον client σου.

Έχεις κάποιο λινκ να δούμε τη σωστή πρακτική;

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

  • Moderators
Μόλις τώρα, Lanike71 είπε

Έχεις κάποιο λινκ να δούμε τη σωστή πρακτική;

Link για ποιο πράγμα; Για το ότι δεν είναι καλό να χτυπάς απευθείας τη βάση από το frontend;

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

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

Βήμα βήμα.

1) Έβαλα στην html ένα JavaScript var , ένα κλειδί που υπάρχει και στη mysql . Πριν το POST ελέγχει αν συμφωνούν. 

2) Δέχομαι στο back end $_SERVER['HTTP_REFERER']  μόνο το url της σελίδας. 

 

Το μόνο που μπορεί να κάνει ο κακόβουλος χρήστης είναι να γράψει κώδικα για το console. Δεν μπορεί να κάνει και πολλά νομίζω.

Άλλο τρόπο δεν έχω σκεφτεί. 

 

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

Αν δεν έχεις κώδικα στον δικό σου 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.

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

Ευχαριστω @ponous  !

Η PHP δέχεται το $_SERVER['HTTP_REFERER']  και πρέπει να είναι το url της σελίδας. 

Έτσι δεν κάνω επεξεργασία με κάποιο απομακρυσμένο Python or JavaScript scripts παρά μόνο όσα έχουν referer το δικό μου το rl.

Κάνω λάθος ; 

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

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

Χαιρετώ όλους

Βασικά δεν έχω καταλάβει τι κάνει η συνάρτηση που καλείς. Εάν όμως είναι αυτό που φαντάζομαι 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.

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

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.

 

Ευχαριστώ 

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

Στις 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. Δεν μπορεί να κάνει και πολλά νομίζω.

Άλλο τρόπο δεν έχω σκεφτεί. 

 

Αυτά που γράφεις δεν υπάρχουν αλλά οκ

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

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.

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

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

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

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

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

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

Σύνδεση

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

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