Существует ли структура безопасности PHP, которая защищает номера телефонов и пароли?

StackOverflow https://stackoverflow.com/questions/120977

Вопрос

Я понимаю мантру «не делай ничего самостоятельно», когда речь идет о системах безопасности сайтов.

Во всяком случае, для большинства случаев.

Я собираюсь работать над сайтом, который интегрирует обмен текстовыми сообщениями в систему.

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

Я бы не хотел быть ответственным за то, что список номеров мобильных телефонов пользователей будет взломан и рассылается спамом.

Какие предложения может предложить сообщество?

Это было полезно?

Решение

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

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

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

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

Общий метод называется «Разделение привилегий», приведенное выше — лишь один пример.

Обратите внимание, что номера телефонов обычно необходимо дополнять случайными данными перед шифрованием (например, добавлением хешированного пароля).В противном случае можно ответить на вопрос «Зашифрован ли номер телефона X?», не зная секретного ключа.Возможно, это не проблема с точки зрения спамеров, крадущих ваш список рассылки, но это проблема с точки зрения утверждения, что ваши телефонные номера надежно хранятся, поскольку это означает, что атака методом перебора становится возможной:существует всего лишь несколько миллиардов телефонных номеров, и, возможно, их можно значительно сузить для конкретного пользователя.

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

[Изменить, чтобы добавить:на самом деле мне пришло в голову, что под заголовком «сохраняйте простоту привилегированного приложения» вы, возможно, вообще не захотите использовать фреймворк.Это в некотором роде зависит от того, считаете ли вы, что с большей или меньшей вероятностью оставите ошибки в небольшом объеме кода, который вам действительно нужен, или авторы фреймворка должны оставлять ошибки в гораздо большем (но более широко используемом) объеме кода, который они используют. я написал.Но это огромное упрощение.]

Другие советы

Поскольку вам нужна возможность получить номера телефонов, единственное, что вы действительно можете сделать, чтобы защитить их (помимо обычных действий, которые вы делаете для защиты своей базы данных), это зашифровать их.Это означает, что вам необходимо:

  • Убедитесь, что ключ не утечет в случае непреднамеренной утечки дампа базы данных.
  • Убедитесь, что ваша система не расшифровывает номера телефонов, когда кому-то удается внедрить SQL-код в вашу систему.

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

Я рад сообщить о выпуске системы дырочной безопасности для PHP.

Этот проект означает внедрение в PHP того типа безопасности, который обеспечивается в Java системой Spring Security (ранее Acegi Security System для Spring).Он создан, чтобы быть привлекательным для пользователей Spring Security, поскольку философия та же.Это ненавязчивый способ повысить безопасность PHP-сайта.Конфигурация выполняется с использованием подложки IoC/DI, поскольку Spring Security использует Spring IoC/DI.

Пример конфигурации поставляется вместе с платформой и может использоваться следующим образом:

$context = new substrate_Context(
    './path/to/hole-security/hole-security-config.php'
);

$context->execute();

$hole_Security = $context->get('hole_FilterChainProxy' );
$hole_Security->doFilter();

Просто убедитесь, что код начальной загрузки платформы выполняется до начальной загрузки выбранного вами MVC.

Веб-сайт:http://code.google.com/p/hole-security/

Документация:На данный момент вы можете использовать справочную документацию Spring Security там, где она применима.Вы можете получить общее представление, используя справочную документацию по безопасности Acegi, поскольку система безопасности дыр использует тот же способ настройки, но имейте в виду, что она основана на Spring Security.

Лицензия:Он выпущен под лицензией Apache версии 2.0.

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

На данный момент функции:

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

  2. Настроенные фильтры для применения к шаблонам URL-адресов.Можно подключить средство сопоставления URL-путей, в настоящее время оно поставляется с средством сопоставления путей стилей ant.

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

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

  5. Вы можете использовать пользовательскую страницу входа и настроить ее в соответствии с конфигурациейhole_AuthenticationProcessingFilter или настроитьhole_AuthenticationProcessingFilter в соответствии с вашей пользовательской страницей входа.

  6. Кодировщик пароля по умолчанию представляет собой обычный текст без кодировки.В будущих выпусках будут реализованы кодировки на основе MD5, Sha, Base64 и другие.Вы можете создать свой собственный кодировщик паролей и настроить его.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top