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

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

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

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

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

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

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

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

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

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

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

Βέλτιστες πρακτικές για την ασφάλεια εφαρμογών PHP

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

PHP strip_tags

Οι συναρτήσεις strip_tags αφαιρούν το HTML, το JavaScript ή ετικέτες 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

Ας υποθέσουμε ότι λαμβάνετε το following ως είσοδο του χρήστη 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!');

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

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

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

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

<?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» είναι μια συνθήκη που θα ισχύει πάντα
  • Το "–" σχολιάζει αυτό το τμήμα που ελέγχει τον κωδικό πρόσβασης.

Το παραπάνω ερώτημα θα επιστρέψει όλους τους χρήστες Let's now use mysqlΛειτουργία i_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';

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

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 απολυμαίνει τα δεδομένα εισόδου
  • mysqlΤο i_real_escape_string χρησιμοποιείται για την εξυγίανση της δήλωσης SQL. Αφαιρεί κακόβουλους χαρακτήρες από τις δηλώσεις
  • Και τα δύο MD5 και SHA1 χρησιμοποιούνται για την κρυπτογράφηση κωδικού πρόσβασης.