Добрый вечер. У меня назрел вопрос сделать нормальную авторизацию в системе. И тут появились вопросы. У меня все пользователи хранятся в таблице (их логины и пароли) . Юзер вводит логин пароль и селектом проверяется есть ли такой юзер или нет. но тут как раз и трабла. Мне чтобы селектом проверить есть ли такой юзер в базе нужно изначально иметь доступ к базе. Чтобы сделать к ней запрос и это означает что у меня в коде гдето должны быть прописаны строки логина и пароля админа? Как это правильно сделать т.к. я боюсь что злоумышленник же может получить доступ к исходникам пхп кода ?
если злоумышленник получил доступ к исходникам, то тебе ничто не поможет, храни как везде, в файлах конфигов, которые закрываешь от прямого вызова из браузера и не парься --- Добавлено --- вот пароли в таблице не храни в принципе, хэшируй и храни хэши, а при вводе пароля юзером хэшируй то что он ввел и делай селект уже по хэшу
Я бы посоветовал пароль хешировать с помощью password_hash, а проверять хеши - с помощью password_verify. Подробнее погугли как правильно с ними работать.
На всяк всяк случай, если, мало ли, раз в тысячу лет звезды не так встанут и сервер, вместо обработки скриптов начнет плеваться исходниками (а такое вполне возможно, если где-то слетели настройки), то, чтобы он не выплюнул ваш конфиг явками и паролями к бд, его можно поместить на директорию выше, чем папка хоста. Инклудиться из скриптов оно будет без проблем - скрипты же не ограничены хостом сервера, им доступна вся файловая система машины. А вот сервер отдать этот файлик уже физически не сможет, ни один адрес не получится промапить на каталог корневой директории хоста. А еще, лайвхак - можно вообще пароль с базы снять. Вот вообще. При этом просто в настройках самой базы надо прописать, что все запросы окромя таких--то IP, то бишь, в общем случае, 127.0.01, должны игнорироваться. Вот и не нужен пароль, как оказалось, вовсе. Если тебе нужен доступ к БД удаленно, то просто создай нового пользователя для себя. И ему разреши доступ с любых IP. Но пароль храни как зеницу ока.
Из серверных скриптов можно только небольшую точку входа оставить в публичном каталоге, а все прочее загнать под капот. --- Добавлено --- И вообще привыкайте, что корень сайта – это только часть сайта, причем в плане хранения серверного кода далеко не основная. Там по сути находится только штатная программная заглушка. Пусть даже это микродвижок – его все равно можно взять из дистра и подкрутить за пять сек.
Настрой с нуля связку серверную, поймешь, как она работает и как компоненты взаимодействуют, поймешь, что одна строчка в конфиге того же nginxa, слетевшая по причине какой-нибудь крайне неосторожной обновы, приведет к тому, что все запросы на .php-скрипты будут обрабатываться как запросы к статике, вместо того, чтобы проксироваться до указанной php-машины. И nginx не долго думая будет отдавать твои исходники как текст, если, конечно, сможет промапить их на файловую систему, от чего застраховано все, что лежит выше каталога хоста.
логина и пароля пользователя MySQL, Карл. а не пользователя твоего сайта. это две большие разницы само по себе знание исходников это ещё не катастрофа. исходники большинства движков (того же WordPress) доступны всем. пароль к базе это часть не исходников, а конфигурации. вот файлик конфигурации ты не должен просрать!
Еще есть вариант получения доступа к исходникам с возможностью записи. И тогда, если не заметишь напиханные шеллы и снифферы, тебя ничего не спасет.