Βίντεο: Υπηρεσία μεταφοράς αρχείων (FTP, TFTP) 2024
Είναι αρκετά συνηθισμένο για εφαρμογές ιστού να επιτρέπουν στους χρήστες να ανεβάζουν αρχεία για έναν ή άλλο λόγο. Πρέπει να διασφαλίσετε ότι αυτές οι μεταφορτώσεις είναι ασφαλείς. Για παράδειγμα, μερικοί πίνακες μηνυμάτων επιτρέπουν στους χρήστες να ανεβάζουν μικρές εικόνες ή είδωλα που εμφανίζονται δίπλα σε κάθε θέση του χρήστη. Άλλες εφαρμογές σας επιτρέπουν να ανεβάσετε αρχεία δεδομένων για ανάλυση.
Μπορείτε να χρησιμοποιήσετε την ενσωματωμένη λειτουργία fopen () της PHP, η οποία ανοίγει αυτόματα μια ροή σε ένα αρχείο ή μια διεύθυνση URL που επιτρέπει στους χρήστες να φορτώνουν αρχεία. Δυστυχώς, αυτή η μέθοδος είναι ώριμη για εκμετάλλευση από κακόβουλους χρήστες που μπορούν να την χρησιμοποιήσουν για να φορτώσουν αρχεία από απομακρυσμένους διακομιστές στον web server σας.
Η πρόληψη αυτού του τύπου εκμετάλλευσης απαιτεί να απενεργοποιήσετε δύο ρυθμίσεις στο php. ini: register_globals και url_fopen. Η απενεργοποίηση αυτών των ρυθμίσεων αποτρέπει τους χρήστες από τη χρήση της ενσωματωμένης μεταφόρτωσης αρχείων της PHP χωρίς να επιτρέπετε ρητά τη λειτουργία αυτή.
Αφού απενεργοποιήσετε αυτές τις δύο λειτουργίες στο php. ini, πρέπει να επιτρέψετε στους χρήστες να φορτώσουν αρχεία. Χρησιμοποιήστε τη συνάρτηση FTP της PHP, μια πολύ πιο ασφαλή μέθοδο από την fopen (), για να επιτρέψετε στους χρήστες να φορτώσουν αρχεία.
Μπορείτε να χρησιμοποιήσετε τις λειτουργίες FTP αρκετά διαισθητικά. Κατ 'αρχάς, δημιουργείτε μια σύνδεση, στη συνέχεια ανεβάζετε τα αρχεία που χρειάζεστε και, τέλος, κλείνετε τη σύνδεση. Εδώ είναι οι πιο συνηθισμένες λειτουργίες FTP και τα επιχειρήματά τους:
ftp_connect (συμβολοσειρά $ host [int $ port [int $ timeout]])
-
: < Συνδεθείτε στο διακομιστή FTP - σε αυτή την περίπτωση, στον κεντρικό υπολογιστή σας. :
Στείλτε τα διαπιστευτήρια σύνδεσης στο διακομιστή FTP. -
ftp_put (resource $ ftp_stream, string $ remote_file, string $ local_file, int $ mode [int $ startpos]) : Βάλτε ένα αρχείο από το τοπικό μηχάνημα στο διακομιστή.
-
ftp_get (resource $ ftp_stream, string $ local_file, string $ remote_file, int $ mode [int $ resumepos]) : Αποκτήστε ένα αρχείο από το διακομιστή και στείλτε το σε ένα τοπικό μηχάνημα.
-
ftp_close (resource $ ftp_stream) : Κλείστε τη σύνδεση με το διακομιστή.
-
Πρέπει να κλείσετε τη ροή FTP μόλις τελειώσετε με αυτήν. διαφορετικά, έχετε μια ανοιχτή σύνδεση που είναι ευάλωτη σε αεροπειρατεία.