Безопасное веб-приложение на PHP и MySQL - весь веб-сайт в виде одного файла index.php - да или нет? - PullRequest
0 голосов
/ 01 апреля 2012

Я работаю над веб-приложением, которое будет использовать PHP и MySQL.Приложение будет обрабатывать конфиденциальные данные.Мне нужно сделать его максимально безопасным.

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

Из-за этого я создал псевдо-систему MySQL Role с хранимыми процедурами.Пользователи будут входить в приложение со своим именем пользователя и паролем MySQL.Они будут иметь привилегию только для выполнения хранимых процедур MySQL, но не привилегии SELECT, INSERT, UPDATE, DELETE для таблиц, которые используются внутри хранимых процедур.Определителем хранимых процедур будет учетная запись root.

У меня есть одна проблема с этим.И это: я не хочу хранить данные формы входа (пароль для экзамена) в сеансе в текстовом формате.Я не могу перенести объект подключения MySQL с одной страницы на другую, используя сеанс.

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

Существуют ли другие способы сделать это?Наверное.Я не хочу сожалеть о своем выборе после того, как слишком много работы потрачено впустую:).

Заранее спасибо.

Ответы [ 4 ]

1 голос
/ 01 апреля 2012

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

Вот несколько предложений:

  • Создайте одного пользователя MySQL только с необходимыми разрешениями для чтения нужных вам данных.
  • Сохраните информацию о подключении MySQL в файле PHP, который находится за пределами корня документа, и включите этот файл в файлы PHP, которым требуется доступ к базе данных.
  • Создайте таблицу в базе данных для хранения учетных записей пользователей и всегда хэшируйте их пароль перед сохранением в таблицу. Вы можете использовать эту таблицу для аутентификации ваших пользователей при входе в систему.
  • Когда пользователь входит в систему, просто сохраните флаг в сеансе, например, его user_id. Этого достаточно, чтобы определить, кто они и что они вошли в систему. Если значение отсутствует в сеансе, то они не вошли в систему.
  • Вам не нужно помещать все в один файл PHP. Можно иметь более одного файла.

Возможно, вы захотите попробовать использовать фреймворк, такой как Symfony, CodeIgniter или CakePHP, потому что у них будут учебные пособия, которые помогут вам создать безопасное приложение. Имейте в виду, что безопасность не ограничивается только паролями. Как указывает Кишор, вам также нужно беспокоиться о XSS, SQL-инъекциях, CSRF и т. Д. Среда действительно поможет вам с этими вещами.

1 голос
/ 01 апреля 2012

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

http://php.net/manual/en/function.openssl-encrypt.php

, но эта функция появляется в PHP 5.3.0 выше

0 голосов
/ 01 апреля 2012

Существует шаблон проектирования, называемый Front Controller , в основном то, что он делает, это то, что все приложение обслуживается через одну страницу.Вы реализуете свой собственный диспетчер, и диспетчер обрабатывает все запросы.Например, какой объект создать или какую страницу включить.Это ограничивает использование безопасности для неизвестных объектов.

Кроме того, для захвата сеанса вы можете реализовать свои механизмы предотвращения, отслеживая и проверяя

  1. User Agent
  2. Sessionрегенерация id
  3. токены

Часть базы данных впечатляет, но может добавить дополнительных сложностей, если кто-то еще должен расширить, отладить ваше приложение.Вы можете использовать подготовленные операторы или даже лучшую альтернативу ORM , такую ​​как Doctrine или Объекты данных .

.основные меры безопасности осуществляются через XSS и CSRF, для этого вам нужно будет внедрить в свои формы механизм передачи токенов и проверить «источник запроса».

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

Надеюсь, что это поможет !!ура!

0 голосов
/ 01 апреля 2012

Нет, не делайте ваше приложение одним гигантским файлом.

Поместите свои учетные данные в базу данных вне веб-корня. Затем убедитесь, что открыть его могут только те пользователи, которые в нем нуждаются. Вот как это обычно делается.

...