Хранение данных кредитной карты

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

46
задан jww 6 June 2017 в 06:57
поделиться

9 ответов

В основном постарайтесь не любой ценой брать на себя ответственность сохранить детали CC о Вашей стороне, однако я могу предположить, что Вы используете сторонний сервис сделать Вашу транзакцию, такую как PayPal/Verisign или что бы то ни было, у большинства из них есть API, который позволяет Вам сохранить учетные данные CC в их стороне, и они дают Вам, поддерживают ключ, который можно тогда использовать позже, чтобы завершить или инициировать транзакции, таким образом, они заботятся о твердой части, в то время как все, что необходимо сделать, сохранить этот строковый ключ в DB.

47
ответ дан bashmohandes 26 November 2019 в 20:16
поделиться

Я не полагаю, что это на самом деле недопустимо для хранения информации CVV (в том смысле, что это против любого закона), но это действительно нарушает Промышленные правила Платежной карты, и они могли наложить любое количество различных санкций. Так, Ваши требования могли на самом деле привести к Вам не бывший способный принимать кредитные карты; - (

13
ответ дан Cade Roux 26 November 2019 в 20:16
поделиться

Andrew, необходимо понять DSS PCI , никакая маленькая задача. Лично, я нахожу его чрезвычайно неопределенным, но вот то, что я понимаю.

Прежде всего, из сценария, который Вы описываете, я попытался бы авторизовать карту для полного объема и затем если бы это перестало работать, то я хранил бы информацию клиента (но не данные держателя карты), таким образом, кто-то мог связаться с пользователем. Где я использую для работы, некоторые наши клиенты только заряжали бы 1,00$ и затем сразу освободили бы транзакцию, только чтобы удостовериться, что карта была допустима. Они тогда обработали бы все заказы вручную.

то, Где необходимо будет сохранить число, находится на успешной авторизации. Единственное число, в котором Вы нуждаетесь тогда, является номером кредитной карты и кодом транзакции (по крайней мере, с каждым шлюзом, я когда-либо работал с).

В стандартный, прошлый раз, когда я посмотрел на него, не конкретен по поводу алгоритмов шифрования, но вместо этого проясняю, это должно быть в настоящее время небьющееся шифрование.

Теперь, одна вещь, которую Вы не можете сделать, сохранить последующее CCV за авторизацией. Мое понимание - то, что можно сохранить его до авторизации, но я никогда не мог получать никого, который изложит это в письменной форме. В основном Вы авторизовываете карту, Вы лучше вытираете ее.

И это не недопустимо в этой точке, но если Вы будете закреплены, то они снизят молоток на Вас. Они имеют в их полномочиях для выравнивания больших штрафов против Вас, но походит на то, что они обычно делают помещается Вы в исправлении. Если Вы не соответствуете, я не знаю то, что происходит, потому что все, с которыми я услышал этот случай, соответствовали. Но тогда они действительно повышаются Ваша добыча с микроскопом.

В конечном счете, я верю их единственной палке, которую они действительно имеют, должен препятствовать тому, чтобы Вы приняли кредитные карты. Большинство продавцов, с которыми я работал, боялось к смерти точно этого.

12
ответ дан Flory 26 November 2019 в 20:16
поделиться

Если Вы просто хотите сохранить строку в течение короткого периода времени в памяти, можно смотреть на Система. Безопасность. SecureString.

Взятый от этого ответ :

значения SecureString хранятся зашифрованные (запутываемый, скорее), но самое главное, их никогда не подкачивают к диску и можно избавиться сразу, когда Вы сделаны с ними.

Они хитры для использования, потому что можно только создать их один символ за один раз (чтобы поощрить Вас создавать их путем получения нажатий клавиш, поскольку пользователь вводит их пароль), и потребуйте, чтобы три строки кода восстановили и затем вытерли свой простой текст, но, когда используется правильно они могут сделать программу более безопасной путем предотвращения уязвимости виртуальной памяти.

В конце примера SecureString преобразовывается в обычную управляемую строку, которая делает его уязвимым снова (убедиться использовать try-catch-finally шаблон для Обнуления строки после того, как Вы сделаны с ним). Использование SecureString находится в сокращении площади поверхности нападения путем ограничения количества копий, которые Сборщик "мусора" сделает из значения и сокращения вероятности того, чтобы быть записанным в файл подкачки.

// Make a SecureString
SecureString sPassphrase = new SecureString();
Console.WriteLine("Please enter your passphrase");
ConsoleKeyInfo input = Console.ReadKey(true);
while (input.Key != ConsoleKey.Enter)
{
   sPassphrase.AppendChar(input.KeyChar);
   Console.Write('*');
   input = Console.ReadKey(true);
}
sPassphrase.MakeReadOnly();

// Recover plaintext from a SecureString
// Marshal is in the System.Runtime.InteropServices namespace
try {
   IntPtr ptrPassphrase = Marshal.SecureStringToBSTR(sPassphrase);
   string uPassphrase = Marshal.PtrToStringUni(ptrPassphrase);
   // ... use the string ...
}
catch {
   // error handling
} 
finally {
   Marshal.ZeroFreeBSTR(ptrPassphrase);
}
8
ответ дан Community 26 November 2019 в 20:16
поделиться

Если Вы собираетесь сохранить данные кредитной карты, действительно необходимо быть совместимым PCI, или Вы просто напрашиваетесь на неприятности.

сказавший, которые смотрят на шифрование уровня ячеек, доступное в SQL Server 2005 и выше. По совпадению:) Я недавно дал представление с образцами T-SQL на шифровании с SQL Server 2005/2008 доступный здесь: http://moss.bennettadelson.com/Lists/Events/Attachments/9/June2008.zip (Расположение ссылки, обновленное 23 декабря 2008)

8
ответ дан Joe Kuemerle 26 November 2019 в 20:16
поделиться

Это стоит где-нибудь в окружении 30 000$, чтобы стать правильно совместимым и быть в состоянии сделать такой материал. Вы - более обеспеченное использование стороннего платежного сервиса. Лично, я рекомендую Element Express, и у них есть "Размещенное" решение, которое обходит соответствие PCI-DSS PAPDB. Я должен был преобразовать в это для своих собственных приложений, даже машина Торговой точки!!! Это - большая боль, но мы - небольшая компания.

http://www.elementps.com/software-providers/our-security-edge/hosted-payments/PA-DSS-Certification-vs-Elements-Hosted-Payments/

вышеупомянутая ссылка имеет некоторую хорошую информацию о затратах, связанных со становлением совместимым. Мы сделали, чтобы клиенты попросили, чтобы мы сохранили номера кредитных карт, и мы не сделаем этого, потому что мы могли быть оштрафованы также. Не хороший. Не открывайте себя до ответственности.

Редактирование:

Кроме того, если Вы ДЕЙСТВИТЕЛЬНО решаете сохранить данные кредитной карты, определенно необходимо рассмотреть формы шифрования, которое Вы собираетесь использовать. Симметричный? Асимметричный?

, Если Вы делаете Симметричное шифрование (Ключ доступа) тогда, Вы открываете себя до некоторых серьезных уязвимостей системы обеспечения безопасности, если сервер (сайт), который имеет ключ (должен был зашифровать) поставился под угрозу всегда. Помните, даже скомпилированный код не скроет текстовый ключ.

при использовании Асимметричного шифрования (общедоступные/частные пары ключей) тогда Вы сталкиваетесь с некоторыми дополнительными проблемами, но если основной общедоступный сервер направления поставится под угрозу, они будут только иметь открытый ключ , и если они также получают доступ к Вашей базе данных.. они не будут в состоянии к decrpyt содержание.

вопрос тогда, где Вы храните закрытый ключ? Вы сделали, чтобы кто-то вставил его в от их локальных компьютеров когда рабочие функции администрирования.. имейте отдельное приложение, которое работает на рабочем столе для просмотра заказов, и т.д.

существует много вещей учесть.

Заключительное примечание: Используйте платежный шлюз (Element Express, Authorize.NET, PayPal, и т.д.) и не храните информацию о кредитной карте локально.: P

Здесь является ссылкой об использовании X509 Асимметричное Шифрование в C#: http://www.csharpbydesign.com/2008/04/asymmetric-key-encryption-with.html

6
ответ дан Seph 26 November 2019 в 20:16
поделиться

Согласованный, что необходимо постараться не хранить данные, если Вы можете. Но возможно Вы то третье лицо? Если так, познакомьтесь с стандарты PCI . Озирайтесь немного на сайте, и Вы найдете меры безопасности, которые Вы , потребовал реализовывать.

5
ответ дан Wedge 26 November 2019 в 20:16
поделиться

У меня есть сообщение в блоге, которое справляется с этой точной ситуацией того, чтобы хранить уязвимые данные в базе данных. Сообщение в блоге использует Строковый класс Утройства шифрования, что я создал использование Тройного алгоритма DES, но можно включить собственное, если Вы хотели бы.

сообщение в блоге содержит видео и исходный код, который использовался. Можно проверить его в http://www.wrightin.gs/2008/11/how-to-encryptdecrypt-sensitive-column-contents-in-nhibernateactive-record-video.html . Я думаю, что это определенно решит Вашу проблему.

0
ответ дан Jamie Wright 26 November 2019 в 20:16
поделиться

Давайте посмотрим на требование немного по-другому. В настоящее время оно выглядит так:

Как владелец продукта для сайта X я хочу, чтобы система временно хранила данные о банковской карте клиента, чтобы я мог восстановить продажу, которая была отклонена компанией CC

Люди склонны думать именно так и запрашивать функции в этом ключе. Теперь я думаю, что ваше требование удобнее описать следующим образом:

Как пользователь я хочу, чтобы сайт X мог повторно оплатить мою покупку, чтобы мне не пришлось снова проходить процесс оформления заказа, потому что это настоящая боль в...

Итак, нет явного требования хранить что-либо (на вашей стороне), не так ли? Это только подразумевается

Платежные провайдеры могут предоставить программные API к вашему торговому счету и возможность повторной попытки авторизации при отклонении попытки. Думаю, @bashmohandes намекал на это ранее

Не все платежные провайдеры могут это сделать, однако я думаю, что это зависит от их отношений с соответствующими банками. Это то, чего вы хотите избежать, т.е. иметь тесные отношения с банками.

Сценарий 1: Предполагая, что все, что я сказал, правда

Вам не нужно хранить ничего, кроме ссылки на попытку авторизации. Некоторые платежные провайдеры даже предоставляют вам отличный инструмент бэк-офиса, так что вам не придется создавать свой собственный для повторной авторизации. Я думаю, paygate делает это

Ваш лучший вариант, я думаю, это опросить несколько платежных провайдеров. Они должны знать эти вещи как свои пять пальцев. Это потенциально решение с нулевым кодом

Сценарий 2: Предположим, что я совершенно не прав, но юридически хранение данных CC является нормальным

Поэтому вам придется хранить эти данные где-то временно. Я советую:

  • использовать метод двухстороннего шифрования (естественно), который не зависит от производителя, так что вы можете использовать любой метод шифрования. чтобы вы могли использовать любой язык/платформу для шифрования/дешифрования
  • отделить службу шифрования/дешифрования от вашего приложения и рассматривать ее как черный ящик
  • использовать открытые/закрытые ключи для аутентификации в этой службе
  • поместить эту машину в частную сеть с собственными повышенными правилами брандмауэра (не обязательно аппаратный брандмауэр, но аппаратный лучше)
  • пусть ваши серверы приложений взаимодействуют с этой машиной по ssl (можно обойтись самоподписанным сертификатом, т.к. машина находится в вашей частной локальной сети)
  • пусть ваши серверы приложений взаимодействуют с этой машиной по ssl (вы можете обойтись подписанный сертификат, поскольку он находится в вашей частной локальной сети)

Все, что я предложил в сценарии 2, - это препятствия, но в конечном итоге упорство побеждает в гонке за доступ к вашим данным. Единственный способ абсолютно защитить данные - это отключить сервер от эфира, но этот вариант немного радикален :-)

Сценарий 1 был бы неплох. Не так ли?

4
ответ дан 26 November 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: