Segurança - usuários ao acessar com seus dados de login, loga em outro usuário

Olá!
Estamos enfrentando problema com poucos usuários da aplicação criamos, mas acredito que é um problema sério. Ou usuário loga normalmente, utiliza em várias situações, mas em um determinado momento, ao logar, acaba acessando dados de outros usuários. A aplicação está sendo usada por mais de 5 mil usuários e já temos 5 usuários que relataram esse problema.
Já verificamos toda segurança do sistema e está habilitada. Seguimos todas as orientações na montagem do sistema em relação à segurança e logs.
Fiquei preocupado, porque hoje, em um laboratório de informática de uma escola, um professor foi acessar o sistema, ligou a máquina linux configurada para não guardar informações, no entanto ao digitar os seus dados apareceu dados de uma outra professora. Inicialmente, imaginamos que algum professor tivesse ter acessado o sistema por aquele computador, só que as máquina do laboratório foram formatadas e nenhum professor acessou o sistema por aquele computador.
Como vcs já sabem a parte de login não tem muito segredo. Pensamos que algum detalhe tivéssemos esquecido, lemos novamente o tutorial, vimos os vídeos, e foi o que sempre fizemos.
Imaginamos também que tivesse sido algum problema de ip das máquinas, mas mesmo assim, o usuário não pode acessar dados de outros.
Queria saber se já ocorreu com alguém e se alguém pode nos ajudar.

Se ficar abrindo usuários diferentes em diversas abas no mesmo navegador para o memos domínio/ip isto acontece por misturar a sessão. É uma limitação do navegador.
Agora é estranho após fechar o navegador a sessão persistir.

Acho que este post do @InfinitusWeb pode dar alguma luz:

Olá, meus amigos!
Infelizmente o problema não foi resolvido!
O sistema faz resete de todas as variáveis globais para que não haja problema.
Também já revisamos todas variáveis das aplicações para ver se não estavam configuradas corretamente. Conforme suporte da Scriptcase essas variáveis devem estar marcadas como SESSION.
E mesmo assim o problema acontece. Para que possam visualizar, percebam a imagem a seguir:

Quero que perceba que o usuário está logado como Caroline e os dados são de outro usuário: Marilze.

Foi orientado que resetássemos as variáveis globais. Listamos todas as globais e resetamos:

sc_reset_global([usr_login], [usr_email], [usr_priv_admin], [usr_name], [usr_emailedu], [usr_externo], [usr_status], [usr_gerencia], [usr_setor]);

Também verificamos todas as variáveis e deixamos configurado como SESSION (Aplicação/ Variáveis Globais), seguindo orientações anterior.

Se alguém puder nos ajudar, seremos gratos!

Em modo anônimo o problema persiste?

O que percebemos é que o problema aparece em momentos de grande pico. A aplicação roda sem problema, mas, em um determinado momento, há essa confusão com os dados.
Já resetamos todas as globais no início da aplicação.
E são dados de usuários que não utilizaram a mesma máquina.
Mas como falamos, não acontece a todo momento.
Tem duas semanas que ninguém relatou o problema.

Era bom ver se não é um cache do lado do servidor

Também achavamos que era cache e, por isso, resetamos todas as variáveis globais.

Oi Jailton nos tamben temos o mesmo problema, e nao sabemos como contornar. sera que e um bug d sc

A senha deve estar salva no navegador.
Peguei uma situação assim.
Apaguei do navegador e voltou ao normal.
Alguns antivírus como o kaspersky também tem um componente que guarda senha e usuário.

Já tentamos até instalar novamente a parte de segurança do projeto inteiro, mas nada adiantou. Já contactamos com o suporte, mas até agora nenhuma resposta que resolva o problema.

Ao logar com o CPF a aplicação encaminha para app_menu, e imprimimos o nome do usuário na parte superior. O nome aparece corretamente basicamente sempre, mas em raros acessos o nome de quem ligou não é de quem acessou. Ao sair e abrir novamente aparece o nome correto. Mas os nomes dos usuários que aparecem nunca acessaram aquele computador. Já reservamos todas as globais. Já conferimos todos os posts e gets. Buscamos também uma solução.

No login limpe os cookies com php.

Haroldo, a sua sugestão é que execute um código em PHP quando chamar o login, antes de entrar com os dados é isso? Se tiver um exemplo do código, seremos gratos!

Já viu se toda noite no tmp que tem os dados das sessões está sendo limpo no servidor?

Seguindo a orientação do Haroldo, coloquei o código para eliminar todos os cookies.

No app_login, no menu Programação, inseri novo método php e denominei de zerar_cookie com o seguinte script:

function unset_cookie($name)
{
$host = $_SERVER[‘HTTP_HOST’];
$domain = explode(’:’, $host)[0];

$uri = $_SERVER['REQUEST_URI'];
$uri = rtrim(explode('?', $uri)[0], '/');

if ($uri && !filter_var('file://' . $uri, FILTER_VALIDATE_URL)) {
    throw new Exception('invalid uri: ' . $uri);
}

$parts = explode('/', $uri);

$cookiePath = '';
foreach ($parts as $part) {
    $cookiePath = '/'.ltrim($cookiePath.'/'.$part, '//');

    setcookie($name, '', 1, $cookiePath);

    $_domain = $domain;
    do {
        setcookie($name, '', 1, $cookiePath, $_domain);
    } while (strpos($_domain, '.') !== false && $_domain = substr($_domain, 1 + strpos($_domain, '.')));
}

}


E depois o chamei no onScriptInit da seguinte forma:

zerar_cookie();

Até agora, tem uma semana, ninguém reportou o problema. Espero que tenha conseguido resolver!

2 Curtidas

Infelizmente, tivemos um novo caso de usuário relatando o problema.

Para mim, é problema no armazenamento dos valores das variáveis: SESSION, POST e GET.

Não tenho outra explicação. Já resetamos todas as variáveis globais, deixamos várias variáveis como SESSION e mesmo assim o problema não foi resolvido.

Já pagamos o suporte cobre e, desde outubro, não tivemos nenhuma resposta do suporte do Scriptcase.

Pedimos que se alguém tenha uma luz, um caminho, auxilie-nos!

@Jailton_Cristalino_P jailton são mais de 5 mil usuários. Já exeperimentou fazer um teste. Separar uma parte destes usuários para conectar via subdomínio com seu próprio pool em php-fpm.
Talvez o SO + php + apache ou nginx não esteja conseguindo gerenciar de forma eficiente as sessões.
Mas se separar certa quantidade de clientes em subdomínios com php-fpm + pools em separados ajude.
Nesta hora acho que vale qualquer teste. Já que nem a netmake se posicionou ainda.

PS: Vale também fazer um load balance com os servidores web.
As conexões passam por algum tipo de proxy (squid por exemplo) ou cdn?

Concordo com o Alexandre, o problema pode não estar na aplicação e sim como o sistema operacional esta gerenciando, pode ser que o sistema operacional não suporte muitos arquivos no diretório

mas discordo com o subdiretorio que o session save path vai ser o mesmo que esta configurado no php.ini, o php permite colocar as sessões em diretórios separados, mas ai acho que teria que ter intervenção da NetMake para gerenciar isto no código criado, e isto vai ser meio difícil.

eu procuraria o problema ai, que se ate uma quantidade funciona e conforme vai aumentando ele se perde, veja o diretório que esta em session.save-path do seu php ini, veja a quantidade de arquivos converse com o administrador do servidor, pode ser ai o problema, veja o tamanho que esta destinado para o local, pode ser que depois de cheio ele substitua uma sessão pela outra ou se existe limite de arquivos para o diretório e o SO não esta gerenciando.