Si j'ai bien compris, il s'agit de garder le texte brut hors de la mémoire, afin que l'application soit sécurisée contre les attaques ésotériques sur la mémoire, le tas d'ordures, ou la mémoire paginée sur le disque. La SecureString est alimentée en octets non gérés et consommée un octet non géré à la fois - puis la chaîne est effacée de la mémoire. (Corrigez-moi si je me trompe !)
En ASP.NET, le secret est collecté dans un formulaire web, qui renvoie un message en HTTPS. Mais ensuite, l'objet Request transforme toutes les valeurs de requête du formulaire en paires nom-valeur et les place dans une collection, par exemple Request["TxtPassword"]-- donc avant même que je puisse obtenir la chaîne, elle a déjà été écrite de manière non sécurisée en mémoire. Pire, si j'utilisais un contrôle, alors la représentation non sécurisée aura plus de chaînes gérées dans la propriété du TextBox.
Pour faire quoi que ce soit avec cette SecureString, j'ai besoin d'une API qui accepte les chaînes non gérées. Il semble donc que je ne puisse pas utiliser la chaîne sécurisée pour un paramètre de proc stocké ou pour autre chose.
Est-ce que je m'y prends mal ou est-ce que c'est une erreur d'essayer d'utiliser SecureString sans faire fuir des copies de la chaîne non sécurisée dans la mémoire gérée ?
Passer à OAuth ou Windows auth n'est pas une option.