htaccess в качестве параметра безопасности и с помощью формы входа

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

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

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

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

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

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


person Roberto de Nobrega    schedule 18.12.2011    source источник


Ответы (2)


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

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

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

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

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

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

person sarnold    schedule 18.12.2011
comment
Спасибо за ваше время в этом ответе. Итак, в заключение, вы рекомендуете использовать htaccess в качестве системы безопасности или использовать php-код с некоторыми трюками, чтобы избежать инъекций и т. д.?? Еще раз спасибо.! - person Roberto de Nobrega; 19.12.2011
comment
Это зависит от того, что вы хотите для своего приложения: если вы хотите предоставить доступ ко всему приложению после того, как кто-то прошел аутентификацию, обязательно используйте HTTP-аутентификацию сервера. Если вы хотите предоставить детализированные элементы управления, основанные на знании того, кем является пользователь (скажем, разрешить пользователям удалять свои собственные сообщения, но не чужие сообщения), то определенно выполняйте работу в PHP с формами для аутентификации. - person sarnold; 19.12.2011
comment
Понял.! Спасибо, что нашли время развеять мои сомнения! :) - person Roberto de Nobrega; 19.12.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>";
    }
    ?>

ссылка

person Jamie Hutton    schedule 18.12.2011
comment
И это работает с именем пользователя и паролем, которые я установил в htaccess.?? Это безопасно или есть способ обнаружить учетные данные для доступа с помощью этого метода?? Спасибо.! Как насчет изменения данных htaccess с помощью php? В этом случае, чтобы использовать параметр «Забыли пароль», я имею в виду, создать новый, чтобы пользователь мог войти в систему и изменить его снова для другого, который он/она настроит.?? Моя идея состоит в том, чтобы оценить, что более безопасно, используя сам PHP или используя HTACCESS. - person Roberto de Nobrega; 19.12.2011
comment
Чтобы изменить пароль, вам нужно будет запустить скрипт на стороне сервера. вы можете посмотреть это - person Jamie Hutton; 19.12.2011
comment
Базовая аутентификация не безопасна! он отправляет пароли в текстовом эквиваленте для каждого запроса. (и дайджест-аутентификация требует хранения паролей в виде открытого текста, поэтому она также небезопасна). - person Jacco; 19.12.2011
comment
Я понимаю, что это просто демонстративный пример, но поскольку OP действительно заинтересован в безопасности, я подумал, что укажу, что этот образец кода имеет уязвимость межсайтового скриптинга. - person Cheekysoft; 19.12.2011