2016-08-17 1 views
5

Kürzlich habe ich alle Stellen in meinem Code geändert, an denen Passwörter von String in eine neue Password Klasse verarbeitet wurden. Die Methode druckt jetzt nur [********]. Wenn ich das Passwort bekommen möchte, muss ich Password.getPassword() anrufen. Auf diese Weise kann ich sicher sein, dass kein Passwort versehentlich in Protokolldateien geschrieben wird.So finden Sie implizite Verwendungen der toString() - Methode für bestimmte Typen

Während der Änderung vermisste ich ein paar Zeilen zu ändern, die wie folgt aussehen:

String.format("user:%s", password); 

Vor meinem Wechsel password vom Typ war String, so war es wie gewünscht formatiert. Aber nach meiner Änderung wurde password als [*******] gerendert. Genau das habe ich beabsichtigt. Aber jetzt möchte ich alle diese Orte automatisch finden.

Ich versuchte findbugs mit dem fb-contrib Plugin (ITU_INAPPROPRIATE_TOSTRING_USE), aber es die impliziten Verwendung von Password.toString() innerhalb String.format nicht() zu finden.

Kennt jemand ein anderes findbugs contrib-Projekt oder irgendeinen anderen statischen Code-Analysator, der diese Codestellen finden könnte?

Antwort

0

ITU findet nur Verwendung von toString(), die verwendet wird, in denen Sie den Wert des Inhalts ableiten, sagen Sie, wenn Sie es für einen Wert analysieren, oder verwenden Sie es, um eine andere Zeichenfolge aufzubauen. Der Detektor ist dafür da, um Sie wissen zu lassen, dass Sie sich in vielen Fällen nicht auf den Inhalt von toString() verlassen sollten, da er als "Debugging" -Ausgabe betrachtet werden sollte. (wie Sie hier sehen).

Es gäbe einen Weg zu vielen Fehlalarmen, nur um nach Verwendungen von toString() zu suchen, die immer gültig sind.

Und nein, kenne keine Detektoren, obwohl es ziemlich trivial wäre, einen zu schreiben.

Verwandte Themen