2012-01-30 3 views
0

Можно создать дубликат:
Is it ever ok to store password in plain text in a php variable or php constant?Сохранение учетных данных базы данных в PHP Констант и безопасности

Я использовал для хранения своих учетных БД в PHP файл, например так:

<?php 
    define('HOST', 'localhost'); 
    define('USER', 'db_user'); 
    define('PASS', 'user_pass'); 
    define('DB', 'database'); 
?> 

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

Есть ли риск безопасности при хранении учетных данных db в PHP-константах?

ответ

1

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

Самый безопасный способ (я знаю) состоит в том, чтобы иметь учетные данные как часть серверной среды, которая ограничена только корневым. Затем разработчики могут использовать _SERVER['db_user'] и т. Д. Это потенциально более безопасно, поскольку люди, имеющие доступ к фактическим учетным данным БД, более ограничены. Это также дает вам гибкость в использовании разных учетных данных в зависимости от сервера (например, развитие или производство). Тем не менее, вы можете увидеть все переменные окружения сервера с помощью phpinfo(), var_dump($_SERVER) и т. Д., Поэтому вам нужно позаботиться о том, чтобы не загружать такие вещи.

+0

Я этого не знал. Спасибо, танду! – Kete

1

Есть ли риск безопасности при хранении учетных данных db в PHP-константах?

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

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

Потенциальный риск состоит в том, что конфигурация написана в коде. Так что это не статично. Вероятно, более безопасно использовать конфигурационный файл, который не нужно выполнять сам.

+0

Да. Я не понимаю, почему константа может быть рискованной. Дело в том, что он сказал нам использовать все учетные данные базы данных в атрибутах класса DB. Таким образом, статус PDO будет: '$ this-> myconn = new PDO (" mysql: host = ". $ This-> db_host."; Dbport = ". $ This-> db_port."; Dbname = ". $ this-> db_name, $ this-> db_user, $ this-> db_pass); ' – Kete

+0

Это на самом деле гораздо более мудрое решение. Константы доступны повсюду, если у вас есть частные члены объекта, вам нужно знать местоположение конкретно. Это больше подходит для скрипта злоумышленника для поиска учетных данных. Помимо этого (что на самом деле мало, но немного), это звучит намного лучше, дизайн мудрый. – hakre