2009-09-03 6 views
5

J'ai créé une application Web hébergée sur Godaddy sur un serveur partagé. Je prévois d'utiliser paypal pour mes transactions, ce qui crée un problème.Stockage des informations d'identification PayPal dans une application Web (asp.net) sur un hôte partagé

À ce stade, les informations d'identification (adresse e-mail paypal et mot de passe) sont codées en dur, ce qui est, d'après ce que je comprends, la pire solution. La seule autre option que je connais est dans le fichier web.config, ce qui ne semble pas particulièrement sûr. Pouvez-vous me diriger vers une direction qui fournirait la sécurité désirée et travaillerait dans un environnement hôte partagé?

Cordialement Alexandros

Répondre

2

sur un hébergement mutualisé, la méthode la plus simple au moins à première vue serait de chiffrer le mot de passe et le stocker dans votre base de données.

La mise en œuvre pourrait être faite avec n'importe quel mécanisme de cryptage. Ensuite, d'un point de vue clé, vous avez un certain nombre d'options pour le stocker, avec différents niveaux de sécurité, dépend vraiment de la façon dont vous êtes "paranoïaque" avec cela.

  1. stocker simplement la clé de chiffrement dans le web.config comme réglage App (moins sécurisé, mais l'accès à la web.config est limitée et d'autres choses sensibles est là déjà, tels que les mots de passe DB)
  2. Créer une section de configuration personnalisée pour le web.confg, puis cryptez et stockez les valeurs à cet endroit. (Ceci est plus sûr, car il devient illisible de lire votre clé)
  3. Stockez la clé de chiffrement dans une table de base de données et limitez cette table à un seul compte d'utilisateur. (Cela dépend de vos pensées, cela pourrait être la solution la plus portable si ..)
+0

Comment conserver la clé d'une manière qui permet à l'application d'utiliser le mot de passe sans laisser la clé dans une position précaire ? – Tyrsius

+0

Il y a quelques options pour cela .... vous pouvez utiliser la clé qui est là dans web.config (MachineKey), ou vous pouvez créer votre propre clé et la mettre dans une option web.config cryptée. –

+0

@Tyrsius - J'ai ajouté quelques détails ainsi que les options juste pour vous donner quelques idées. –

0

Vous pouvez les stocker dans le web.config, puis crypter le fichier web.config? Ou, à tout le moins, les chiffrer individuellement dans le fichier web.config?

0

Je pense que vous avez les options suivantes.

  1. Crypter fichier web.config

  2. magasin dans la base de données en utilisant le cryptage

  3. Créer une bibliothèque de classe et de créer une classe qui contiendra ces informations. Maintenant, sur l'environnement partagé , il sera ajouté comme DLL dans le dossier Bin.

+0

1. Je sais que cela peut être fait. Je ne suis pas sûr que cela puisse être fait dans des hôtes partagés. 2 et 3. passez sous le problème de décompilation. Suis-je paranoïaque? –

+0

Un de mes fras préférés: Ce qu'un homme fait, un autre homme peut défaire. Pas plus que ce que vous faites. Si quelqu'un y met un effort, il peut le défaire. Et maintenant que vous êtes plus paranoïaque qu'avant, restez calme et pensez: Est-ce que mon information est si attrayante pour l'attention des craquelins? Sinon, il suffit de chiffrer les informations dans le fichier web.config. – rcdmk

3

Vos choix sont:

  1. mot de passe API + signature API. Vous aurez pour le stocker quelque part comme ou quelque chose de déchiffrable, peut-être être un fichier ou une base de données.

  2. Mot de passe API + certificat d'API. Vous devrez vérifier si le fournisseur de services d'hébergement permet à ses utilisateurs d'établir des connexions SSL à d'autres serveurs ( CURLOPT_SSLCERT en PHP). Si vous le pouvez, utilisez .

Cependant, quelle que soit la façon dont vous choisissez, si un pirate peut pénétrer dans votre compte, il/elle sera en mesure de récupérer votre mot de passe ou votre fichier cert.

p.s. Veuillez noter que les termes «mot de passe API», «signature API» et «certificat API» sont ceux auxquels ils se réfèrent dans les références de l'API PayPal et dans les manuels des développeurs.

+0

Correction de la formulation et suppression de la 'signature' de la 2ème option, car un certificat API n'a pas de signature API et vice versa. – Robert

+0

@Robert Merci pour le montage. :) – shinkou

0

Étant donné que vous n'avez pas accès au serveur, vous devrez exécuter la commande pour chiffrer les sections de votre fichier web.config à l'aide du code. Vous pouvez le faire en créant une simple page Web et l'exécuter sur le chargement de la page ou sur un clic de bouton. Voici le bloc de code que vous devrez exécuter, légèrement modifié à partir de la source que j'ai prise de Microsoft (http://msdn.microsoft.com/en-us/library/system.configuration.sectioninformation.protectsection.aspx). Bien que ... ce code ne fonctionne pas vraiment pour moi. Non que le code ne soit pas correct, mais parce que mon compte n'a pas d'autorisation dans le magasin de clés Rsa, vos résultats peuvent varier. Si cela ne fonctionne pas lire puis pour l'option 2.

' Get the current configuration file.' 
    Dim config As System.Configuration.Configuration = Web.Configuration.WebConfigurationManager.OpenWebConfiguration(Nothing) 

    ' Get the section.' 
    Dim section As AppSettingsSection = CType(config.GetSection("appSettings"), AppSettingsSection) 

    ' Protect (encrypt) the section.' 
    section.SectionInformation.ProtectSection("RSAProtectedConfigurationProvider") 

    ' Save the encrypted section.' 
    section.SectionInformation.ForceSave = True 
    config.Save(ConfigurationSaveMode.Full) 

Crédit: J'ai trouvé ce lien avec le code via Need Encrypted connection string and stmp information in the web.config.

Option 2: Pour des raisons de sécurité, vous souhaitez toujours utiliser la clé de l'ordinateur. Si quelqu'un parvient à télécharger votre fichier web.config, il ne pourra pas déchiffrer vos paramètres. Une façon de le faire est de chiffrer tous vos paramètres en utilisant la clé de la machine à la main, et décrypter chaque fois que vous avez besoin de les utiliser, ou vous pouvez les stocker dans le cache à chaque démarrage de l'application.

Pour crypté et décrypter une application valeur clé que vous pouvez utiliser le code comme ceci:

Dim encryptedString As String = Convert.ToBase64String(ProtectedData.Protect(System.Text.UTF8Encoding.UTF32.GetBytes("Testing"), Nothing, DataProtectionScope.LocalMachine)) 
    Dim decryptedString As String = System.Text.UTF8Encoding.UTF32.GetString(ProtectedData.Unprotect(Convert.FromBase64String(encryptedString), Nothing, DataProtectionScope.LocalMachine)) 

    Response.Write(encryptedString + " - " + decryptedString) 
+0

Je n'ai pas réussi à faire fonctionner la première méthode (traduire le code en C#), j'ai rencontré différentes erreurs avec quelques approches différentes. La deuxième méthode semble s'appuyer sur la machine d'hébergement ne change pas. Avec un hôte partagé, n'est-ce pas une hypothèse dangereuse? – Tyrsius

+0

Vous êtes la seule nouvelle réponse dans une semaine, on dirait que vous obtenez la prime par défaut. – Tyrsius

+0

@Tyrsius - Un peu en retard, mais vous n'avez pas à donner une prime si personne ne répond à vos attentes. Retour à la question: Si vous faites l'hypothèse que la machine hôte peut changer, vous devrez stocker une clé de cryptage dans une clé accessible, comme une autre appSetting. J'essayais d'éviter cela parce que si quelqu'un réussissait à télécharger votre web.config, il pourrait utiliser la clé pour déchiffrer vos informations PayPal.Pourquoi ne pas contacter votre hébergeur et lui demander si vous allez changer d'hôte ou non? Peut-être que vous n'avez rien à craindre. – Peter

Questions connexes