htaccess как опция безопасности и использование формы входа - PullRequest
1 голос
/ 19 декабря 2011

Я изучаю PHP, и я одержим идеей безопасности обучения. Я немного знаю о некоторых видах атак, таких как инъекции, кража сеансов и т. Д., Но я хотел бы написать свою собственную CMS с идеальной безопасностью (если это возможно).

Чтение Я сбрасываю на безопасность .htaccess в каталогах. Это хороший вариант, потому что все мои файлы CMS находятся в одном каталоге. Я только что прочитал это на сайте:

HTAccess является наиболее безопасным методом защиты паролем, поскольку он опирается на веб-сервер, поэтому действительные имена пользователей и пароли никогда не передаются в веб-браузер и не сохраняются в HTML, как они могут быть в других сценариях.

Это правда? Я имею в виду, что это "неумолимо"? Конечно, с дополнительной безопасностью (например, скрытие файла .htaccess).

Если это правда, я имею в виду, что нет способа взломать сайт с безопасностью .htaccess, как я могу использовать форму (вместо всплывающего окна), чтобы войти в свою CMS? Есть ли способ использовать опцию «Забыли пароль»?

Любая помощь будет оценена, как примеры и ссылки для справки.

Ответы [ 2 ]

3 голосов
/ 19 декабря 2011

HTAccess является наиболее безопасным методом защиты паролем, поскольку он опирается на веб-сервер, поэтому действительные имена пользователей и пароли никогда не передаются в веб-браузер и не сохраняются в HTML, как они могут быть в других сценариях.

Я немного боюсь человека, который написал это предложение изначально.

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

Механизм htaccess для защиты сервера также немного ошибочен.Файл .htaccess в каталогах действительно предназначен для того, чтобы клиенты на сайтах с общим хостингом могли в определенной степени контролировать переменные конфигурации Apache - что является полным началом для «полностью защищенной системы CMS» (как будто таковойчто-то было возможно. :) Вы должны ожидать полного и полного контроля над вашей конфигурацией Apache, включая все механизмы аутентификации и авторизации и контроля доступа .Файлы .htaccess перезагружаются, повторно анализируются и переконфигурируют сервер при каждом отдельном запросе, но конфигурация Apache для всего сайта загружается один раз, анализируется один раз и настраивает сервер один раз.

Механизмы на основе сервера полагаются либо на базовую аутентификацию HTTP (что примерно похоже на выкрикивание вашего имени пользователя и пароля в многолюдной комнате), либо на аутентификацию дайджеста HTTP (что значительно лучше иесли ваши пользователи выбирают хорошие пароли, вероятно, даже смутно безопасно).Туннелирование с одного на TLS было бы целесообразно.(Черт, если вы действительно хотите "безопасность", вы можете даже попытаться использовать клиентские сертификаты .)

Обратите внимание, что эти механизмы просят браузервсплывающее диалоговое окно для аутентификации.Если вы хотите интегрировать имя пользователя и пароль в свою веб-страницу «красивым» способом, то вам нужно будет выполнить все проверки подлинности имени пользователя и пароля посредством отправки формы, сохранения информации о сеансе и проверки внутренних механизмов безопасности, чтобы обеспечитьавторизация всякий раз, когда это необходимо.Вы будете нести ответственность за все.(И, опять же, TLS - это путь.) Веб-сервер не может вам помочь.(И, кроме того, вы не будете отправлять имена пользователей и пароли в браузер в HTML ... блин. Это все еще пугает меня.)

2 голосов
/ 19 декабря 2011

это то, что вы ищете?это позволит вам использовать форму 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>";
    }
    ?>

reference

...