Pergunta

Tenho usado PHP e JavaScript para construir o site do meu pai.Ele quer incorporar um sistema de login em seu site, e eu tenho o design do sistema usando PHP.Meu problema é como faço para mostrar botões se a pessoa estiver logada?

Por exemplo - Você tem Lar, Produtos, Sobre nós, e Contato.Eu quero ter botões para Distribuidor, Distribuidor, e talvez outras informações se o usuário estiver logado.Então eu terei Lar, Produtos, Sobre nós, Contatos, Revendedor (se login do revendedor), Distribuidor (se login do distribuidor) e assim por diante.

O JavaScript seria uma boa maneira de fazer isso ou o PHP, ou talvez ambos?Usando JavaScript para mostrar e ocultar botões e PHP para verificar quais botões mostrar.­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Foi útil?

Solução

Em relação à segurança, você não pode confiar no que vem do cliente:

  • O visitante pode ver todo o seu código (HTML e Javascript, não PHP) e experimentar coisas
  • O visitante não pode sequer utilizar um navegador;é trivialmente fácil enviar uma solicitação com um script

Isso significa que ocultar os botões é um bom design de interface do usuário (porque você não pode usá-los se não estiver logado).Mas não é um recurso de segurança.O recurso de segurança é verificar, no servidor, se o visitante está logado antes de cada ação que o requeira.

Se você não pretende mostrar os botões, não adianta enviar o HTML e as imagens para o navegador e depois ocultá-los com Javascript.Eu verificaria com PHP.

Outras dicas

No seu arquivo de menu ou onde você coloca:

<? 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>

Então, nas páginas que exigem autenticação, faça o seguinte:

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

Onde auth.php pode conter:

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

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

Se você usar javascript para ocultar os botões, abrirá uma falha de segurança no aplicativo.Um usuário mal-intencionado pode desabilitar o javascript ou aplicar algum deles para contornar sua segurança.

Sugiro usar PHP para escolher renderizar os botões ou não.Faço isso no .NET com bastante frequência.

Você também poderá verificar o acesso do usuário no lado do servidor sempre que ele tentar usar um botão restrito.

O que fizemos no meu trabalho foi ter uma biblioteca que oferece funções como verificar se o usuário está logado.Por exemplo:

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

Para páginas que apenas usuários autenticados devem ver, o controlador verifica se eles estão logados e, caso contrário, os redireciona para a página de login.

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

Tudo o que Christian Lescuyer escreveu está correto.Observe, entretanto, que ele disse “eu faria” e não “você deveria”.A escolha não é tão fácil.

Em primeiro lugar, a segurança não é um problema na escolha.Você deve fazer uma verificação de segurança no servidor ao executar uma ação.Qual código decide mostrar/ocultar o botão que leva à ação é irrelevante.

Isso nos deixa com apenas uma desvantagem de fazer a lógica mostrar/ocultar em Javascript - o HTML enviado ao usuário é maior que o necessário.Isso pode não ser grande coisa.

Porém, ter lógica mostrar/ocultar no PHP tem um sinal de menos.O código PHP necessário geralmente é um sopa de etiqueta.O código de Akira fornece um bom exemplo de como isso geralmente é feito.

O código Javascript correspondente provavelmente seria algo assim:

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

(assumindo que os elementos que poderiam ser ocultados tenham display:none por padrão).

Este estilo também permite um bom cenário "Ajax":o usuário vê uma página sem área secreta, insere a senha, vê a área secreta sem atualizar a página.

Portanto, se você já possui um script que é executado quando o documento é carregado por outros motivos, eu consideraria seriamente ter uma lógica de mostrar/ocultar nele.

Basicamente onde você tem seu menu em html, digamos como uma lista <ul> <li>Home</li> </ul> você adiciona php depois </li> do último item:

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

<li>My Account</li>

<?php  
  }
?> 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top