2009-09-03 13 views
5

Ho creato un'applicazione Web ospitata su Godaddy su un server condiviso. Ho intenzione di usare paypal per le mie transazioni, il che crea un problema.Memorizzazione delle credenziali PayPal in un'applicazione Web (asp.net) su un host condiviso

A questo punto le credenziali (email paypal e password) sono hardcoded, che è per quanto ho capito la soluzione peggiore. L'unica altra opzione di cui sono a conoscenza è nel file web.config, che di nuovo non sembra particolarmente sicuro.

Potete indicarmi una direzione che fornisca la sicurezza desiderata e funzioni in un ambiente host condiviso?

saluti Alexandros

risposta

2

su un host condiviso, il metodo più semplice, almeno a prima vista potrebbe essere quella di crittografare la password e conservarla nel database.

L'implementazione può essere eseguita indipendentemente dal meccanismo di crittografia. Quindi, da un punto di vista chiave, hai una serie di opzioni per la memorizzazione, con vari livelli di sicurezza, in realtà dipende da come "paranoico" sei con questo.

  1. È sufficiente memorizzare la chiave di crittografia nel web.config come impostazione App (meno sicuro, ma l'accesso al web.config è limitato e altre cose sensibili è già lì, come ad esempio DB password)
  2. Crea una sezione di configurazione personalizzata per web.confg, quindi crittografare e memorizzare i valori lì. (Questo è più sicuro, dato che la chiave non è leggibile tramite testo normale)
  3. Memorizza la chiave di crittografia in una tabella di database e limita la tabella in cui si richiede solo un acconto per utente singolo. (Dipende dai tuoi pensieri, questa potrebbe essere la soluzione più portatile però ..)
+0

Come si conserva la chiave in un modo che consente all'applicazione di utilizzare la password senza lasciare la chiave in una posizione insicura ? – Tyrsius

+0

Ci sono alcune opzioni per questo .... è possibile utilizzare la chiave presente in web.config (MachineKey), oppure creare la propria chiave e inserirla in un'opzione web.config crittografata. –

+0

@Tyrsius - Ho aggiunto anche alcuni dettagli con le opzioni solo per darti dei pensieri. –

0

È possibile archiviarli in web.config e quindi crittografare il file web.config?

O almeno, crittografarli singolarmente nel web.config?

0

Penso che tu abbia le seguenti opzioni.

  1. file web.config Encrypt

  2. Conservare in database utilizzando la crittografia

  3. Creare una libreria di classi e di creare una classe che conterrà queste informazioni. Ora nell'ambiente condiviso , verrà aggiunto come dll nella cartella Bin.

+0

1. So che si può fare. non sono sicuro che possa essere fatto in host condivisi. 2 e 3. andare sotto il problema della decompilazione. sono paranoico? –

+0

Uno dei miei preferiti: quello che fa un uomo, l'altro può annullare. No mather quello che fai. Se qualcuno si sforza di farlo, può annullarlo. E ora che sei più paranoico di prima, stai calmo e pensa: le mie informazioni sono così allettanti per l'attenzione dei cracker? In caso contrario, basta crittografare le informazioni nel web.config. – rcdmk

3

Le scelte sono: la password

  1. API + firma API. Avrai il per memorizzarlo da qualche parte come testo in chiaro o qualcosa di decifrabile, forse è essere file o database.

  2. password API + certificato API. È necessario verificare se il provider di servizi di hosting consente agli utenti di di stabilire connessioni SSL a altri server (ad esempio CURLOPT_SSLCERT in PHP). Se è possibile, utilizzare esso.

Tuttavia, a prescindere dal modo in cui si sceglie, se un hacker può entrare nel vostro conto, lui/lei sarà in grado di recuperare la password, o il file cert.

p.s. si noti che i termini "password API", "firma API" e "certificato API" sono quelli a cui fanno riferimento nei riferimenti API PayPal e nei manuali per sviluppatori.

+0

Testo fisso e 'firma' rimossa dalla seconda opzione, in quanto un certificato API non ha una firma API e viceversa. – Robert

+0

@Robert Grazie per la modifica. :) – shinkou

0

Poiché non si ha accesso al server, è necessario eseguire il comando per crittografare le sezioni del proprio web.config tramite codice. È possibile farlo creando una semplice pagina Web ed eseguendola al caricamento della pagina o facendo clic sul pulsante. Di seguito è riportato il blocco di codice che dovrai eseguire, modificato solo leggermente dalla sorgente che ho preso da Microsoft (http://msdn.microsoft.com/en-us/library/system.configuration.sectioninformation.protectsection.aspx). Anche se ... questo codice in realtà non ha funzionato per me. Non che il codice non sia corretto, ma poiché il mio account non dispone dell'autorizzazione all'archivio chiavi Rsa, i risultati potrebbero variare. Se questo non funziona allora continuate a leggere per l'opzione 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) 

credito: ho trovato che legame con il codice tramite Need Encrypted connection string and stmp information in the web.config.

Opzione 2: per motivi di sicurezza, si desidera comunque utilizzare il codice macchina in modo che se qualcuno riesce a scaricare il file web.config non sarà in grado di decodificare le impostazioni. Un modo per farlo è quello di crittografare tutte le impostazioni usando la chiave della macchina a mano e decrittografarle ogni volta che è necessario utilizzarle, oppure è possibile memorizzarle nella cache all'avvio di ogni app.

Per criptato e decifrare un valore chiave di applicazione che potrebbe usare codice come questo:

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

Non ero in grado di far funzionare il primo metodo (tradurre il codice in C#), ho riscontrato errori diversi con approcci diversi. Il secondo metodo sembra che si basa sul fatto che la macchina host non cambi. Con un host condiviso, non è un'assunzione pericolosa? – Tyrsius

+0

Sei l'unica risposta nuova in una settimana, sembra che tu abbia la taglia di default. – Tyrsius

+0

@Tyrsius - Un po 'tardi, ma non devi dare una taglia se nessuno soddisfa le tue aspettative. Torna alla domanda: se si suppone che il computer host possa essere modificato, è necessario memorizzare una chiave di crittografia in una chiave accessibile, come un'altra impostazione di app. Stavo cercando di evitarlo perché significa che se in qualche modo qualcuno riesce a scaricare il tuo web.config, sarebbe in grado di utilizzare la chiave per decifrare le tue informazioni PayPal. Perché non contatti il ​​tuo host web e chiedi loro se cambierai host o meno; forse non è niente di cui devi nemmeno preoccuparti. – Peter