Πώς να χειριστείτε την PHP σας για καλύτερη ασφάλεια

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


Πώς να σκληρύνει την PHP

Η PHP είναι μακράν η πιο δημοφιλής γλώσσα προγραμματισμού back-end στο διαδίκτυο που χρησιμοποιείται σήμερα. Μέχρι σήμερα, έχουν τελειώσει 80% των ιστότοπων με backend εφαρμόστε PHP. Το WordPress, το Joomla και το Drupal υποστηρίζονται από αυτό. Δυστυχώς, η PHP έχει γίνει ένας δημοφιλής στόχος για απόπειρες πειρατείας, γι ‘αυτό η ασφάλεια της διαμόρφωσής της είναι κρίσιμη. Ακολουθήστε αυτά τα απλά βήματα για να σκληρύνετε τη διαμόρφωση της PHP σας και να την προστατεύσετε από τρωτά σημεία εισβολής.

Εντοπίστε το αρχείο διαμόρφωσης PHP

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

Επεξεργασία με Κοινόχρηστη φιλοξενία

Εάν δεν είστε βέβαιοι πού βρίσκεται το αρχείο php.ini, επικοινωνήστε με τον πάροχο φιλοξενίας. Ορισμένοι πάροχοι απαιτούν να τοποθετήσετε τις ρυθμίσεις PHP στο αρχείο “.htaccess” στη ρίζα ιστού. Σε αυτήν την περίπτωση, οι ρυθμίσεις PHP θα πρέπει να προστεθούν μία ανά γραμμή με τη μορφή “php_value Name value”. Λάβετε υπόψη ότι ο πάροχος φιλοξενίας ενδέχεται να αποτρέψει την τροποποίηση ορισμένων ρυθμίσεων.

Επεξεργασία με VPS ή Dedicated Server

Το Web Host Manager (WHM) απλοποιεί τη διαδικασία επεξεργασίας του αρχείου διαμόρφωσης PHP παρέχοντας ένα απλό περιβάλλον εργασίας χρήστη. Απλώς βρείτε την ενότητα “Διαμόρφωση υπηρεσίας” στο WHM και κάντε κλικ στο “PHP Configuration Editor”. Στη σελίδα που εμφανίζεται, επιλέξτε “Advanced Mode”.

Πρόγραμμα επεξεργασίας διαμόρφωσης PHP

Εάν δεν χρησιμοποιείτε έναν πίνακα ελέγχου όπως το WHM, θα πρέπει να ανοίξετε απευθείας και να επεξεργαστείτε το php.ini. Η τοποθεσία του php.ini θα διαφέρει ανάλογα με το λειτουργικό σύστημα του διακομιστή σας. Πολλά συστήματα Linux τοποθετούν το αρχείο στη διαδρομή “/etc/php.ini”. Μπορείτε να επιβεβαιώσετε τη θέση του μέσω της γραμμής εντολών. Ξεκινήστε με σύνδεση στον διακομιστή μέσω SSH (επικοινωνήστε με τον πάροχο φιλοξενίας σας για οδηγίες). Μόλις συνδεθείτε, εισαγάγετε την εντολή “php –ini” και πατήστε Enter. Αναζητήστε τη γραμμή που επιστράφηκε με τίτλο “Loaded Configuration File” και σημειώστε τη διαδρομή του αρχείου php.ini.

Μπορείτε να ανοίξετε και να επεξεργαστείτε το php.ini χρησιμοποιώντας ένα πρόγραμμα επεξεργασίας κειμένου που εκτελείται εντός της γραμμής εντολών, όπως “nano” για Linux. Απλώς πληκτρολογήστε “nano /path/to/php.ini” και πατήστε Enter.
Nano για Linux

Δομή php.ini

Μέσα στο php.ini, κάθε ρύθμιση τοποθετείται στη δική της γραμμή με τη μορφή “settingname = settingvalue”. Κάθε γραμμή που ξεκινά με ερωτηματικό είναι ένα σχόλιο, οπότε μην ενημερώσετε καμία από αυτές τις γραμμές.

Επεξεργασία ρυθμίσεων διαμόρφωσης

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

Ενότητα 1: Απομακρυσμένες συνδέσεις

allow_url_fopen = 0
allow_url_include = 0

Μην επιτρέπετε στο Fopen wrappers να ανοίγει απομακρυσμένα URL. Το απομακρυσμένο περιεχόμενο δεν είναι πάντα αξιόπιστο. Η απενεργοποίηση αυτών των επιλογών διασφαλίζει ότι τα περιτυλίγματα fopen μπορούν να φορτώσουν μόνο τοπικό περιεχόμενο.

Ενότητα 2: Ρυθμίσεις χρόνου εκτέλεσης

max_input_time = 30
max_execution_time = 30

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

memory_limit = 8M

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

register_globals = απενεργοποίηση

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

expose_php = 0

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

cgi.force_redirect = 1

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

Ενότητα 3: Περιορισμοί δεδομένων εισαγωγής

post_max_size = 256 χιλ
max_input_vars = 100

Οι χάκερ μπορούν να προσπαθήσουν να πλημμυρίσουν πόρους εφαρμογών ιστού στέλνοντας μαζικά δεδομένα σε αυτό, γεγονός που μπορεί να μειώσει τις ταχύτητες μεταφοράς και τους διαθέσιμους πόρους διακομιστή. Το αποτέλεσμα αυτού του τύπου επίθεσης μπορεί να ελαχιστοποιηθεί μειώνοντας το μέγιστο μέγεθος των δεδομένων POST και επίσης περιορίζοντας την ποσότητα των δεδομένων αιτήματος. Σημειώστε ότι το “post_max_size” επηρεάζει επίσης το μέγιστο μέγεθος των μεταφορτώσεων αρχείων. εάν η εφαρμογή σας έχει δυνατότητες μεταφόρτωσης αρχείων, βεβαιωθείτε ότι η τιμή αυτής της ρύθμισης είναι τουλάχιστον τόσο μεγάλη όσο “upload_max_filesize”.

Ενότητα 4: Χειρισμός σφαλμάτων

display_errors = 0
display_startup_errors = 0

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

log_errors = 1
error_log = / home / johndoe / error_log

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

Ενότητα 5: Περιορισμός πρόσβασης σε αρχεία

open_basedir = "/ σπίτι / johndoe / public_html"

Το Open_basedir διασφαλίζει ότι η PHP μπορεί να περιλαμβάνει αρχεία μόνο από τους καταλόγους που αναφέρονται. Αυτό βελτιώνει την ασφάλεια, αποτρέποντας ακούσια πρόσβαση σενάρια PHP σε ασφαλή αρχεία εκτός των μονοπατιών που περιλαμβάνονται στη λίστα επιτρεπόμενων. Λάβετε υπόψη ότι πρέπει να προσθέσετε κάθε κατάλογο στον οποίο χρειάζεται να έχει πρόσβαση η PHP στη λίστα επιτρεπόμενων, συμπεριλαμβανομένης της προσωρινής μεταφόρτωσης αρχείων και των καταλόγων περιόδου λειτουργίας (δείτε παρακάτω). Μπορείτε να προσθέσετε πολλούς καταλόγους στη λίστα τοποθετώντας μια άνω και κάτω τελεία μεταξύ κάθε καταλόγου. Για παράδειγμα:

open_basedir = "/ home / johndoe / public_html: / var / lib / php / tmp_upload: / var / lib / php / session"

Ενότητα 6: Μεταφορτώσεις αρχείων

file_uploads = 0

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

file_uploads = 1
upload_max_filesize = 1 εκατ

Εάν η εφαρμογή σας απαιτεί δυνατότητες μεταφόρτωσης αρχείων, διατηρήστε το “upload_max_filesize” σε όσο το δυνατόν μικρότερη τιμή.

upload_tmp_dir = / var / lib / php / tmp_upload

Από προεπιλογή, οι προσωρινές μεταφορτώσεις αρχείων τοποθετούνται σε έναν κατάλογο που είναι εγγράψιμος από όλους τους χρήστες του συστήματος. Η τοποθεσία πρέπει να αλλάξει σε έναν πιο ασφαλή κατάλογο. Βεβαιωθείτε ότι η νέα θέση καταλόγου δεν βρίσκεται εντός της ρίζας ιστού. Εάν χρησιμοποιείτε έναν διαχειριστή αρχείων όπως αυτόν που περιλαμβάνεται στο cPanel, τότε μια εύκολη και ασφαλής τοποθεσία για τη δημιουργία του καταλόγου μεταφόρτωσης βρίσκεται ακριβώς έξω από τη ρίζα ιστού (δηλαδή στον ίδιο κατάλογο με τον οποίο βρίσκεται το public_html). Μια άλλη ασφαλής τοποθεσία είναι να δημιουργήσετε τον κατάλογο στον κατάλογο PHP στο “/ var / lib”. Η διαδρομή εξαρτάται από το λειτουργικό σύστημα, δηλαδή “/ var / lib / php” ή “/ var / lib / php5”. Εάν ισχύουν περιορισμοί open_basedir, βεβαιωθείτε ότι ο προσωρινός κατάλογος μεταφόρτωσης περιλαμβάνεται στη λίστα επιτρεπόμενων open_basedir.

Ενότητα 7: Ασφάλεια συνεδρίας

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

session.use_strict_mode = 1

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

session.cookie_httponly = 1

Επιτρέψτε στο cookie περιόδου σύνδεσης να είναι προσβάσιμο μόνο από ένα αίτημα HTTP και όχι από άλλες πηγές όπως το JavaScript. Αυτό βοηθά στην αποτροπή μιας επίθεσης που ονομάζεται επίθεση XSS.

session.use_cookies = 1
session.use_only_cookies = 1
session.use_trans_sid = 0

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

session.name = custom_session_id

Τα cookies αποθηκεύουν τις πληροφορίες τους σε μορφή κλειδιού-τιμής. Συνιστάται να ενημερώσετε το προεπιλεγμένο όνομα κλειδιού του cookie που αποθηκεύει το αναγνωριστικό περιόδου σύνδεσης. Ενημέρωση “custom_session_id” με προσαρμοσμένη τιμή.

session.cookie_secure = 1

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

session.referer_check = example.com

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

session.save_path = "/ var / lib / php / συνεδρία"

Η προεπιλεγμένη διαδρομή αποθήκευσης αρχείου περιόδου λειτουργίας είναι εγγράψιμη από όλους τους χρήστες του συστήματος. Η τοποθεσία πρέπει να αλλάξει σε έναν πιο ασφαλή κατάλογο. Βεβαιωθείτε ότι η νέα θέση καταλόγου δεν βρίσκεται εντός της ρίζας ιστού. Εάν χρησιμοποιείτε έναν διαχειριστή αρχείων όπως αυτόν που περιλαμβάνεται στο cPanel, τότε μια εύκολη τοποθεσία για τη δημιουργία του καταλόγου συνεδρίας βρίσκεται ακριβώς έξω από τη ρίζα ιστού (δηλ. Τον ίδιο κατάλογο στον οποίο βρίσκεται το public_html). Μια άλλη ασφαλής τοποθεσία είναι να δημιουργήσετε τον κατάλογο στον κατάλογο PHP στο “/ var / lib”. Η διαδρομή εξαρτάται από το λειτουργικό σύστημα, δηλαδή “/ var / lib / php” ή “/ var / lib / php5”. Εάν ισχύουν περιορισμοί open_basedir, βεβαιωθείτε ότι η διαδρομή αποθήκευσης περιόδου σύνδεσης περιλαμβάνεται στη λίστα επιτρεπόμενων open_basedir.

session.hash_function = sha512

Το SHA-512 είναι ένας πιο ασφαλής αλγόριθμος κατακερματισμού για τη δημιουργία αναγνωριστικών περιόδου λειτουργίας σε σύγκριση με την προεπιλεγμένη λειτουργία κατακερματισμού MD5. Αυτός ο αλγόριθμος είναι διαθέσιμος στην έκδοση PHP 5.3+. Εάν χρησιμοποιείτε μια χαμηλότερη έκδοση της PHP, χρησιμοποιήστε τον αλγόριθμο κατακερματισμού SHA1. Για να το κάνετε αυτό, ορίστε “session.hash_function = 1”.

session.bug_compat_42 = 0
session.bug_compat_warn = 0

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

Απενεργοποίηση ευπαθών λειτουργιών

disable_functions = ini_set, php_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace, tmpfile, link, ign_user_abord, shell_exec, dl, set_time_limit, exec, system, highlight_file, source, show_source, fpaththruct, pos_did posix_geteuid, posix_getgid, posix_getgrgid, posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, POSIX, _getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit, posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times, posix_ttyname, posix_uname, proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, phpinfo, popen, curl_exec, curl_multi_exec, parse_ini_file, allow_url_fopen, allow_url_inc, chlpp, chlp,

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

Σαπούνι Cache

soap.wsdl_cache_dir = / var / lib / php / soap_cache

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

Επανεκκινήστε την PHP

Αφού κάνετε αλλαγές στο αρχείο php.ini, θα χρειαστεί να κάνετε επανεκκίνηση του διακομιστή ιστού. Το WHM παρέχει ένα κουμπί για επανεκκίνηση του διακομιστή μετά την επεξεργασία του αρχείου. Εάν δεν χρησιμοποιείτε έναν πίνακα ελέγχου όπως το WHM, θα χρειαστεί να κάνετε επανεκκίνηση του διακομιστή σας μέσω της γραμμής εντολών. Για το Apache, εισαγάγετε την εντολή “sudo apachectl graceful” και πατήστε Enter.

συμπέρασμα

Με την ενημέρωση αυτών των ρυθμίσεων, το περιβάλλον PHP σας παραμένει ακόμη πιο προστατευμένο από τις προσπάθειες εισβολής. Η προστασία του περιβάλλοντος PHP σας από χάκερ είναι ένα σημαντικό βήμα για την προστασία της φήμης της επιχείρησής σας. Λάβετε υπόψη, ωστόσο, ότι μια κακώς κωδικοποιημένη εφαρμογή είναι πάντα ανοιχτή πόρτα για hacks, ακόμη και με μια σκληρή διαμόρφωση PHP. Ξεκινήστε διατηρώντας τη διαμόρφωσή σας πιο σκληρή και από εκεί πάντα γράψτε ασφαλή κωδικό εφαρμογής.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me