Λειτουργία ασφαλείας PHP: strip_tags, filter_var, Md5 και sha1

Πιθανές απειλές για την ασφάλεια

Είναι βασικά δύο ομάδες ανθρώπων που μπορούν να επιτεθούν στο σύστημά σας

  • Χάκερ – με σκοπό να αποκτήσουν πρόσβαση σε μη εξουσιοδοτημένα δεδομένα ή να διακόψουν την εφαρμογή
  • Χρήστες – ενδέχεται να εισάγουν αθώα λάθος παραμέτρους σε φόρμες που μπορεί να έχουν αρνητικές επιπτώσεις σε έναν ιστότοπο ή μια εφαρμογή Ιστού.

Τα παρακάτω είναι τα είδη των επιθέσεων που πρέπει να προσέχουμε.

SQL Injection – Αυτός ο τύπος επίθεσης προσθέτει επιβλαβή κώδικα SQL δηλώσεις.

Αυτό γίνεται χρησιμοποιώντας είτε φόρμες εισαγωγής χρήστη είτε διευθύνσεις URL που χρησιμοποιούν μεταβλητές.

Ο επισυναπτόμενος κώδικας σχολιάζει τη συνθήκη στον όρο WHERE μιας πρότασης SQL. Ο επισυναπτόμενος κωδικός μπορεί επίσης να

  • εισάγετε μια συνθήκη που θα είναι πάντα αληθής
  • διαγραφή δεδομένων από έναν πίνακα
  • ενημέρωση δεδομένων σε πίνακα
  • Αυτός ο τύπος επίθεσης χρησιμοποιείται συνήθως για να αποκτήσει μη εξουσιοδοτημένη πρόσβαση σε μια εφαρμογή.

Σενάριο μεταξύ τοποθεσιών – Αυτός ο τύπος επίθεσης συνήθως εισάγει επιβλαβή κώδικα JavaΓραφή. Αυτό γίνεται χρησιμοποιώντας φόρμες εισαγωγής χρηστών, όπως φόρμες επικοινωνίας και σχολίων. Αυτό γίνεται για να?

  • Ανάκτηση ευαίσθητων πληροφοριών όπως δεδομένα cookies
  • Ανακατευθύνετε τον χρήστη σε διαφορετική διεύθυνση URL.
  • Άλλες απειλές μπορεί να περιλαμβάνουν – ένεση κώδικα PHP, Έγχυση κελύφους, ένεση μέσω email, αποκάλυψη πηγαίου κώδικα σεναρίου κ.λπ.

PHP Application Security καλυτερα Practices

Ας δούμε τώρα μερικές από τις βέλτιστες πρακτικές PHP Security που πρέπει να λάβουμε υπόψη κατά την ανάπτυξη των εφαρμογών μας.

PHP strip_tags

Οι συναρτήσεις strip_tags αφαιρούν το HTML, JavaΓραφή ή ετικέτες PHP από μια συμβολοσειρά.

Αυτή η συνάρτηση είναι χρήσιμη όταν πρέπει να προστατεύσουμε την εφαρμογή μας από επιθέσεις όπως το cross site scripting.

Ας εξετάσουμε μια εφαρμογή που δέχεται σχόλια από χρήστες.

<?php

$user_input = "Your site rocks";

echo "<h4>My Commenting System</h4>";

echo $user_input;

?>

Υποθέτοντας ότι έχετε αποθηκεύσει το comments.php στον φάκελο phptuts, μεταβείτε στη διεύθυνση URLhttp://localhost/phptuts/comments.php

PHP strip_tags

Ας υποθέσουμε ότι λαμβάνετε τα ακόλουθα ως είσοδο χρήστη alert(‘Your site sucks!’);

<?php

$user_input = "<script>alert('Your site sucks!');</script>";

echo "<h4>My Commenting System</h4>";

echo $user_input;

?>

Περιηγηθείτε στη διεύθυνση URL http://localhost/phptuts/comments.php

PHP strip_tags

Ας προστατεύσουμε τώρα την εφαρμογή μας από τέτοιες επιθέσεις χρησιμοποιώντας τη λειτουργία strip_tags.

<?php

$user_input = "<script>alert('Your site sucks!');</script>";

echo strip_tags($user_input);

?>

Περιηγηθείτε στη διεύθυνση URL http://localhost/phptuts/comments.php

PHP strip_tags

PHP filter_var συνάρτηση

Η συνάρτηση filter_var χρησιμοποιείται για την επικύρωση και την απολύμανση δεδομένων.

Η επικύρωση ελέγχει εάν τα δεδομένα είναι του σωστού τύπου. Ένας αριθμητικός έλεγχος επικύρωσης σε μια συμβολοσειρά επιστρέφει ένα ψευδές αποτέλεσμα.

Η εξυγίανση είναι η αφαίρεση παράνομων χαρακτήρων από α κορδόνι.

Ελέγξτε αυτόν τον σύνδεσμο για την πλήρη αναφορά filter_var

Ο κώδικας είναι για το σύστημα σχολίων.

Χρησιμοποιεί τη συνάρτηση filter_var και τη σταθερά FILTER_SANITIZE_STRIPPED για την απογύμνωση ετικετών.

<?php

$user_input = "<script>alert('Your site sucks!');</script>";

echo filter_var($user_input, FILTER_SANITIZE_STRIPPED);

?>

Παραγωγή:

alert('Your site sucks!');

mysqli_real_escape_string συνάρτηση Αυτή η συνάρτηση χρησιμοποιείται για την προστασία μιας εφαρμογής από την ένεση SQL.

Ας υποθέσουμε ότι έχουμε την ακόλουθη δήλωση SQL για την επικύρωση του αναγνωριστικού χρήστη και του κωδικού πρόσβασης.

<?php
SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass';
?>

Ένας κακόβουλος χρήστης μπορεί να εισαγάγει τον ακόλουθο κώδικα στο πλαίσιο κειμένου αναγνωριστικού χρήστη. ' Ή 1 = 1 — Και 1234 στο πλαίσιο κειμένου κωδικού πρόσβασης Ας κωδικοποιήσουμε τη μονάδα ελέγχου ταυτότητας

<?php

$uid = "' OR 1 = 1 -- ";

$pwd = "1234";

$sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';";

echo $sql;

?>

Το τελικό αποτέλεσμα θα είναι

SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';

ΕΔΩ,

  • Το “SELECT * FROM users WHERE user_id = ”” δοκιμάζει για ένα κενό αναγνωριστικό χρήστη
  • «Ή 1 = 1» είναι μια συνθήκη που θα ισχύει πάντα
  • Το "–" σχολιάζει αυτό το τμήμα που ελέγχει τον κωδικό πρόσβασης.

Το παραπάνω ερώτημα θα επιστρέψει όλους τους χρήστες Ας χρησιμοποιήσουμε τώρα τη συνάρτηση mysqli_real_escape_string για να ασφαλίσουμε τη μονάδα σύνδεσής μας.

<?php

$uid = mysqli_real_escape_string("' OR 1 = 1 -- ");

$pwd = mysqli_real_escape_string("1234");

$sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';";

echo $sql;

?>

Θα βγει ο παραπάνω κώδικας

SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';

Σημείωση η δεύτερη μεμονωμένη προσφορά έχει διαφύγει για εμάς, θα αντιμετωπιστεί ως μέρος του αναγνωριστικού χρήστη και ο κωδικός πρόσβασης δεν θα σχολιαστεί.

PHP Md5 και PHP sha1

Το Md5 είναι το ακρωνύμιο για το Message Digest 5 και το sha1 είναι το ακρωνύμιο του Secure Hash Algorithm 1.

Και οι δύο χρησιμοποιούνται για την κρυπτογράφηση συμβολοσειρών.

Μόλις κρυπτογραφηθεί μια συμβολοσειρά, είναι κουραστικό να την αποκρυπτογραφήσουμε.

Τα Md5 και sha1 είναι πολύ χρήσιμα κατά την αποθήκευση κωδικών πρόσβασης στη βάση δεδομένων.

Ο παρακάτω κώδικας δείχνει την υλοποίηση των md5 και sha1

<?php
echo "MD5 Hash: " . md5("password");
echo "SHA1 Hash: " . sha1("password");
?>

Υποθέτοντας ότι έχετε αποθηκεύσει το αρχείο hashes.php στον φάκελο phptuts, περιηγηθείτε στη διεύθυνση URL

PHP Md5 και PHP sha1

Όπως μπορείτε να δείτε από τους παραπάνω κατακερματισμούς, εάν ένας εισβολέας αποκτούσε πρόσβαση στη βάση δεδομένων σας, εξακολουθεί να μην γνωρίζει τους κωδικούς πρόσβασης για να συνδεθεί.

Σύνοψη

  • Η ασφάλεια αναφέρεται σε μέτρα που εφαρμόζονται για την προστασία μιας εφαρμογής από τυχαίες και κακόβουλες επιθέσεις.
  • Η συνάρτηση strip_tags χρησιμοποιείται για την αφαίρεση ετικετών όπως π.χ από δεδομένα εισόδου
  • Η συνάρτηση filter_var επικυρώνει και php απολυμαίνει τα δεδομένα εισόδου
  • Το mysqli_real_escape_string χρησιμοποιείται για την εξυγίανση της δήλωσης SQL. Αφαιρεί κακόβουλους χαρακτήρες από τις δηλώσεις
  • Και τα δύο MD5 και SHA1 χρησιμοποιούνται για την κρυπτογράφηση κωδικού πρόσβασης.