2013-04-19 14 views
6

Pracuję nad starszą platformą e-commerce i zauważyłem konwencję podczas obsługi numerów kart kredytowych. C#Zastąp, a następnie ustaw na wartość null

cardnumber = "11111111111111111111"; 
cardnumber = null; 

lub w sql

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

Przypuszczam rozumowanie jest usunięcie go z pamięci przed ustawieniem go na null, które nie mogą usunąć tę wartość. Ale to rozumowanie mogłoby sugerować, że SQL Server i/lub .NET VM miały luki w miejscach, gdzie ustawienie go na wartość null nie spowodowałoby całkowitego usunięcia danych, wystarczy powiedzieć, że są one dostępne.

  1. Czy moje rozumienie tego jest prawidłowe?
  2. Czy dzisiaj musi być jeszcze ?
+4

FYI w [SecureString] (http://msdn.microsoft.com/en-us/library/system.security.securestring.aspx Klasa istnieje teraz. Może być interesujący. –

+0

Na tym stole znajduje się wyzwalacz? – Steve

+0

@ Nie ma wyzwalacza na stole. – tgandrews

Odpowiedz

4

Nie wiem dla SQL, ale w C#, to nie ma sensu. Ponieważ ciąg znaków jest niezmienny, nie można przesłonić danych, nawet jeśli spróbujesz tak mocno, jak to tylko możliwe.

Kiedy piszesz

cardnumber = "11111111111111111111"; 

To właśnie tworzy inny ciąg w pamięci, ale stary numer karty wciąż tu jest, gdzieś w pamięci.

A kiedy piszesz

cardnumber = null; 

go wyłuskiwania wcześniej utworzonego łańcucha, a teraz masz odniesienia cardnumber wskazują na nic. Ale twój ciąg zawierający prawdziwy numer karty nadal tu jest.
Ten kod jest nie tylko błędny, ale także niebezpieczny, ponieważ daje fałszywe poczucie bezpieczeństwa.

Spójrz na to, co powiedział na MSDN SecureString stronie udostępnionej przez George Duckett w komentarzach:

Instancja klasy system.string jest zarówno niezmienne, a gdy nie już potrzebne, nie może być programowo zaplanowane na śmieci kolekcja ; oznacza to, że instancja jest tylko do odczytu po jej utworzeniu i nie można przewidzieć, kiedy instancja zostanie usunięta z pamięci komputera . W związku z tym, jeśli obiekt String zawiera poufne informacje, takie jak hasło, numer karty kredytowej lub dane osobowe, , istnieje ryzyko ujawnienia informacji po jej użyciu , ponieważ aplikacja nie może usunąć danych z pamięci komputera.

Inne wskazania: