Впервые за несколько лет я пытаюсь реализовать небольшой проект в свободное время. Ничего особенного, и он будет работать только на локальном компьютере. Но так как я хочу узнать что-то новое, я хочу сосредоточиться на динамическом контенте.
Пользователь должен войти в систему, чтобы получить доступ к целевой странице.
И показанный контент зависит от прав пользователя.
Раньше я просто смешивал PHP с HTML и получал некоторые плохие коды (на мой взгляд), потому что у меня был PHP-код в теге body, например.
Мой код на каждой странице и подстранице всегда начинался с
<?php
session_start();
//check permissions and if the user is logged in
//redirect to login.php if not
//create navigation bar based on user permission or include another .php file
?>
И иногда я даже повторял HTML-код.
Впервые я пытаюсь использовать «современные» технологии, чтобы полностью отделить бэкэнд от внешнего интерфейса и сохранить код .html кода в чистоте от любых фрагментов PHP внутри.
Я пытаюсь использовать базовый HTML / CSS / JS для внешнего интерфейса и использовать любой (прямо сейчас PHP) для внутреннего интерфейса.
Прямо сейчас моя «проверка», есть ли у пользователя разрешение на просмотр содержимого, выполняется с помощью ajax и PHP-скрипта.
У меня есть обработчик события load для страниц (или разделов), и я передаю значение в скрипт PHP, вот пример для моего start.html
document.addEventListener('DOMContentLoaded', function() {
var verusr = new XMLHttpRequest();
verusr.open('GET', '/inc/php/login.php');
verusr.onload = function() {
if (verusr.status === 200) {
if(verusr.responseText !== 'true') {
window.location = 'login.htm';
}
}
else {
alert('Request failed.');
}
};
verusr.send();
}
Мой login.php выполняет всю эту проверку, создает сеанс и выводит true или false.
Это безопасный способ защитить сайт?
Я думаю, не потому, что пользователь может видеть контент, если он отключает JavaScript, верно?
Таким образом, обходной путь должен заключаться в динамическом построении содержимого страницы.
Прямо сейчас моя навигация выглядит так:
<nav class="main">
<ul>
<li><a href="#1">Test1</a></li>
<li><a href="#2">Test2</a></li>
<li><a href="#3">Test3</a></li>
<li class="right"><a href="/inc/php/logout.php">Logout</a></li>
</ul>
</nav>
Это то, что любой увидит с отключенным JavaScript, если он зайдет на мой сайт. Это не будет большой проблемой, но это тоже не приятно.
Возможный обходной путь здесь должен был бы построить страницу более динамично, правильно?
Например, я мог бы возвратить массив JSON вместо true / false, который содержит все, что доступно, и вызвать функцию «createNav», которая проходит через каждый элемент массива и создает элемент списка?
Будет ли это безопасный подход? Поскольку до запуска JS нет содержимого, вы не можете отключить его, чтобы увидеть что-либо.
Но, несмотря на вопрос безопасности, это достаточно быстро?
Я бы планировал продолжить этот подход. Если кто-то щелкнет ссылку # 1, это вызовет публикацию AJAX (передача «1» скрипту), и скрипт решит, какие данные показывать, но JS решит, как создать контент.
Или было бы достаточно вернуть «ссылку» на файл .html, который затем может быть включен? И этот файл имеет событие onload, чтобы предотвратить прямой доступ к нему?
Потому что раньше я защищал свои страницы и подстраницы (которые были включены) с помощью фрагмента PHP, как описано выше, но защитить его с помощью AJAX, взаимодействующего с этим фрагментом, для меня сложно, поскольку вам не нужно обязательно запускать сценарий, или вы могли манипулировать возвратом скрипта (или изменить сам скрипт).
Но когда в первый момент на клиенте нет данных (несмотря на таблицу стилей), это должно помочь.
Я надеюсь, что смогу объяснить, что я имел в виду, и с нетерпением жду вашего мнения.
Вы можете разработать всю свою бизнес-логику в бэкэнде, используя PHP, и создать API для каждого вида деятельности / содержимого веб-интерфейса. Эти API будут только принимать данные и отправлять ответ только в формате JSON.
Теперь все, что вам нужно сделать, это всегда использовать теги привязки или <input type="button">
только для отправки данных или перенаправления на другую страницу и написания функций JavaScript для обработки ответа / данных JSON для отображения содержимого.
Я думаю, что это будет аккуратный и чистый подход, чтобы отделить серверную часть от внешнего интерфейса и сохранить код .html в чистоте от любых фрагментов PHP внутри.
Хотя вам придется принять все основные решения (бизнес-логика, проверка разрешений, навигация на основе разрешений, блоки страниц на основе разрешений для отображения / скрытия и их содержимое) в API-интерфейсе сервера, возвращая некоторые флаги или JSON из нескольких флагов / данных и его скажет интерфейсу (функции javascript), что показывать, а что нет, и что отображать каким образом. Вы также должны сделать это очень строго при построении массивов данных / флагов и возврате JSON через API, который фактически создаст ваш сайт с использованием внешнего интерфейса (HTML / JS / CSS).
Так много теории … Я знаю, но архитектурный подход к приложению трудно объяснить на примере. Но для дальнейшего объяснения / примеров я полностью согласен с @Eugene Anisiutkin (сломай его).
Других решений пока нет …