2-х стороннее шифрование в PHP - нужно некоторое руководство - PullRequest
6 голосов
/ 05 октября 2010

Я работаю над своим первым безопасным магазином. Мы не храним данные кредитных карт, так что это не проблема. Тем не менее, у нас есть ключ транзакции и ключ входа API для нашего платежного шлюза (authorize.net), который я предпочел бы хранить в базе данных, а не жестко программировать в своем php. Я не знаю, что нам нужна огромная безопасность, но я бы не стал хранить ее в виде простого текста. Я знаю о ша, но это в одну сторону. Мне нужен способ сохранить значение в базе данных в полуобезопасном формате, но затем я смогу программно «расшифровать» его для использования в моей функции.

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

Кто-нибудь может указать мне правильное направление? Я очень новичок в защите данных.

ИЗМЕНЕНО В ДОБАВЛЕНИЕ: Я проверил с моим хостом и установлен mcrypt Это правильное направление?

Ответы [ 3 ]

2 голосов
/ 05 октября 2010

MCrypt может быть вашим другом здесь.Однако необходимо учитывать, что для каждого общедоступного (и полезного) метода шифрования требуется ключ.Если для шифрования AES или 3DES не требуется ключ во время процесса шифрования, то для взлома шифрования достаточно будет попробовать все стандартные методы дешифрования, пока вы не получите значимый результат.Таким образом, хранение ключа для вашего платежного шлюза влечет за собой те же риски, что и хранение ключа для вашего шифрования.Независимо от того, сколько слоев шифрования вы хотите добавить, на каком-то уровне должен быть ключ, хранящийся в виде простого текста, обычно жестко запрограммированного в PHP и часто во включенном файле config.php, чтобы его было легко изменить вбудущее.

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

Лучше всего вам изучить MCrypt Encrypt и MCrypt Decrypt .Таким образом, если скомпрометирован только ваш PHP, они узнают ключ, который вы использовали для шифрования, но у них нет данных.Если скомпрометирована только база данных, у них есть данные, но не ключ, который вы использовали для шифрования.Если оба скомпрометированы, вы облажались.Но если оба скомпрометированы, вы облажались, что бы вы ни делали, так что это довольно безопасный путь.

0 голосов
/ 05 октября 2010

Хм, вы можете попробовать шифрование AES. Проблема в том, что вы должны сохранить соленый хеш (98sdfx9c6v5c) где-нибудь в вашем PHP.

Вставить конфигурацию:

INSERT INTO config (secret_key) VALUES (AES_ENCRYPT('secret api key','98sdfx9c6v5c'));

выберите конфигурацию:

SELECT AES_DECRYPT(secret_key,'98sdfx9c6v5c') AS secret_url FROM config
0 голосов
/ 05 октября 2010

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

работа с mcrypt неЭто не значит, что у вас будет БОЛЬШЕ безопасности (если они могут читать ваши php-файлы, они также могут прочитать ключ), так что ...

Если бы я был вами, я бы сохранил ключ API в виде простого текста нафайл вне каталога веб-сервера.

просто напишите хороший код, с вами все будет в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...