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?

Antworten auf die Frage(12)

Ihre Antwort auf die Frage