Страницы

Поиск по вопросам

суббота, 4 января 2020 г.

Стоит ли стремиться убрать имя скрипта отправки данных формы из HTML-кода для повышения безопасности?

#php #html #ajax


Допустим, я не хочу, чтобы в HTML-коде формы авторизации содержалось имя скрипта
проверки данных таким образом:




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

Кстати, о подключении функции вместо имени скрипта. Видел такое решение, но судя
по тому, что у него нет плюсов, оно едва ли будет работать:



Если так, про наверняка можно вызвать PHP-функцию через AJAX без указания файла скрипта в JS-коде. Ещё раз повторюсь, что смысл всего этого - убрать из выходного HTML-кода, который любой может посмотреть с помощью инструментов разработчика в браузере, если это повысит безопасность.


Ответы

Ответ 1



В современной разработке на PHP принято использовать роутинг. Если простыми словами, то роутинг - это такая штука, которая позволит вам создавать совершенно разную логику в зависимости от того, с помощью какого HTTP-метода пользователь обратился к вашей странице. Допустим, есть у нас страница авторизации по адресу /auth (обратите внимание на то, что окончания .php тут нет, но об этом позже). Если мы обратимся к этому адресу по методу GET, то мы получим обычную форму авторизации. Но магия роутинга заключается в том, что мы можем обратиться к этому же адресу и по методу POST, например, через AJAX-запрос, который будет происходить при отправке формы авторизации, а страница будет отвечать JSON-объектом. Роутинг подразумевает использование ЧПУ (человекопонятные URL). То бишь вместо /news.php адреса ваших страниц должны выглядеть как /news. Важно понимать, что при реализации роутинга и ЧПУ вы должны не просто обрезать окончание .php, а строить целую внутреннюю карту сайта (роутинг по-русски можно обозвать словом "маршрутизация"). То есть в зависимости от адреса обращения и HTTP-метода вы выбираете скрипт(ы), которые будут выполнены. Такой подход позволяет вам скрыть исходные имена PHP-файлов и обезопасить их от прямых обращений. Это имеет смысл только в том случае, если в публичной директории у вас доступен только один PHP-файл - index.php, который является точкой входа во всю логику вашего сайта. Подробнее о том, что это такое и зачем нужно, я писал в ответе на этот вопрос: Возможно ли для пользователя увидеть исходный PHP-код сайта? Все, что я назвал выше, чаще всего используют с парадигмой MVC (Model, View, Controller). Это такая магия, которая позволяет вам отделять логику скрипта от его представления. Таким образом у вас логика и HTML-разметка почти не пересекаются. В модели находится логика, контроллер лишь перебрасывает данные из модели во вью, а вью содержит уже HTML-разметку и простейшую логику шаблонов (if и циклы). Вы можете с ужасом прочитать всё, что я написал, и ничего не понять. Потому что это довольно обширная тема, достойная серии статей, которую я пересказал вкратце своими словами. Но именно такой подход позволит вам достичь не только нормальной степени безопасности, но и поддерживать такой проект будет в тысячи раз проще. На самом деле, разумнее прибегнуть к использованию PHP-фреймворков в своих проектах, где всё это (и даже больше) реализовано из коробки. Для новичков идеальным выбором будет какой-нибудь CodeIgniter 3, в котором минимум излишнего функционала и отличная документация. Просто перейдите на любой фреймворк и большинство вопросов о безопасности и лучших практиках сами исчезнут.

Ответ 2



Имя файла-обработчика Вы не сможете скрыть, если хотите чтобы браузер о нём знал. А о чём знает браузер, знает и злой хакер. Да и смысл защищать имя файла, как это хоть как-то поможет защитится? Защищайте лучше логику скрипта. Вызов PHP-функции из JS - это сильно. Нереально, но сильно :)

Комментариев нет:

Отправить комментарий