Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Qual é a maneira correta e segura de manter um usuário conectado? biscoitos? sessão? PHP &&MYSQL


Primeiro, deixe-me dizer-lhe isto. Nada é 100% seguro. Nada é hermético e nada é sagrado. Se motivado o suficiente, um invasor quebrará todas as defesas do lado do servidor que você colocar (a menos que você esteja usando HTTPS, que é uma história diferente).

Você pode usar cookies, mas os cookies são altamente expostos e facilmente modificáveis. Nunca armazene dados privados ou níveis de acesso em um cookie. Como é facilmente roubado/modificado por um invasor.

As sessões também não são 100% seguras. O ID da sessão, que o servidor usa para identificar o cliente, é enviado de duas maneiras. uma variável $_GET (ruim), ou um cookie (melhor, mas ainda muito ruim). Ou seja, se você estiver logado como administrador, em um WiFi não seguro, um invasor habilidoso (e por habilidoso quero dizer um pr0 haxx0r que baixou um sniffer HTTP simples) pode facilmente roubar seu SESSION ID. E, embora não obtenha sua senha, o servidor identificará erroneamente o invasor como você e concederá a ele qualquer acesso que você possa ter.

Então o que fazer? As sessões são na maioria dos casos seguras. Aconselhe seus usuários a não fazerem login em uma rede não segura (ônibus, lan houses, etc.). Se você deseja permitir que sua autorização de usuário persista ao longo do tempo, é necessário um cookie. Eu costumo usar um sistema de 2 cookies se eu precisar disso:
userid=12345
hash=password_hash($userid . $hashed_password, PASSWORD_DEFAULT)

Então eu tenho algo para comparar, e os detalhes do usuário não foram revelados.

Mas, como eu disse, no final do dia, se você realmente queria proteger seus usuários, acima de tudo o mais escrito nesta resposta, obtenha HTTPS.