Πώς μπορώ να κάνω ασφαλέστερη την ιστοσελίδα της PHP;


Απάντηση 1:

Όταν πρόκειται για την ασφάλεια των εφαρμογών, εκτός από την εξασφάλιση του υλικού και της πλατφόρμας σας, πρέπει επίσης να γράψετε τον κώδικα σας με ασφάλεια. Εδώ είναι οι καλύτερες συνήθειες που ένας προγραμματιστής μπορεί να αναπτύξει για να προστατεύσει την εφαρμογή του από την επίθεση:

Έλεγχος δεδομένων εισόδου

: Ενώ σχεδιάζετε την αίτησή σας, θα πρέπει να προσπαθείτε να προστατέψετε την εφαρμογή σας από την κακή είσοδο. Μην εμπιστεύεστε την είσοδο του χρήστη. Παρόλο που η εφαρμογή σας προορίζεται για καλούς χρήστες, υπάρχει πάντα η πιθανότητα κάποιος κακός χρήστης να προσπαθήσει να επιτεθεί στην εφαρμογή σας εισάγοντας κακή είσοδο. Αν πάντα επικυρώνετε και φιλτράρετε τα εισερχόμενα δεδομένα, μπορείτε να δημιουργήσετε μια ασφαλή εφαρμογή. Πάντα να επικυρώνετε δεδομένα στον κώδικα PHP. Αν χρησιμοποιείτε JavaScript για την επικύρωση της εισόδου των χρηστών, υπάρχει πάντοτε μια πιθανότητα ότι ο χρήστης ενδέχεται να έχει απενεργοποιήσει το JavaScript στο πρόγραμμα περιήγησης. Σε αυτήν την περίπτωση, η εφαρμογή σας δεν θα μπορεί να επικυρώσει την είσοδο. Η επικύρωση στο JavaScript είναι εντάξει, αλλά για να προφυλάξουμε αυτά τα είδη προβλημάτων, θα πρέπει να επικυρώσετε τα δεδομένα και στην PHP.

Φύλαξη κατά των επιθέσεων XSS:

Η επίθεση δέσμης ενεργειών μεταξύ ιστότοπων (επίθεση XSS) είναι μια επίθεση που βασίζεται στην ένεση κώδικα σε ευπαθείς ιστοσελίδες. Ο κίνδυνος είναι αποτέλεσμα της αποδοχής μη ελεγμένων δεδομένων εισόδου και της εμφάνισής τους στο πρόγραμμα περιήγησης.

Αποτροπή επιθέσεων SQL Injection

Για να εκτελέσετε τα ερωτήματα βάσης δεδομένων σας, θα πρέπει να χρησιμοποιείτε ΠΟΠ. Με παραμετροποιημένα ερωτήματα και προετοιμασμένες δηλώσεις, μπορείτε να αποτρέψετε την ένεση SQL.

Ρίξτε μια ματιά στο παρακάτω παράδειγμα:

  1. προετοιμασία ($ sql), $ stmt-> execute (array (": name" => $ όνομα, ": age" => $ ηλικία));

Στον παραπάνω κώδικα παρέχουμε τις ονομαζόμενες παραμέτρους

:όνομα

και

:ηλικία

προς το

προετοιμάζω()

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

εκτέλεση()

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

Προστασία του συστήματος αρχείων

Ως προγραμματιστής θα πρέπει πάντα να γράφετε τον κώδικα σας με τέτοιο τρόπο ώστε καμία από τις λειτουργίες σας να μην θέτει σε κίνδυνο το σύστημα αρχείων σας. Εξετάστε την ακόλουθη PHP που κατεβάζει ένα αρχείο σύμφωνα με μια παράμετρο που παρέχεται από τον χρήστη:

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

Προστασία δεδομένων περιόδου σύνδεσης

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

Ένας καλός τρόπος για να φυλάξετε τα δεδομένα της συνεδρίας σας είναι να κρυπτογραφήσετε τις πληροφορίες που είναι αποθηκευμένες στη συνεδρία. Αυτό δεν επιλύει πλήρως το πρόβλημα, αφού τα κρυπτογραφημένα δεδομένα δεν είναι απολύτως ασφαλή, αλλά τουλάχιστον οι πληροφορίες δεν είναι αναγνώσιμες. Θα πρέπει επίσης να εξετάσετε το ενδεχόμενο να διατηρείτε τα δεδομένα της συνεδρίας αποθηκευμένα κάπου αλλού, όπως μια βάση δεδομένων. Η PHP παρέχει μια μέθοδο που ονομάζεται

session_set_save_handler ()

η οποία μπορεί να χρησιμοποιηθεί για να διατηρήσει τα δεδομένα στη σύνοδο με τον δικό σας τρόπο.

Από την PHP 5.4 μπορείτε να περάσετε ένα αντικείμενο τύπου

SessionHandlerInterface

προς το

session_set_save_handler ()

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

SessionHandlerInterface

.

Ορθή διαχείριση λαθών

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

Στη λειτουργία παραγωγής πρέπει να απενεργοποιήσουμε

display_errors

και

display_start_up_errors

Ρυθμίσεις.

error_reporting

και

log_errors

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

Μπορείτε να χρησιμοποιήσετε το set_error_handler για να ορίσετε προσαρμοσμένους χειριστές σφαλμάτων. Ωστόσο, έχει περιορισμούς. Ο χειριστής προσαρμοσμένων σφαλμάτων παρακάμπτει τον τυπικό μηχανισμό χειρισμού σφαλμάτων της PHP. Δεν μπορεί να πιάσει λάθη όπως

E_CORE_ERROR

,

E_STRICT

ή

E_COMPILER_ERROR

στο ίδιο αρχείο ορίζεται ο χειριστής σφάλματος. Επίσης, δεν θα μπορέσει να χειριστεί τα σφάλματα που μπορεί να προκύψουν στο ίδιο το χειριστή.

Για να χειριστείτε τα σφάλματα κομψά θα πρέπει να εκτελέσετε χειρισμούς εξαίρεσης μέσω μπλοκ try / catch. Εξαιρέσεις αντιπροσωπεύονται από το

Εξαίρεση

τάξη και τις υποκατηγορίες του. Αν παρουσιαστεί κάποιο σφάλμα στο μπλοκ δοκιμής, μπορείτε να ρίξετε μια εξαίρεση και να το επεξεργαστείτε στο μπλοκ catch.


Απάντηση 2:

Υποθέτω ότι θέλετε να μάθετε "πώς να αναπτύξετε έναν ασφαλή ιστότοπο στην PHP".

Η καλύτερη λύση για αυτό είναι η χρήση του πλαισίου για την ανάπτυξη καθώς φροντίζουν πολλά πράγματα από μόνα τους, όπως απολύμανση των εισροών χρηστών, προστασία csrf κλπ. Μπορείτε να χρησιμοποιήσετε πλαίσια όπως

CodeIgniter Web Framework

ή

Το Πλαίσιο PHP για τους Τεχνίτες του Ιστού

ή οποιαδήποτε άλλη,

Εάν δεν χρησιμοποιείτε κανένα πλαίσιο τότε, εδώ είναι τα λίγα πράγματα που πρέπει να κάνετε,

Για λεπτομέρειες και περισσότερα, παρακαλώ περάστε

Ασφάλεια - Εγχειρίδιο

  • Βεβαιωθείτε ότι καθαρίζετε κάθε είσοδο χρήστη.
  • Βεβαιωθείτε ότι επικυρώνετε και επαληθεύετε κάθε είσοδο χρήστη.

Ασφάλεια συστήματος αρχείων

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

Εγκαταστήθηκε ως μονάδα Apache

  • Όταν εγκαθίσταται ως μονάδα Apache, κληρονομεί τα δικαιώματα των χρηστών του Apache, δίνοντας τα δικαιώματα του χρήστη Apache στη ρίζα μπορεί να είναι πολύ επικίνδυνη

Απόκρυψη PHP - Εγχειρίδιο

  • Απόκρυψη php - Απενεργοποιήστε το expose_php στο php.ini

Ασφάλεια βάσεων δεδομένων

  • Μην εφαρμόζετε όλη την επιχειρησιακή λογική στην εφαρμογή Ιστού (δηλαδή τη δέσμη ενεργειών σας), αντί να την κάνετε στο σχήμα βάσης δεδομένων χρησιμοποιώντας προβολές, ενεργοποιητές ή κανόνες
  • Συνδέσεις βάσεων δεδομένων, χρησιμοποιήστε προετοιμασμένες δηλώσεις προσπαθήστε να χρησιμοποιήσετε ΠΟΠ ή mysqli για αυτό.
  • Ποτέ μην συνδέεστε στη βάση δεδομένων ως υπερ-χρήστης ή ως ιδιοκτήτης της βάσης δεδομένων. Χρησιμοποιήστε πάντα προσαρμοσμένους χρήστες με πολύ περιορισμένα προνόμια.
  • Μην εκτυπώνετε πληροφορίες συγκεκριμένης βάσης δεδομένων
  • Επαληθεύστε την είσοδο λέγοντας σε περίπτωση αριθμητικής εισαγωγής επαληθεύστε τα δεδομένα με ctype_digit () ή σιωπηλά αλλάξτε τον τύπο χρησιμοποιώντας settype (), ή χρησιμοποιήστε την αριθμητική παράστασή του με sprintf ()
  • Εάν η λύση το επιτρέπει, χρησιμοποιήστε αποθηκευμένες διαδικασίες και προηγουμένως καθορισμένους δρομείς για αφηρημένη πρόσβαση δεδομένων, έτσι ώστε οι χρήστες να μην έχουν άμεση πρόσβαση σε πίνακες ή προβολές

Χρησιμοποιώντας το Register_globals

  • Απενεργοποιήστε το register_globals μέσω του Php Ini ή του htaccess.

PHP: Αναφορά σφαλμάτων - Εγχειρίδιο

  • Ενώ αναπτύσσεται στην παραγωγή, αναλύει πλήρως το σφάλμα, ρυθμίζοντας error_reporting () στο 0 ή απενεργοποιώντας την εμφάνιση σφάλματος χρησιμοποιώντας την επιλογή php.ini option_errors, για να απομονώσετε τον κώδικα σας από την ανίχνευση

Τέλος πάντων προσπαθήστε να περάσετε από τους παραπάνω συνδέσμους και εγχειρίδιο php και προσπαθήστε να κάνετε κάποια αναζήτηση στο google θα βρείτε πολλά άρθρα.

Αλλά ο καλύτερος τρόπος για την παραγωγή είναι να πάμε για κάποια framworks εάν η λύση το επιτρέπει.

Χαιρετισμοί,

Sambhav


Απάντηση 3:

Ως προγραμματιστής PHP, η πρώτη σας ανησυχία θα πρέπει να είναι να δημιουργήσετε μια εφαρμογή ιστού που να είναι ασφαλής και να αποφύγετε τυχόν αθέλητα να επιτρέπουν τρύπες ασφαλείας να εισέρχονται σε μια εφαρμογή Web.

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

Αυτό το άρθρο είναι εδώ για να σας βοηθήσει να βρούμε όλα τα ελαττώματα και τις ατέλειες και να σας δώσουμε όλες τις καλύτερες και πιθανές λύσεις για να βγείτε από τις καταστάσεις:

Top 7 σφάλματα ασφαλείας PHP και τι μπορείτε να κάνετε σχετικά με αυτά


Απάντηση 4:

Μπορείτε να μάθετε περισσότερα σχετικά με την εφαρμογή Web App Security, Pentesting κ.λπ. Ένας καλός τρόπος για να ξεκινήσετε θα είναι το βιβλίο "The Web Application Security Handbook". Μπορείτε επίσης να κατεβάσετε το DVWA (Damn Vulnerable Web Application) για να έχετε τα χέρια σας στην εμπειρία στην εκμετάλλευση των ευάλωτων σας. Μόλις αντιληφθείτε τις ευπάθειες που είναι δυνατές σε οποιονδήποτε ιστότοπο, μπορείτε τελικά να γίνετε υπεύθυνος ανάπτυξης εφαρμογών.

Θυμάμαι. Όλα αυτά έρχονται με κόστος, και είναι υπομονή!


Απάντηση 5:

1) χρησιμοποιήστε κατάλληλη αναφορά σφαλμάτων

2) απενεργοποιήστε τις κακές λειτουργίες του php

αν (! κενό ($ _POST ['username']) && $ _POST ['username'] == 'test'

&&! empty ($ _POST ['κωδικός πρόσβασης']) && $ _POST ['κωδικός πρόσβασης'] == "test123"

)

{

$ πρόσβαση

= αληθινό.

}}

3) επικυρώστε την είσοδο

Επαληθεύστε την είσοδο n εκτός από τους χαρακτήρες που διαφεύγουν, ένας άλλος πολύ καλός τρόπος για να προστατεύσετε την είσοδο είναι να την επικυρώσετε.

4) Προστασία από την ένεση SQL

$ username

= mysqli_real_escape_string ($ GET ['username']);

mysql_query ("SELECT * FROM tbl_members WHERE username = '". $ username. "'");

5) Απενεργοποίηση μαγείας:

  1. . Magic quotes ;; Magic quotes για τα εισερχόμενα δεδομένα GET / POST / Cookie.magic_quotes_gpc = Απενεργοποιημένα. Μαγικά εισαγωγικά για δεδομένα που παράγονται κατά τη διάρκεια εκτέλεσης, π.χ. δεδομένα από SQL, exec (), etc.magic_quotes_runtime = Απενεργοποιημένα. Χρησιμοποιήστε μαγεία εισαγωγικά τύπου Sybase (διαφυγή 'με' 'αντί για \') magic_quotes_sybase = Off