Sollen Speicher in NSString sicher gelöscht werden

8

Bei iOS habe ich mich gefragt, ob ich den vom Benutzer angegebenen Passwort-Wert lesen kann:

%Vor%

Ich mag es einfach nicht, sensible Daten im RAM baumeln zu lassen. Irgendeine Idee, wie man es ausschließt?

    
wolfrevokcats 12.01.2013, 18:01
quelle

2 Antworten

9

Grundsätzlich kann man das wirklich nicht. Es gibt Fehler, die Apple bei genau diesem Problem eingereicht hat. Zusätzlich gibt es Probleme mit UITextField und NSString bei einem Minimum.

Um den Kommentar in einer jetzt gelöschten Antwort von @Leo Natan zu wiederholen:

  

Durch das Freigeben des umschließenden NSString-Objekts wird die Zeichenfolge nicht garantiert   Bytes sind Nullen im Speicher. Auch wenn ein Gerät jailbroken ist, alle   Sandboxing Apple Versprechungen werden nichts nützen. In diesem Fall   es gibt wenig, was man tun kann, da es möglich ist, das Ganze zu tauschen   Runtime in der Mitte der Anwendung läuft, dies bekommt die   Passwort aus dem Speicher.

Bitte fügen Sie einen weiteren Fehler bei Apple ein, der dies anfordert, je mehr desto besser.

Apple Bug Reporter

    
zaph 12.01.2013, 18:14
quelle
0

Während NSString diese Fähigkeit nicht hat (aus Gründen der Kapselung an anderer Stelle erwähnt), sollte es nicht too sein, dass Ihre App normale alte C-Strings verwendet, die einfach sind Zeiger auf Speicher. Sobald Sie diesen Zeiger haben, ist es ziemlich einfach, Dinge zu beseitigen, wenn Sie fertig sind.

Dies hilft nicht bei benutzerdefinierten Textfeldern (die NSString -s verwenden und wir können sie nicht ändern), aber Sie können sicher alle sensiblen Daten Ihrer App behalten im zeigerbasierten Speicher.

Ich habe nicht damit experimentiert (ich habe kein aktuelles jailbroken Gerät), aber es könnte auch interessant sein, mit NSMutableString zu experimentieren - etwas wie:

%Vor%

HINWEIS: Ich habe keine Ahnung, ob das macht, was Sie wollen; Es ist nur etwas, an das ich beim Eintippen meiner früheren Antwort gedacht habe. Selbst wenn es jetzt funktioniert, denke ich, hängt es von der Implementierung ab, die fragil ist (was bedeutet: in Zukunft zu brechen), sollte also nicht verwendet werden.

Trotzdem, könnte eine interessante Übung sein! :)

    
Olie 01.12.2015 00:48
quelle