0

J'ai une application ASP.NET Core 2.0 WebAPI qui a Db ConnectionString dans appSettings.json. Alors que dans le développement, il a cette valeur:ASP.NET Core appSettings.json sécurité

"DefaultConnection": "Serveur = localhost; Base de données = Tyroll; Trusted_Connection = True; MultipleActiveResultSets = true"

et que lorsque nous publions à la production nous modifions cela avec des mots de passe appropriés, en utilisant le profil de publication VS 2017. Par conséquent, les mots de passe du serveur SQL pour ne sont pas stockés dans le référentiel et ne posent aucun problème à cet endroit.

Le fichier est appsettings.json protected by IIS
La question que je me demande ce mot de passe est devrait être en quelque sorte « caché » même sur IIS?
L'une des raisons étant la sécurité supplémentaire, de sorte que les informations d'identification SQL ne sont pas en texte brut en cas de violation ici. Autre pour un scénario d'autorisation dans lequel l'administrateur IIS ne doit pas avoir directement accès au serveur SQL. Je pense qu'il pourrait être crypté et l'application elle-même aura la clé pour le décrypter. Cela ne serait pas sûr à 100% puisque dans le cas d'une violation sur IIS, même cette clé pourrait être inversée à partir de l'application, mais cela rendrait la tâche plus difficile alors qu'elle est là en texte brut.

Donc, la première question est que je devrais faire cela du tout?

Et deuxièmement, si 1.Q est Oui, quelle serait la meilleure façon de le faire?

Y a-t-il un outil intégré pour cela dans .NetCore2 ou VS2017 ou IIS, ou un autre outil?

Voici quelques liens connexes:

Répondre

0

Je suggère que vous devriez utilisateur Active Directory sécurité intégrée pour accéder à la base de données , l'App Pool peut s'exécuter sous le compte d'utilisateur et ce compte d'utilisateur particulier aura seulement l'accès requis à la base de données. Cela protège les informations d'identification de l'utilisateur en cas d'attaque puisque le mot de passe n'est jamais exposé.

+0

Ce n'est pas une option dans mon cas, car SQL Server n'est pas dans le même domaine, il est dans le [DMZ] (https://security.stackexchange.com/questions/3667/what-is-the-real- function-and-use-of-a-dmz-on-a-network) – borisdj

+0

Vous voulez dire que SQL Server est en DMZ ..Il doit être un serveur d'hébergement de base de données publique..Elle ne devrait pas être en DMZ –

+0

Oui Le serveur SQL est dans DMZ, donc IIS est dans un autre domaine. Ce n'est pas un hébergement public, il est privé, et seules les applications de notre ISS avec les informations d'identification de l'utilisateur (UserName et mot de passe) peuvent y accéder. – borisdj

1

Solution I est mise en œuvre rend le cryptage personnalisé de Mot de passe dans ConnectionString.
Mais puisque l'App a besoin de le décrypter, c'est plus une Obfuscation.
Pour le cryptage Je l'ai utilisé AES(en utilisant System.Security.Cryptography) et la clé est stockée: la moitié en elle-même connectionString et l'autre moitié dans la demande Hardcoded.
En outre regex a été utilisé pour extraire le mot de passe de ConnectionString, puis a été remplacé par une chaîne décryptée de celui-ci.