Warum ist meine Zeichenfolge in meiner iOS-Anwendung möglicherweise nicht sicher?

8

Ich initialisiere eine veränderbare Zeichenkette und logge sie dann wie folgt ein.

%Vor%

Der Code funktioniert und läuft, aber ich bekomme eine seltsame Warnung (in gelb):

%Vor%

Warum?

    
Justin Copeland 01.04.2012, 02:05
quelle

3 Antworten

10

Nun, es gibt ein paar Probleme hier.

Der erste (und nicht der, nach dem Sie gefragt haben) ist, dass Sie einen neuen NSMutableString zuweisen und ihn dann einfach in der zweiten Zeile wegwerfen, wenn Sie ihn auf someTextFieldIbOutlet.text setzen. Außerdem wandeln Sie eine nicht veränderbare Zeichenfolge in eine veränderbare Zeichenfolge um, die nicht wirklich funktioniert. Kombinieren Sie stattdessen die ersten beiden Zeilen wie folgt:

%Vor%

Der tatsächliche Fehler, den Sie bekommen, wird verursacht, weil das erste Argument für NSLog die "Format" Zeichenkette sein soll, die NSLog mitteilt, wie Sie die Daten formatieren wollen, die in späteren Argumenten folgen. Dies sollte eine literale Zeichenkette sein (erstellt wie @"this is a literal string" ), so dass sie nicht dazu verwendet werden kann, Ihr Programm auszunutzen, indem Sie Änderungen daran vornehmen.

Verwenden Sie stattdessen Folgendes:

%Vor%

In diesem Fall lautet die Formatzeichenfolge @"%@" , was bedeutet "Erstellen Sie ein NSString -Objekt auf %@ ". %@ bedeutet, dass das nächste Argument ein Objekt ist und dass %@ durch die Beschreibung des Objekts (in diesem Fall den Wert der Zeichenfolge) ersetzt wird.

    
lnafziger 01.04.2012, 02:12
quelle
6

Wenn mStr auf etwas wie %@ gesetzt wurde, würde NSLog versuchen, ein Objektargument zu laden, fehlzuschlagen und wahrscheinlich schlecht abzustürzen. Es gibt andere Formatzeichenfolgen, die auch Chaos verursachen können.

Wenn Sie nur eine Zeichenfolge ohne Markentext protokollieren müssen, verwenden Sie:

%Vor%     
duskwuff 01.04.2012 02:09
quelle
6

Die mStr , die Sie übergeben, wird zum Formatieren verwendet. Wenn diese Zeichenfolge von einer nicht vertrauenswürdigen Quelle stammt, kann sie verwendet werden, um Ihr Programm auszunutzen , wenn ein Angreifer einige Eingaben korrekt liefert geschrieben.

Sie sollten Ihren Code ändern zu:

%Vor%

Auf diese Weise kann der Inhalt eines beliebigen Benutzers in mStr nicht von einem Angreifer für die Ausnutzung des Programms verwendet werden.

Dies ist ein ernstes Sicherheitsproblem; Von meinem lokalen Archiv der CVE-Datenbank habe ich zwischen 1999 und Anfang 2012 520 Instanzen von Format-String-Schwachstellen gezählt.

>     
sarnold 01.04.2012 02:14
quelle

Tags und Links