Ασφάλεια στη Java
Η Java επιτρέπει τη μεταφορά εκτελέσιμου περιεχομένου και την εκτέλεσή
του σε οποιαδήποτε αρχιτεκτονική και λειτουργικό σύστημα έχει υλοποιηθεί
η ιδεατή μηχανή Java (Java virtual machine).
Οι περισσότεροι εξυπηρετητές υποστηρίζουν την μεταφορά και εκτέλεση προγραμμάτων
Java μέσα από τον ιστό με τη χρήση της ετικέτας της HTML applet.
Τέτοια προγράμματα περιέχουν ανέμπιστο (untrusted)
κώδικα.
Για την προστασία του χρήστη και του μηχανήματος ο ανέμπιστος κώδικας
ελέγχεται ως προς την ορθότητά του και
εκτελείται σε ένα περιβάλλον περιορισμένων δυνατοτήτων,
το σκάμμα (sandbox).
Οι περιορισμοί προγραμμάτων που εκτελούνται στο σκάμμα εξαρτώνται από
την πολιτική ασφάλειας που έχει οριστεί.
Μια τυπική πολιτική ασφάλειας περιέχει τους παρακάτω περιορισμούς:
- Ανάγνωση τοπικών αρχείων
- Εγγραφή τοπικών αρχείων
- Διαγραφή τοπικών αρχείων
- Αλλαγή ονόματος τοπικών αρχείων
- Δημιουργία τοπικού καταλόγου του τοπικού συστήματος
- Ανάγνωση στοιχείων καταλόγου του τοπικού συστήματος
- Έλεγχος για την ύπαρξη αρχείου
- Ανάγνωση στοιχείων ενός αρχείου
- Σύνδεση μέσω δικτύου με μηχάνημα άλλο από αυτό από το οποίο φορτώθηκε το πρόγραμμα
- Αναμονή για σύνδεση από το δίκτυο
- Δημιουργία παραθύρου με άσχετο όνομα
- Απόκτηση του ονόματος και του καταλόγου του χρήστη
- Αλλαγή των ιδιοτήτων του συστήματος
- Έξοδος από το διερμηνευτή της Java
- Φόρτωμα δυναμικών βιβλιοθηκών
- Δημιουργία νημάτων έξω από το ThreadGroup
- Δημιουργία ClassLoader
- Δημιουργία SecurityManager
- Δημιουργία κλάσεων που υπάρχουν στο σύστημα
Ο έλεγχος του κώδικα διασφαλίζει τις παρακάτω ιδιότητες:
- Το εκτελέσιμο αρχείο της κλάσης έχει την ορθή μορφή.
- Αποκλείεται η υπερχείλιση ή υπερχείλιση της στοίβας των παραμέτρων.
- Οι εντολές bytecode καλούνται με το σωστό τύπο.
- Δεν υπάρχουν απαγορευμένες μετατροπές μεταξύ τύπων (π.χ. Internet και Pointer)
- Δεν υπάρχει μη εξουσιοδοτημένη πρόσβαση (μέσω private, public, protected).
- Η κάθε πρόσβαση στους καταχωρητές είναι νόμιμη.
Στο JDK 1.1 υπάρχει η δυνατότητα φορτώματος μιας έμπιστης εφαρμογής
από το δίκτυο αν αυτή έχει την κατάλληλη ψηφιακή υπογραφή.
Τα προβλήματα ασφάλειας στην περίπτωση αυτή είναι παρόμοια με αυτά
της τεχνολογίας ActiveX.
Στην Java 2 υπάρχει δυνατότητα ορισμού διαφορετικής πολιτικής ασφάλειας
ανάλογα με την υπογραφή μιας εφαρμογής.
Ορισμένα προβλήματα ασφάλειας που δημιουργούνται από τη χρήση της Java είναι τα
εξής:
- Προβλήματα από λανθασμένη υλοποίηση της Java
(π.χ. των ελέγχων στο σύστημα των τύπων)
- Χρήση λανθασμένης πολιτικής ασφάλειας