Система входа в систему с Ajax и PHP - как я могу улучшить безопасность и контролировать права пользователей? - PullRequest
0 голосов
/ 06 февраля 2019

Впервые за несколько лет я пытаюсь реализовать небольшой проект в свободное время.Ничего страшного, и он будет работать только на локальном компьютереНо так как я хочу узнать что-то новое, я хочу сосредоточиться на динамическом контенте.

Пользователь должен войти в систему, чтобы получить доступ к целевой странице.И показанный контент зависит от прав пользователя.

Раньше я просто смешивал 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-скриптом.

У меня есть обработчик события для события загрузки страниц (или разделов) и я передаю значение в 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 Array вместо true / false, который содержит все, что доступно, и вызвать функцию «createNav», которая перебирает все элементы массива и создает элемент списка?

Это был бы безопасный подход?Поскольку до запуска JS нет содержимого, вы не можете отключить его, чтобы увидеть что-либо.

Но, несмотря на вопрос безопасности, достаточно ли быстро?

Я бы планировал продолжить этот подход.Если кто-то щелкнет ссылку # 1, это вызовет публикацию AJAX (передача «1» сценарию), и сценарий решит, какие данные отображать, но JS решит, как создать содержимое.

ИлиДостаточно ли вернуть «ссылку» на файл .html, который может быть включен тогда?И у этого файла есть событие onload, чтобы предотвратить прямой доступ к нему?

Поскольку ранее я защищал свои страницы и подстраницы (которые были включены) с помощью фрагмента PHP, как описано выше, но защищал его с помощью AJAX, взаимодействующего с этимФрагмент кода сложен для меня, потому что вам необязательно запускать сценарий или вы можете манипулировать возвратом сценария (или изменить сам сценарий).

Но когда нет никаких данныхКлиент (несмотря на таблицу стилей) в первый момент должен помочь.

Я надеюсь, что смогу объяснить, что имел в виду, и с нетерпением жду ваших мнений.

1 Ответ

0 голосов
/ 06 февраля 2019

Вы можете разработать всю свою бизнес-логику в бэкэнде, используя PHP, и создать API для каждого вида деятельности / содержимого веб-интерфейса.Эти API будут только принимать данные и отправлять ответ только в формате JSON.

Теперь все, что вам нужно сделать, это всегда использовать якорные теги или <input type="button"> только для отправки данных или перенаправления на другую страницу и написания функций JavaScript.для обработки ответа / данных JSON для отображения содержимого.

Я думаю, что это будет аккуратный и чистый подход, позволяющий отделить бэкэнд от внешнего интерфейса и сохранить код .html в чистоте от любых фрагментов PHP внутри.

Хотя вам придется принять все основные решения (бизнес-логика, проверка разрешений, навигация на основе разрешений, блоки страниц на основе разрешений для отображения / скрытия и их содержимое) в API-интерфейсе бэкэнда, возвращая некоторые флаги или JSON из нескольких флагов / данныхи он скажет веб-интерфейсу (функции javascript), что показывать, а что нет и что отображать каким образом.Вы также должны сделать это очень строго при построении массивов данных / флагов и возврате JSON через API, который фактически создаст ваш сайт с использованием внешнего интерфейса (HTML / JS / CSS).

Так много теории ... Я знаюно архитектурный подход к приложению трудно объяснить на примере.Но для дальнейшего объяснения / примеров я полностью согласен с @Eugene Anisiutkin (сломай его).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...