Μία από τις μεγαλύτερες κατηγορίες ευπαθειών ιστού είναι γνωστή ως "SQL Injection" ή SQLi. Η δομημένη γλώσσα ερωτημάτων, γνωστή και ως SQL, είναι η γλώσσα που χρησιμοποιείται για αλληλεπίδραση με την πλειονότητα των βάσεων δεδομένων, αν και χρησιμοποιούνται διάφορες παραλλαγές της γλώσσας ανάλογα με τη βάση δεδομένων πλατφόρμα. Κάθε ιστότοπος που αποθηκεύει δεδομένα χρήστη, όπως πληροφορίες λογαριασμού, ή παρέχει λειτουργίες μεταφόρτωσης χρήστη, όπως ένας ιστότοπος φιλοξενίας εικόνων, θα χρησιμοποιεί μια βάση δεδομένων για την αποθήκευση αυτών των δεδομένων.
Συμβουλή: Η SQL γενικά προφέρεται είτε "ess cue ell" είτε "sequel", με την πρώτη επιλογή να είναι πιο κοινή στα βρετανικά αγγλικά και η δεύτερη πιο διαδεδομένη στα αμερικανικά αγγλικά. Και οι δύο προφορές είναι γενικά κατανοητές στο πλαίσιο της συζήτησης για βάσεις δεδομένων.
Τι είναι το SQLi;
Το SQLi είναι μια ευπάθεια όπου οι προγραμματιστές ιστού που σχεδιάζουν τον κώδικα που επικοινωνεί μεταξύ τους ο διακομιστής web και η βάση δεδομένων δεν εφαρμόζουν προστασίες έναντι εντολών SQL που υποβάλλονται από α χρήστης. Το πρόβλημα είναι ότι είναι δυνατό να διαφύγετε από τις δηλώσεις βάσης δεδομένων και να προσθέσετε νέα ορίσματα ή μια εντελώς νέα δήλωση. Η αλλαγμένη ή η δεύτερη δήλωση βάσης δεδομένων μπορεί να εκτελέσει μια σειρά ενεργειών, συμπεριλαμβανομένων πιθανών μεγάλης κλίμακας διαγραφών ή διαρροών δεδομένων.
Οι εκμεταλλεύσεις συνήθως περιστρέφονται γύρω από το να κάνουν τις υπάρχουσες δηλώσεις να είναι αληθείς σε όλες τις περιστάσεις ή να παρέχουν μια δεύτερη ομαδοποιημένη εντολή που εκτελεί μια συγκεκριμένη ενέργεια, όπως η διαγραφή ή η εμφάνιση όλων των δεδομένων. Για παράδειγμα, μια δήλωση SQL για τη σύνδεση σε έναν ιστότοπο μπορεί να ελέγξει εάν το όνομα χρήστη και ο κωδικός πρόσβασης που υποβλήθηκαν ταιριάζουν με μια καταχώρηση στη βάση δεδομένων. Για να προσπαθήσετε να αποκτήσετε πρόσβαση σε ένα exploit injection SQL, μπορείτε να προσπαθήσετε να προσθέσετε μια ρήτρα "ή true" όπως "ή 1=1". Αυτό θα έκανε την εντολή σύμφωνα με τις γραμμές "σύνδεση με [αυτό] όνομα χρήστη, εάν ο κωδικός πρόσβασης είναι [αυτό] ή αυτή η δήλωση είναι αληθής".
Πώς να αποτρέψετε το SQLi
Το SQLi ήταν ένας πολύ συνηθισμένος τρόπος για τους ιστότοπους να παραβιάζουν τη βάση δεδομένων τους και στη συνέχεια να διέρρευσαν στο διαδίκτυο. Λόγω μιας συντονισμένης προσπάθειας για να διασφαλιστεί ότι η ευαισθητοποίηση για την ασφάλεια αποτελεί μέρος της εκπαίδευσης προγραμματιστών, αυτή η κατηγορία ευπάθειας έχει επιλυθεί σε μεγάλο βαθμό και σπάνια εμφανίζεται πλέον.
Η σωστή μέθοδος για την αποτροπή του SQLi είναι η χρήση προετοιμασμένων δηλώσεων, γνωστών και ως παραμετροποιημένων ερωτημάτων. Παραδοσιακά, οι εντολές SQL δηλώνονται και η είσοδος χρήστη συνδέεται σε αυτές κατά τη διάρκεια αυτής της δήλωσης. Με προετοιμασμένες δηλώσεις, η εντολή της βάσης δεδομένων γράφεται και στη συνέχεια μια sperate συνάρτηση εκτελεί την εντολή και εισάγει δεδομένα χρήστη. Αν και αυτό μπορεί να φαίνεται σαν μια μικρή διαφορά, αλλάζει εντελώς τον τρόπο χειρισμού της εντολής. Η διαφορά εμποδίζει την εκτέλεση οποιωνδήποτε σημαντικών εντολών SQL και αντιμετωπίζει όλες τις εισόδους του χρήστη ως συμβολοσειρά, αποτρέποντας την έγχυση SQL από το να συμβεί.