Ο ευκολότερος τρόπος για να κατανοήσουν και να μάθουν τι MySQL ένεση doesis πραγματικά να ρίξετε μια ματιά σε ένα παράδειγμα . Ένας από τους δημοφιλείς τρόπους για τη χρήση MySQLinjections είναι να παρακάμψει login ελέγχους σε ιστοσελίδες . Εδώ είναι ένα παράδειγμα της awebsite που χρησιμοποιεί την παρακάτω φόρμα για την ταυτότητα του χρήστη :
Αφού πατήσετε υποβάλουν δεδομένα που εισάγονται στη συνέχεια αποστέλλεται στο userlogin.php σελίδα που δέχεται και περνά μέσα από ένα ερώτημα στη βάση δεδομένων για να ελέγξει το επίπεδο του χρήστη πρόσβαση έχει και αν έχει εισάγει το σωστό όνομα χρήστη και τον κωδικό πρόσβασης .
$ username = $ _POST [ "Όνομα Χρήστη" ] ? $ password = $ _POST [' password' ] ? $ query = "SELECT όνομα, κωδικό ΑΠΟ χρήστες WHERE όνομα = ' $ username και password = ' $ password " ? ; >
Αυτό το είδος της φόρμας σύνδεσης είναι ορθάνοιχτη για την εκμετάλλευση από τις επιθέσεις ένεση MySQL . Για να αποκτήσετε πρόσβαση στην ιστοσελίδα κάθε χρήστης μπορεί να εισάγει ακόλουθο κώδικα : 'OR 1 = 1 - για το όνομα χρήστη και ' OR 1 = 1 για τον κωδικό
ερωτήματος θα μοιάζει τώρα με αυτό : $ query = "SELECT όνομα . , κωδικό ΑΠΟ ΟΠΟΥ χρήστες το όνομα χρήστη = '' OR 1 = 1 - και password = '' OR 1 = 1 " ?
Αυτό το ερώτημα θα επιλέξει το όνομα χρήστη και τον κωδικό πρόσβασης από τους χρήστες , όπου δεν υπάρχουν ονόματα χρήστη ή τον κωδικό πρόσβασης ( '' μέρος) ή αν ένα ίσον ένα. Ως ένα ισούται με ένα σε όλες τις περιπτώσεις ασφάλειας της βάσης δεδομένων είναι σε κίνδυνο. Δύο παύλες πριν απόστροφο έχουν προστεθεί για να MySQL αγνοήσει την απόστροφο που είναι πλέον περιττά. Αυτό είναι μόνο ένα είδος της επίθεσης που χρησιμοποιούν MySQL ένεση . Μια άλλη παραλλαγή αυτής της επίθεσης είναι να getaccess σε περισσότερες πληροφορίες από ό, τι χρήστης έχει τη δυνατότητα να .
Τώρα κοιτάξτε ένα παράδειγμα όπου ιδιοκτήτης της βάσης δεδομένων με χρήση των ακόλουθων queryto να πάρετε τα στοιχεία για εμφάνιση σε λογαριασμό χρήστη πληροφορίες της σελίδας .
$ query = "SELECT * FROM χρήστες WHERE όνομα = ' $ name " ?
Αν αυτό το είδος του ερωτήματος δεν προστατεύεται κακόβουλος χρήστης είναι σε θέση να input'OR 1 = 1 - να παρακάμψει ελέγχου χρήστη . $ query = "SELECT * FROM χρήστες ΟΠΟΥ όνομα χρήστη = '' OR 1 = 1 - " ? Αυτό το ερώτημα τώρα δεν θα επιλέξουν μόνο τα δεδομένα του χρήστη , αλλά τα δεδομένα όλων των χρηστών στον πίνακα " χρήστες "
Προστασία ενάντια MySQL ενέσεις
Η
Υπάρχουν πολλοί τρόποι για την προστασία από MySQL ενέσεις . Στην πραγματικότητα, MySQL ενέσεις είναι οι απειλές μόνο αν ο προγραμματιστής έχει αγνοήσει την απειλή και απέτυχε στην προστασία του κώδικα . Ο ευκολότερος τρόπος για την προστασία από ενέσεις σε PHP και MySQL συνδυασμός είναι να χρησιμοποιήσετε το PHP λειτουργία: . . ; " Mysql_real_escape_string "
Πηγαίνοντας πίσω στο πρώτο παράδειγμα <$ username = $ _POST [ "Όνομα Χρήστη" ] ? $ password = $ _POST [' password' ] ? $ query = "SELECT όνομα, κωδικό ΑΠΟ χρήστες WHERE όνομα = ' $ username και password = ' $ password " ?; >
Για την προστασία έναντι MySQL ενέσεις άμεσες χρήσεις των εισροών χρήστης πρέπει να befiltered μέσω της " mysql_real_escape_string " . . ; Λειτουργία " mysql_real_escape_string " θα διαφεύγουν από όλους τους ειδικούς χαρακτήρες MySQL αφαιρώντας τη δυνατότητα να αλλάξει τη συμπεριφορά των ερωτημάτων μας
<$ username = mysql_real_escape_string ( $ _POST [' όνομα χρήστη' ] ) ? $ Password = mysql_real_escape_string ( $ _POST [ ,". ? Leitourgía " mysql_real_escape_string " tha diafév̱goun apó ólous tous eidikoús charaktí̱res MySQL afairó̱ntas ti̱ dynatóti̱ta na alláxei ti̱ symperiforá to̱n ero̱ti̱máto̱n mas
<$ username = mysql_real_escape_string ( $ _POST [' ónoma chrí̱sti̱' ] ) ?̱ $ Password = mysql_real_escape_string ( $ _POST [ «κωδικό πρόσβασης» ] ) ? $ query = "SELECT όνομα, κωδικό ΑΠΟ χρήστες WHERE όνομα = ' $ username και password = ' $ password " ?; >
Η
εικόνων
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα