Вопрос

Я использовал PHP и JavaScript для создания веб-сайта моего отца.Он хочет включить систему входа в свой веб-сайт, и у меня есть проект системы с использованием PHP.Моя проблема в том, как показать кнопки, если человек вошел в систему?

Например - У вас есть Дом, Продукты, О нас, и Контакт.Я хочу иметь кнопки для Дилер, Распределитель, и, возможно, другую информацию, если пользователь вошел в систему.Так что у меня будет Дом, Продукты, О нас, Контакты, Дилер (при входе в систему дилера), Распределитель (при входе в систему дистрибьютора) и т. д.

Будет ли хорошим способом сделать это JavaScript или PHP, или, может быть, даже оба?Использование JavaScript для отображения и скрытия кнопок и PHP для проверки того, какие кнопки отображать.­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Это было полезно?

Решение

Что касается безопасности, нельзя доверять тому, что исходит от клиента:

  • Посетитель может увидеть весь ваш код (HTML и Javascript, а не PHP) и попробовать что-то новое.
  • Посетитель может даже не использовать браузер;отправить запрос с помощью скрипта тривиально просто

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

Если вы не собираетесь отображать кнопки, бесполезно отправлять HTML и изображения в браузер, а затем скрывать их с помощью Javascript.Я бы проверил с помощью PHP.

Другие советы

В вашем файле меню или там, где вы поместили:

<? require 'auth.php' ?>
<ul>
    <li><a href="">Home</a></li>
    <li><a href="">Products</a></li>
    <? if( loggedin() ): ?><li><a href="">Secret area</a></li><? endif; ?>
</ul>

Затем на страницах, требующих аутентификации, просто сделайте это:

<?php 
    require 'auth.php';
    require_login();
?>

Где auth.php может содержать:

<?php
    function loggedin(){
        return isset( $_SESSION['loggedin'] );
    }

    function require_login(){
        if( !loggedin() ){
            header( 'Location: /login.php?referrer='.$_SERVER['REQUEST_URI'] );
            exit;
        }
    }
?>

Если вы используете JavaScript для скрытия кнопок, вы открываете дыру в безопасности приложения.Злоумышленник может либо отключить JavaScript, либо применить собственный, чтобы обойти вашу безопасность.

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

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

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

<?php
require_once 'Auth.php';
// output some html
if (isLoggedIn()) {
    echo 'html for logged in user';
}
// rest of html

Для страниц, которые должны видеть только прошедшие проверку подлинности пользователи, контроллер проверяет, вошли ли они в систему, и если нет, перенаправляет их на страницу входа.

<?php
public function viewCustomer($customerId) {
    if (!isLoggedIn())
        redirectToLoginPage();
}

Все, что написал Кристиан Лескуйер, верно.Однако обратите внимание, что он сказал «Я бы», а не «Ты должен».Выбор не так уж и прост.

Прежде всего, безопасность не является проблемой при выборе.У вас должна быть проверка безопасности на сервере при выполнении действия.Какой код решит показать/скрыть кнопку, ведущую к действию, не имеет значения.

Это оставляет нам только один недостаток логики отображения/скрытия в Javascript — HTML-код, отправленный пользователю, больше, чем необходимо.Возможно, это не имеет большого значения.

Однако у логики отображения/скрытия в PHP есть минус.Требуемый PHP-код обычно представляет собой тег суп.Код Акиры представляет собой хороший пример того, как это обычно делается.

Соответствующий код Javascript, вероятно, будет выглядеть примерно так:

if (logged())
{
    elementSecretArea.style.display = "list-item";
}

(при условии, что элементы, которые могут быть скрыты, по умолчанию имеют display:none).

Этот стиль также позволяет реализовать хороший сценарий «Ajax»:пользователь видит страницу без секретной области, вводит пароль, видит секретную область, не обновляя страницу.

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

В основном, где у вас есть меню в HTML, скажем, в виде списка. <ul> <li>Home</li> </ul> вы добавляете php после </li> последнего пункта:

<?php
  if($session-logged_in) {    
?>

<li>My Account</li>

<?php  
  }
?> 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top