Wie wird der interne Puffer von std :: string bereinigt (mit zufälligen Bytes überschrieben)?
Betrachten Sie ein Szenario, in demstd::string
wird zum Speichern von @ verwendein Geheimni. Sobald es verbraucht ist und nicht mehr benötigt wird, ist es gut, es zu bereinigen, d. H. Den darin enthaltenen Speicher zu überschreiben und so das @ zu verbergeGeheimni.
std::string
liefert eine Funktionconst char* data()
Rückgabe eines Zeigers auf (seit C ++ 11) kontinuierlichen Speicher.
Nun, da der Speicher kontinuierlich istun Die Variable wird unmittelbar nach der Bereinigung aufgrund des Endes des Gültigkeitsbereichs zerstört. Wäre es sicher,
char* modifiable = const_cast<char*>(secretString.data());
OpenSSL_cleanse(modifiable, secretString.size());
Nach hier zitiertem Standard:
$ 5.2.11 / 7 - Hinweis: Je nach Objekttyp eine Schreiboperation durch den Zeiger, den Wert oder den Zeiger auf ein Datenelement, die aus einem @ resultierconst_cast
das wirft ein @ wconst-qualifier
68 kann undefiniertes Verhalten erzeugen (7.1.5.1).
Das würde anders raten, aber machen die oben genannten Bedingungen (fortlaufend, nur zu entfernen) es sicher?