2013-04-19 12 views
6

Sto lavorando su una piattaforma di e-commerce legacy e ho notato una convenzione quando si trattava di numeri di carte di credito. C#Sovrascrivi quindi impostato su null

cardnumber = "11111111111111111111"; 
cardnumber = null; 

o in SQL

update cards set cardnumber = '11111111111111111111' where customerid = @CustomerID 
update cards set cardnumber = null where customerid = @CustomerID 

Presumo il ragionamento è per rimuoverlo dalla memoria prima di impostarlo su null che non può rimuovere il valore. Ma quel ragionamento sembrerebbe suggerire che SQL Server e/o .NET VM avevano delle vulnerabilità in cui semplicemente impostarlo su null non rimuoveva completamente i dati, basta dire che è disponibile.

  1. La mia comprensione è corretta?
  2. Ha ancora bisogno di essere eseguito oggi?
+4

FYI il [SecureString] (http://msdn.microsoft.com/en-us/library/system.security.securestring.aspx) la classe esiste ora. Potrebbe essere di interesse. –

+0

C'è un trigger su quel tavolo? – Steve

+0

@Steve nessun innesco sul tavolo. – tgandrews

risposta

4

Non so per SQL, ma in C#, non ha senso. Poiché la stringa non è modificabile, non è possibile ignorare i dati, anche se si tenta il più possibile.

Quando si scrive

cardnumber = "11111111111111111111"; 

Questo solo crea un'altra stringa in memoria, ma il vecchio numero di carta è ancora qui, da qualche parte nella memoria.

E quando si scrive

cardnumber = null; 

E dereferenziare la stringa creata in precedenza, e ora avete un riferimento cardnumber che punta sul nulla. Ma la tua stringa contenente il numero reale della carta è ancora qui.
Quindi questo codice non è solo sbagliato, è pericoloso perché ti dà un falso senso di sicurezza.

Date un'occhiata a quello che ha detto il MSDN sulla pagina SecureString condivisa da George Duckett nei commenti:

Un'istanza della classe System.String è sia immutabile e, quando non più necessario, non può essere programmaticamente programmata per la raccolta di immondizia ; ovvero, l'istanza è di sola lettura dopo la sua creazione e non è possibile prevedere quando l'istanza verrà eliminata dalla memoria del computer . Di conseguenza, se un oggetto String contiene informazioni sensibili come password, numero di carta di credito o dati personali, c'è il rischio che le informazioni possano essere rivelate dopo l'uso perché l'applicazione non può eliminare i dati dalla memoria del computer.

Approfondimenti: