htaccess как опция безопасности и использование формы входа
Я изучаю PHP, и я одержим изучением безопасности. Я знаю немного о каких-то атаках, таких как инъекции, кража сессий и т. Д., Но я хотел бы написать свою собственную CMS с идеальной безопасностью (если это возможно).
Чтение бросаю на безопасность.htaccess в каталогах. Это хороший вариант, потому что все мои файлы CMS находятся в одном каталоге. Я только что прочитал это на сайте:
HTAccess является наиболее безопасным методом защиты паролем, поскольку он опирается на веб-сервер, поэтому действительные имена пользователей и пароли никогда не передаются в веб-браузер и не сохраняются в HTML, как это может быть в других сценариях.
Это правда? Я имею в виду, что это "неумолимо"? Конечно, с дополнительной безопасностью (например, скрытие файла.htaccess).
Если это правда, я имею в виду, что нет способа взломать сайт с безопасностью.htaccess, как я могу использовать форму (вместо всплывающего окна), чтобы я мог войти в свою CMS? Есть ли способ использовать опцию "Забыли пароль"?
Любая помощь будет оценена, как примеры и ссылки для справки.
2 ответа
HTAccess является наиболее безопасным методом защиты паролем, поскольку он опирается на веб-сервер, поэтому действительные имена пользователей и пароли никогда не передаются в веб-браузер и не сохраняются в HTML, как это может быть в других сценариях.
Я немного боюсь человека, который написал это предложение изначально.
Имена пользователей и пароли никогда не будут передаваться через веб-браузер или храниться "в HTML", за исключением случаев, когда они не соблюдают правила гигиенического программирования. То, что кто-то даже представил бы это как "вариант" как аргумент соломенного человека, является хлопотным. Я рекомендую найти лучшее руководство.
htaccess
Механизм для безопасности сервера также немного ошибочен. .htaccess
файл в каталогах действительно предназначен для того, чтобы клиенты на сайтах с общим хостингом могли в определенной степени контролировать переменные конфигурации Apache, что совершенно не является началом "полностью защищенной системы CMS" (как если бы это было возможность.:) Вы должны ожидать полного и полного контроля над вашей конфигурацией Apache, включая все механизмы аутентификации и авторизации и контроля доступа. .htaccess
файлы перезагружаются, повторно анализируются и переконфигурируют сервер при каждом отдельном запросе, но конфигурация Apache для всего сайта загружается один раз, анализируется один раз и настраивает сервер один раз.
Механизмы на основе сервера полагаются либо на базовую аутентификацию HTTP (что примерно похоже на выкрикивание вашего имени пользователя и пароля в многолюдной комнате), либо на дайджест-аутентификацию HTTP (что значительно лучше, и если ваши пользователи выбирают надежные пароли, возможно, даже в некоторой степени безопасны), Туннелирование любого через TLS было бы разумно. (Черт, если вы действительно хотите "безопасность", вы можете даже попытаться использовать клиентские сертификаты.)
Обратите внимание, что эти механизмы просят браузер открыть диалоговое окно для аутентификации. Если вы хотите интегрировать имя пользователя и пароль в свою веб-страницу "красивым" способом, то вам нужно будет выполнить все проверки подлинности имени пользователя и пароля посредством отправки формы, сохранения информации о сеансе и проверки ваших внутренних механизмов безопасности, чтобы обеспечить авторизация всякий раз, когда это необходимо. Вы будете нести ответственность за все. (И, опять же, TLS - это путь.) Веб-сервер не может вам помочь. (И, кроме того, вы не будете отправлять имена пользователей и пароли в браузер в формате HTML... блин. Это все еще пугает меня.)
Это то, что вы ищете? это позволит вам использовать форму php для входа через htaccess
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if user hits Cancel button';
exit;
} else {
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}
?>