2012-02-27 11 views
0

Je stocke actuellement le mot de passe de l'utilisateur dans un SecureString. Ce qui est également gardé dans le cas où la connexion à la base de données se réinitialise.Oracle DB et SecureString

Mon problème est, j'essaye de passer ce mot de passe à un OracleParamater, mais je ne suis pas sûr s'il le soutient ou pas.

La DLL Oracle.DataAccess d'Oracle prend-elle en charge SecureString ou BStr? Depuis Si je dois le convertir en une chaîne alors cela serait un peu vaincre le but de SecureString.

--- EDIT

Je sais que SecureString est de réduire la surface d'attaque en gardant comme quelques exemplaires du mot de passe non crypté autour que possible. Le problème est qu'à un certain moment vous devez déchiffrer le mot de passe pour l'utiliser. Si je pouvais passer un char[] ou un BStr ou la chaîne sécurisée elle-même dans un OracleParameter alors je pourrais l'effacer après le retour de l'appel. Mais si je dois créer une chaîne pour la transmettre à Oracle, alors je viens de créer une nouvelle copie immuable du mot de passe. Donc je ne suis pas vraiment sûr d'avoir beaucoup gagné alors.

+2

SecureString est un -memory "concept ... ADO.NET n'a rien à voir avec ça ... SI vous êtes préoccupé par la sécurité" sur le fil "puis utilisez une connexion cryptée et/ou une approche basée sur des certificats ... – Yahia

+0

Je ne suis pas s'est inquiété de la sécurité "sur le fil" et ce n'était pas l'intention de la question. Je vais ajouter la question pour clarifier – Phyx

+0

ok ... c'est plus clair maintenant ... voir ma réponse ci-dessous ... – Yahia

Répondre

1

Non - autant que je sache ce que vous demandez est pas pris en charge ...

mais même si elle était soutenu la question de la sécurité demeureraient puisque le pilote Oracle utilisé (OCI) est originaire et ne sait rien de SecureString ainsi va gérer la valeur en interne sans cryptage qui à son tour signifie que cette valeur peut finir par non chiffré dans le fichier d'échange par exemple ...

Il serait un peu plus sûr si ce que vous demandez étaient pris en charge sur le côté .NET de choses mais simplement si ...

SI vous avez vraiment besoin de ce niveau de sécurité, je wo uld recommande de redéfinir cette partie de votre logiciel pour utiliser des valeurs cryptées de telle sorte que le côté serveur (Oracle DB) n'exige pas de "texte brut" mais fonctionne avec les valeurs cryptées ...

+0

J'avais peur de cela.Je n'ai pas vraiment besoin de ce niveau de sécurité, mais je me suis dit précisément parce que le pilote Oracle est natif, il utilise probablement un (w_) char * pour les chaînes.Je pourrais encore zéro que si cela prendrait la chaîne non managée comme entrée.Mais c'est dommage que presque aucune API ne supporte SecureString.Merci de confirmer cependant. – Phyx

0

SecureString est un détenteur en mémoire de vos informations privées. La raison pour laquelle il a été implémenté est que si vous utilisez string simple pour conserver des informations d'utilisateur privé, même après que vous ne fassiez plus référence à cet objet et qu'il ait déjà été collecté, il est possible que le code pirate soit exécuté mémoire de processus peut toujours accéder à une donnée disponible dans cet emplacement de mémoire, donc accéder aux informations privées.

Dans le cas de SecureString, à la place, cet emplacement sera effacé de sorte que même sur le vidage de la mémoire, vous ne verrez rien en rapport avec la chaîne utilisée dans votre code.

Comme suggéré par Yahia, si vous préoccupé par la sécurité de connexion ou sécurité Transmisson de données, utilisez une connexion sécurisée à cette fin.

+0

Ce n'est pas du tout une question de sécurité de connexion. Je suis tout à fait conscient que c'est un sujet différent. Je fais référence à la sécurité en mémoire ici.Je sais que SecureString consiste à réduire la surface d'attaque. Mais si je dois convertir SecureString en une chaîne pour me connecter à Oracle, alors je viens d'exposer le mot de passe en clair sous forme de chaîne. Sur lequel je n'ai plus aucun contrôle en termes de collecte de garbage – Phyx

+0

@Phyx: bien, si vous vous souciez de la sécurité en mémoire, en utilisant SecureString vous déjà à un bon point. – Tigran

+1

@Phyx: peut-être que je n'ai pas compris votre problème ** réel **. Le fait est qu'au moment où vous convertissez SecureString en String, vous perdez tout bénéfice de la protection. Donc le code devient non protégé. J'espère que cela t'aides. – Tigran