Πρέπει πάντα να κάνουμε ελέγχους έτσι ώστε να μειώσουμε τα λάθη που θα εμφανιστούν. (Να τα εξαφανίσουμε αποκλείεται, δεν υπάρχει πρόγραμμα στο οποίο να έχουν προβλεφτεί τα πάντα)
Ειδικά στην PHP που λόγω της χρήσης της στο Internet μπορεί η εφαρμογή μας να χρησιμοποιηθεί εν δυνάμει από τους πάντες οφείλουμε να προγραμματίζουμε αμυντικά, κοινώς:
α) Θεωρούμε -και όχι αδίκως- ότι ο τελικός χρήστης είναι παντελώς ηλίθιος.
α) Θεωρούμε -και όχι αδίκως- ότι ο τελικός χρήστης είναι παντελώς ηλίθιος.
β) Δεν ξέρει να διαβάζει.
γ) Είναι 60+ χρονών και θεωρεί ακόμα ότι ο υπολογιστής είναι στα επίπεδα του Eniac.
Οπότε τι κάνουμε;
Ελέγχουμε πάντα ΤΑ ΠΑΝΤΑ.
SQL Injection:
Θεωρώ ότι ο όρος είναι αρκετά γνώριμος (ή απλά είμαι υπεραισιόδοξος).
Σε περίπτωση που δεν τον ξέρετε, το παρακάτω θα σας διαφωτίσει:
Υπάρχουν διάφοροι τρόποι να προστατευτεί κανείς και η PHP μας δίνει αρκετές συναρτήσεις να μας βοηθήσει.
Ουσιαστικά, αυτό που πρέπει να γίνει, είναι να γίνουν escaped όλοι οι ειδικοί χαρακτήρες έτσι ώστε o SQL server που θα εκτελέσει το ερώτημα να μη τους λάβει υπ' όψιν του ως τμήμα του ερωτήματος, αλλά ως περιεχόμενο.
Παλιότερα υπήρχε η συνάρτηση addslashes() η οποία έπαιρνε ένα string, και, όπως λέει και το όνομά της, τοποθετούσε καθέτους πριν από τους ειδικούς χαρακτήρες.
Επίσης για να διευκολύνουν τους προγραμματιστές, έβαλαν και μια directive ονόματι magic_quotes_gpc, η οποία ουσιαστικά όταν ήταν σε λειτουργία εφάρμοζε αυτόματα την addslashes() σε όλες τις gpc ($_GET, $_POST, $_COOKIE) μεταβλητές.
Στις πιο καινούριες εκδόσεις προστέθηκε η πιο αποτελεσματική mysql_real_escape_string() με την οποία και μόνο στη σκέψη να γράφεις όλο αυτό το μακρινάρι για κάθε τιμή που θες να κάνεις ασφαλή είναι να σε πιάνει απόγνωση.
Και άντε, το γράφεις, και σπίτι σου δουλεύει καλά με το τελευταίο xampp που πέρασες, και όλα ωραία. Όταν πας να το ανεβάσεις σε έναν server που δεν έχουν ανανεώσει την php τους και άρα δεν έχουν αυτή τη νέα συνάρτηση τι κάνεις;
Ιδού τι κάνεις:
<?php function mysql_prep($value) { $magic_quotes_active = get_magic_quotes_gpc(); //Ελέγχουμε αν είναι ενεργά τα magic_quotes if(function_exists("mysql_real_escape_string")) // Αν υπάρχει η συνάρτηση mysql_real_escape_string... { // ...τότε, αν είναι ενεργά τα magic_quotes, τα κάνουμε undo για να λειτουργήσει η (καλύτερη) mysql_real_escape_string if($magic_quotes_active) { $value = stripslashes($value); } $value = mysql_real_escape_string($value); } else //αν δεν υπάρχει η mysql_real_escape_string { if(!$magic_quotes_active) // αν δεν είναι ενεργά τα magic_quotes, τότε τη χρησιμοποιούμε μόνοι μας { $value = addslashes($value); } //αν είναι ήδη ενεργά τα magic_quotes τότε έχουν ήδη χρησιμοποιθεί } return $value; } ?>
Enjoy.
No comments:
Post a Comment