Я довольно много занимался вопросами шифрования, хранения паролей, разработки безопасных PHP-скриптов и т. д.
Кажется, есть пара общих тем:
- «Не пытайтесь писать свои собственные сценарии шифрования, используйте существующую библиотеку (например, PHPass)».
- «Не создавайте базы данных MySQL для каждого пользователя, создайте одну большую базу данных и напишите хороший PHP-скрипт для управления вашими пользователями, паролями и их данными».
Мне кажется, или эти двое не кажутся немного конфликтующими?
Возьмем этот пример. Я хочу создать веб-сайт, на котором пользователи могут создать учетную запись. Они могут добавить конфиденциальную информацию (например, свой домашний адрес), которую затем смогут просмотреть на веб-сайте или отредактировать. Эта конфиденциальная информация не должна быть общедоступной и не должна быть доступна любому другому пользователю веб-сайта. Это должно быть «только для глаз пользователя».
Есть один-единственный администратор, который должен иметь возможность читать конфиденциальную информацию (например, чтобы отправить письмо каждому клиенту), но, конечно, не может читать пароли. При необходимости это можно сделать на месте, т.е. без предоставления доступа администратора через Интернет.
Можно принять все меры предосторожности, чтобы использовать последние версии, лучшие практики и т. д. Веб-сайт может работать на выделенном компьютере, который может быть физически безопасным и не использоваться совместно с какой-либо другой задачей.
Так почему бы не создать пользователей MySQL для каждого пользователя сайта? Зачем запускать свой собственный PHP-скрипт для создания пользователей, а затем сохранять эту информацию в таблице базы данных, когда MySQL уже предлагает эту функциональность? Каковы настоящие причины? Думаем ли мы, что использование PHPass (или альтернативы) обеспечивает «более безопасное» хранилище паролей, чем встроенное в MySQL?
Является ли хранилище внутри базы данных MySQL «небезопасным». Если у вас был локальный доступ к моей машине, но не было паролей администратора или root или других комбинаций пользователя/пароля для моей базы данных MySQL, то вы все равно сможете получить все данные?
Если создание пользователя MySQL для каждого пользователя веб-сайта считается «приемлемым», то почему бы не создать новую базу данных или таблицу для каждого пользователя и не установить разрешения в MySQL, чтобы каждый пользователь мог получить доступ только к своим данным и ничего больше? Конечно, администратор с локальным доступом и паролем root может прочитать всю информацию.
Таким образом, кажется, что по дизайну функциональность создания пользователей и назначения разрешений уже встроена в MySQL, зачем писать PHP-скрипт, чтобы сделать то же самое?
///
Дополняющий вопрос.
Если это работает, то должен быть пользователь MySQL, чтобы PHP-скрипт мог использовать его для создания новых пользователей. Это будет хранить его пользователя / пароль в виде открытого текста, нет никакого способа обойти это?
Теперь в идеале этот пользователь MySQL не сможет читать/записывать или делать что-либо с любой существующей базой данных, но сможет создать нового пользователя, создать новую базу данных/таблицу и назначить разрешения для этого нового пользователя.
Это возможно?
Database User
сApplication User
. - person Shiplu Mokaddim   schedule 21.09.2013