как зашифровать, а затем расшифровать текст имени пользователя и пароля, используемый в файле класса базы данных - PullRequest
2 голосов
/ 22 декабря 2009

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

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

Пожалуйста, помогите мне, потому что мне отчаянно нужна какая-то идея.

Спасибо

Ответы [ 8 ]

4 голосов
/ 22 декабря 2009

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

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

3 голосов
/ 22 декабря 2009

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

1 голос
/ 22 декабря 2009

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

Разовый:

  • поместите ваше имя пользователя и пароль в файл с сильным шифрованием (например, AES с длинным и сильным ключом) и установите соответствующие разрешения

При каждой загрузке:

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

В ваших сценариях:

  • запросить имя пользователя + пароль из вашего временного хранилища
  • подключиться к базе данных
  • удалить имя пользователя + pw из переменных вашего скрипта

Примечание: все это означает, что пароль невозможно восстановить, посмотрев на код source . Те, кто может изменять и запускать скрипты на вашем сервере, находятся в том же положении, что и раньше - «запросить пароль, распечатать его», а не просто «распечатать». Другим недостатком является то, что теперь вам нужно вводить пароль расшифровки при каждом перезапуске сервера.

1 голос
/ 22 декабря 2009

Я предполагаю, что вы как-то распространяете код или не доверяете своей собственной хост-среде.

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

Посмотрите эту статью , чтобы получить дополнительную информацию о ряде инструментов шифрования PHP.

1 голос
/ 22 декабря 2009

Нет способа зашифровать что-либо, чтобы только MySQL мог его расшифровать. Вы должны предоставить MySQL этот простой текстовый пароль рано или поздно.

Идея
Установите права доступа к файлу на database.php как можно ниже. Если у вас есть это:

 rw-rw-r-- gaurav gaurav       database.php

Тогда, возможно, установите это так (при условии, что ваши php-процессы работают под www-data)

 r-------- www-data www-data   database.php
1 голос
/ 22 декабря 2009

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

Вместо этого вам нужно найти способ контролировать, кто имеет доступ к вашему источнику.

1 голос
/ 22 декабря 2009

Извините, что неверно истолковал вопрос для начала ..

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

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

EDIT: Почему бы не сохранить имя пользователя / пароль в локальном файле на сервере, а только дать доступ на чтение к PHP? По крайней мере, таким образом, его нельзя просмотреть напрямую в исходном коде.

0 голосов
/ 22 декабря 2009

При хранении пароля вы ВСЕГДА используете одностороннее хеширование, предпочтительно SHA-256 (потому что MD5 не является безопасным) для хранения пароля. А если вы хотите сравнить пароль, просто хешируйте введенный пароль SHA-256 и посмотрите, совпадают ли хеши.

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

PS: Да, любой веб-сайт, который может отправить вам пароль по электронной почте, имеет недостатки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...