Существует ли структура безопасности PHP, которая защищает номера телефонов и пароли? - PullRequest
1 голос
/ 23 сентября 2008

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

В большинстве случаев в любом случае.

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

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

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

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

Ответы [ 3 ]

7 голосов
/ 23 сентября 2008

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

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

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

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

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

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

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

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

1 голос
/ 03 ноября 2010

Я рад сообщить о выпуске дырочной системы безопасности для 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 по вашему выбору.

WebSite: http://code.google.com/p/hole-security/

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

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

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

В настоящее время характеристики:

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

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

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

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

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

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

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

1 голос
/ 23 сентября 2008

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

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

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

...