> What's the best way to handle the
> authentication? My first thought was
> to put the username and password in a
> text file inside the folder and
> prevent the server from serving the
> page using .htaccess. I'm trying to
> avoid touching a database for the
> project as I want to keep it cheap and
> simple.
OpenID - это решение (почти) всех ваших проблем:
- У вас нет хранилища имени пользователя и пароля => BAD (надежное хранение паролей оченьсложная концепция).
- Вам не нужно прикасаться к какой-либо базе данных, потому что OpenID обрабатывает аутентификации для вас.
- openId имеет очень дружественные библиотеки ( LightOpenID очень дружелюбен)и является бесплатным (с открытым исходным кодом).
http://www.codinghorror.com/blog/2008/05/openid-does-the-world-really-need-yet-another-username-and-password.html:
Поскольку мы продолжаем работать над кодом, который в конечном итоге превратится в стек-поток, мы запоздало поняли, чтобудет способствовать переполнению имени пользователя и паролей в Интернете.У меня есть пятьдесят сетевых логинов, и я не могу вспомнить ни одного из них!Добавление этого пятьдесят первого набора учетных данных stackoverflow.com вряд ли поможет делу.
Я думаю, что вы должны использовать opendID (Facebook Connect и т. Д.) Для проверки подлинности.Я даже создал небольшую программу, которая обрабатывает аутентификацию во многом так же, как stackoverflow.com (с красивым виджетом).Вы можете продемонстрировать это на моем простом веб-хостинге по адресу http://westerveld.name/php-openid/.. Вы можете скачать код (использует LightOpenID под обложками) по адресу https://github.com/alfredwesterveld/php-openid.
> I'm trying to avoid touching a
> database for the project as I want to
> keep it cheap and simple.
Я понимаю, что вы хотели бы избежатькасаясь базы данных, потому что, если не все сделано правильно, это сделает вашу кодовую базу более трудной для понимания.Но масштабирование с использованием базы данных является обязательным, и если вы не закодируете эту концепцию, когда вам придется переключаться (потому что система больше не может обрабатывать), у вас будет кошмар обслуживания.
Также база данных помогает вам в кодировании, потому что она абстрагирует все мелкие детали ввода-вывода (использование базы данных облегчает кодирование).К счастью, вам не нужно использовать полностью изогнутую базу данных, такую как MySQL / PostGRESQL, потому что PHP (> = 5) компилирует / устанавливает SQLite для вас, и вы можете просто использовать ее:
SQLite - это программная библиотека, в которой реализован автономный серверный транзакционный механизм баз данных SQL с нулевой конфигурацией.SQLite - это наиболее широко используемый в мире механизм баз данных SQL.Исходный код для SQLite находится в открытом доступе.
Чтобы абстрагировать базу данных от вашего кода, вы должны узнать о PDO для подключения к SQLite.Это введение научит вас, как правильно это делать ( Хорошее чтение! ).
Эти части особенно важны:
Connecting
Prepared Statements
для предотвращения SQL-инъекций.
Тогда, когда вы захотите изменить реализацию с SQLite на MySQL, это будет так же просто, как заменить new PDO
на использованиеMySQL вместо SQLite.
> What's the best way to handle the
> authentication?
Пусть OpenID обрабатывает аутентификацию и использует возвращенные URL-адреса OpenID (уникальные) для авторизации .Вы можете легко хранить эту информацию в нужной базе данных.
> prevent the server from serving the
> page using .htaccess
.htaccess может использоваться для предотвращения доступа пользователей к определенным файлам.Еще проще было бы поместить эти файлы в место вне того места, где они будут предоставляться веб-браузерам, если это возможно.Конечно, вам придется поместить их в это место, если вы также хотите, чтобы пользователи обращались к этому файлу / скачивали его, но затем вам необходимо выполнить авторизацию.
> I doubt the customer will even spring
> for an SSL certificate.
Кража пароля - это то, что я уверенне нравится вообще.Раньше, когда я не знал о безопасности, я использовал один пароль для всех своих сайтов (запоминать больше сложно). Когда Lifehacker был взломан Мне нужно было изменить хотя бы пароли для важных сайтов, чтобы неполучить взломанСейчас я использую превосходный Lastpass для безопасного хранения своих паролей и создаю уникальный пароль для каждого сайта.Если вы не используете SSL, то кража информации (паролей) может быть такой же простой, как установка blacksheep . Но, к счастью, при использовании OpenID (надлежащие поставщики OpenID, такие как Google, MyOpenID, Yahoo!) большую часть времени аутентификация выполняется по SSL.