22 Stimmen

Verbessert das Java-Schlüsselwort "final" tatsächlich die Sicherheit?

Es gibt zwar viele Gründe für die Verwendung des Schlüsselworts 'final' in Java Eine der Aussagen, die ich immer wieder höre, ist, dass der Code dadurch sicherer wird. Das scheint in diesem trivialen Fall zwar sinnvoll zu sein:

public class Password
{
    public final String passwordHash;
    ...
}

Mit dem letzten Schlüsselwort würde man erwarten, dass kein bösartiger Code in der Lage ist, die Variable passwordHash zu ändern. Allerdings, durch Reflexion ist es möglich, den endgültigen Modifikator für das Feld passwordHash zu ändern.

Bietet "final" also wirklich Sicherheit oder ist es nur ein Placebo?

Editar: Es gibt eine wirklich interessante Diskussion, und ich wünschte, ich könnte mehr als eine Antwort akzeptieren. Vielen Dank an alle für ihre Beiträge.

0 Stimmen

Hier ist eine Verbindung das mehrere (von Oracle geschriebene) Beispiele enthält, die zeigen, wie die endgültig Schlüsselwort kann für Sicherheitszwecke verwendet werden.

3voto

Kevin Punkte 29597

Es macht Ihren Code nicht sicherer, sondern dient eher der Threadsicherheit. Wenn eine Variable als final gekennzeichnet ist, muss ihr bei der Erstellung des Objekts ein Wert zugewiesen werden. Nach der Erstellung des Objekts kann diese Variable nicht mehr auf einen anderen Wert verweisen.

Dieses Verhalten ermöglicht es Ihnen, über den Zustand eines Objekts nachzudenken und bestimmte Annahmen zu treffen, wenn mehrere Threads gleichzeitig auf das Objekt zugreifen.

2voto

danben Punkte 77356

Ich stelle mir vor, was jemand meint, wenn er das sagt final macht Ihren Code sicherer, weil er verhindert, dass künftige Entwickler Werte ändern, die nicht dafür gedacht sind, oder von Klassen erben, die nicht dafür gedacht sind, erweitert zu werden (und dabei unvorhersehbare Ergebnisse verursachen). Es hat nichts (direkt) mit der Authentifizierung zu tun.

2voto

C Johnson Punkte 111

Ich bin mir ziemlich sicher, dass final ein Entwurfskonstrukt ist, ähnlich wie Zugriffsmodifikatoren in einer Klassendeklaration - es ist eine Möglichkeit, den Entwurf auszudrücken und durchzusetzen.

1voto

Sarfraz Punkte 366217

Es geht eher darum, das Material zu "verändern", als es zu "sichern". Mit den letzten Schlüsselwörtern wird einfach die Möglichkeit der Änderung/Änderung/Erweiterung jeder Methode abgeschafft.

1voto

MindStalker Punkte 14435

Final verbessert auch die Leistung/Speicherverwaltung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X