Como limpar (substituir com bytes aleatórios) std :: string buffer interno?
Considere um cenário em questd::string
é usado para armazenarum segredo. Uma vez consumido e não seja mais necessário, seria bom limpá-lo, ou seja, substituir a memória que o continha, ocultando assim osegredo.
std::string
fornece uma funçãoconst char* data()
retornando um ponteiro para (desde C ++ 11) memória contínua.
Agora, desde que a memória é contínuae a variável será destruída logo após a limpeza devido ao final do escopo, seria seguro:
char* modifiable = const_cast<char*>(secretString.data());
OpenSSL_cleanse(modifiable, secretString.size());
De acordo com o padrão citado aqui:
$ 5.2.11 / 7 - Nota: Dependendo do tipo do objeto, uma operação de gravação através do ponteiro, lvalue ou ponteiro para o membro de dados resultante de umconst_cast
que lança fora umconst-qualifier
68 pode produzir um comportamento indefinido (7.1.5.1).
Isso aconselharia o contrário, mas as condições acima (contínuas, a serem removidas apenas) a tornam segura?