Вот простая трехэтапная реализация ES6 с использованием привязки функций в родительском конструкторе. Это первый способ, рекомендуемый официальным учебным пособием (существует также синтаксис полей открытых классов, который здесь не рассматривается). Вы можете найти всю эту информацию здесь https://reactjs.org/docs/handling-events.html
Связывание родительских функций, чтобы дети могли звонить им (и передавать данные вверх для родителя!: D)
Родительская функция
handleFilterApply(filterVals){}
Родительский конструктор
this.handleFilterApply = this.handleFilterApply.bind(this);
Prop Passed to Child
onApplyClick = {this.handleFilterApply}
Ребенок [Call]
onClick = {() => {props.onApplyClick(filterVals)}
Не храните номера кредитных карт, храните хеш вместо этого. Когда необходимо проверить, соответствует ли новое число сохраненному числу, возьмите хеш нового числа и сравните его с сохраненным хешем. Если они соответствуют, число является (в теории) тем же.
С другой стороны, Вы могли зашифровать данные путем получения пользователя, который вводит номер карты для ввода пароля; Вы использовали бы это в качестве шифрования/ключа расшифровки.
Однако любой с доступом к Вашей базе данных и исходному коду (т.е. Вы и Ваша команда) найдет это тривиальным для дешифрования тех данных (т.е. изменить живой код так, чтобы это послало по электронной почте любые ключи расшифровки, вводимые в доступную учетную запись Hotmail, и т.д.).
Если Вы не платежный процессор, Вы не должны действительно хранить вид информации о CC.
Рассмотрите свои требования, действительно нет многих случаев, где необходимо хранить информацию CC
При хранении данных кредитной карт, потому что Вы не хотите, чтобы пользователь должен был повторно ввести их, затем хеширование любой формы не собирается помогать.
Когда необходимо действовать на номер кредитной карты?
Вы могли сохранить номера кредитных карт в более безопасной базе данных, и в основном дб просто хранят достаточно информации, чтобы показать пользователю и ссылке на карту. Система бэкенда может быть намного более заблокирована вниз и использовать фактическую информацию о кредитной карте только для обработки заказов. Вы могли зашифровать эти числа некоторым основным паролем, если бы Вам нравится, но пароль должен был бы быть известен кодом, который должен получить числа.
Да, Вы только переместили проблему несколько, но большая безопасность больше о сокращении места нападения вместо того, чтобы устранить ее. Если Вы хотите устранить его, затем не хранят номер кредитной карты нигде!
При использовании Oracle, Вы могли бы интересоваться Прозрачным Шифрованием данных. Только доступный с Корпоративной лицензией все же.
Oracle также имеет утилиты для шифрования - дешифрование, например, DBMS_OBFUSCATION_TOOLKIT.
Что касается "Стандартов", надлежащий стандарт, которым Вы интересуетесь, является стандартом DSS PCI, который описывает, какие меры должны быть приняты для защиты чувствительных данных кредитной карт.
Поскольку электронная коммерция вводит вариант использования (думайте 1 щелчок Amazon), Вы могли зашифровать CC (или ключ) с существующим сильным паролем пользователя. Принятие Вас только хранит хеш пароля, только пользователь (или таблица радуги - но, это должно было бы быть выполнено на каждом пользователе и не будет работать, если бы это не придумало тот же пароль - не всего 1, который хешировал то же), может дешифровать его.
Необходимо было бы проявить некоторую заботу, чтобы повторно зашифровать данные, когда изменения пароля и данные будут бесполезны (и должен быть повторно введен пользователем), если бы они забыли свой пароль - но, если бы платежи инициируются пользователями, то это работало бы приятно.
Нет никакой нехватки процессоров, готовых сохранить Вашу информацию о CC и обмениваться ею для маркера, с которым можно тарифицировать против сохраненного числа. Это вытаскивает Вас из соответствия PCI, но все еще позволяет по требованию тарифицировать. В зависимости от того, почему необходимо сохранить CC, который может быть лучшей альтернативой.
Большинство компаний называет это чем-то как "Клиентское управление Профилем" и на самом деле довольно разумно на сборах.
Несколько поставщиков я знаю о (без определенного порядка):
Было бы полезно знать сервер БД и язык/типы платформы, таким образом, мы могли стать более конкретными, но я буду изучать SHA.
Я симметрично зашифровал бы (AES) безопасный соленый хеш (SHA-256 + соль). Соленый хеш был бы достаточно с большой солью, но шифрование добавляет немного дополнительный в случае, если база данных а не утечки кода и существуют таблицы радуги для соленых хешей к тому времени или некоторых других средств. Сохраните ключ в коде, не в базе данных, конечно.
Стоит отметить, что ничто не защищает Вас от нечестных товарищей по команде, они могут также сохранить копию даты перед хешированием, например. Вы должны проявить хорошую заботу о репозитории кода и действительно часто посещаете изменения кода для всего кода в кредитной карте, обрабатывающей путь. Также попытайтесь минимизировать время от получения данных и наличия его crypted/hashed, вручную гарантировав переменную, где это было сохранено, очищен из памяти.