Programação

quinta-feira, 20 de fevereiro de 2020

Cookies e Sessões em PHP

A troca de dados pessoais suscita grandes preocupações entre os utilizadores da Internet.

segurança proporcionada pelos Browsers é garantida atualmente por protocolo TLS (Transport Layer Security), que utiliza a criptografia nas comunicações trocadas entre o cliente e o servidor web, impossibilitando assim a intercepção das mesmas.

HTTPS  (Hyper Text Transfer Protocol Secure) é uma implementação do protocolo HTTP sobre uma camada adicional de segurança que utiliza o protocolo segurança TLS (substituiu protocolo SSL).
Podemos dizer que HTTPS   = HTTP + TLS


COOKIES
Os cookies foram desenvolvidos em 1994 por Lou Montulli e John Giannandrea, programadores da Netscape Communications, com o objetivo de determinar se os visitantes do site da Netscape tinham acedido anteriormente.
  •  Um cookie  é pequeno ficheiros de texto específico para cada utilizador Browserque é armazenados no computador ou smartphone do utilizador
  •  cookie é criado/definido quando o utilizador visita um website pela primeira vez, com o objetivo de guardar as preferências de navegação do utilizador  
  • Os cookies são geridos pelos browsers: a maioria browsers oferece ferramentas para ver e editar/apagar estes pequenos ficheiros;
  •  cookies têm um tempo de vida limitado

Existem 2 tipos de cookies:

  • Cookies originais/primários: criados pelo website que o utilizador visita.  

  • Cookies de terceiros: criados por outros websites. Um site que um utilizador visita pode incorporar conteúdo de outros sites, por exemplo, imagens, anúncios e texto. Qualquer um destes sites pode guardar cookies e outros dados para personalizar a sua experiência.


Criar uma Cookie em PHP

Através função setcookie 


setcookie(name, value, expire, path, domain, secure, httponly);

ParâmetroDescrição
nameNecessário. Especifica o nome do cookie
valueOpcional. Especifica o valor do cookie
expireOpcional. Especifica quando o cookie expira.
Exemplo: time()+ 60*60*24*30  corresponde a  30 dias.
 Se parâmetro é omitido ou colocado a 0, o cookie deverá expirar quando fechar o Browser.the session  Por defeito é 0
pathOpcional. Especifica o caminho do server do cookie.
 If set to "/", the cookie will be available within the entire domain.
 If set to "/php/", the cookie will only be available within the php directory
and all sub-directories of php.
The default value is the current directory that the cookie is being set in
domainOptional. Specifies the domain name of the cookie.
 To make the cookie available on all subdomains of example.com,
 set domain to "example.com".
Setting it to www.example.com will make the cookie only available in the www subdomain
secureOptional. Specifies whether or not the cookie should only be transmitted over a secure HTTPS connection. TRUE indicates that the cookie will only be set if a secure connection exists.
Default is FALSE
httponlyOptional. If set to TRUE the cookie will be accessible only through the HTTP protocol (the cookie will not be accessible by scripting languages). This setting can help to reduce identity theft through XSS attacks. Default is FALSE



 a função setcookie() deve aparecer ANTES da tag <html>




Script:
1- Criar o script com tempo de vida limitado a 1 mês (60 seg* 60 minutos * 24horas *30 dias)
    2- Correr o script no Browser ; 
    3- será criado a Cookie "MyCookie"
    4  - visualizar a cookie no localhost


Visualizar a Cookie 
 Definições do Browser  (definições--> avançadas--> privacidade e segurança
-->Definições de sites
--> Cookies de Terceiros


JÁ NÃO se VISUALIZA COOKIES DESTA FORMA ABAIXO

Definições do Browser



Ler Cookies  

Sempre que é criada uma COOKIE, é criada uma variável global
um array associativo $_COOKIE com o índice (1ºargumento) e o valor (2ºargumento)

Exemplo anterior


RELEMBRAR:
 a função setcookie() deve aparecer ANTES da tag <html>




EXERCÍCIO:

1-  criar o script que cria a cookie;
2- de seguida, criar outro script que verifica se a cookie já existe (Utilização da função isset para verificar se a Cookie está criada) e escreve o nome e o conteúdo da Cookie através da utilização do array associativo $_COOKIE


// 86400 = 1 day


Faça reload da página para visualizar o valor da Cookie





Cookie - exercício Contador de Visitas

Caso não exista a Cookie, esta é criada com valor  igual a 1
caso contrário, a variável $numeroVisitas será igual ao valor da Cookie, sendo incrementada 1 unidade sempre que faz reload à página (F5)

Primeira visita ao site$_COOKIE["$nome"] = 1 e depois sempre que faça o refresh da página website, o valor do número de visitas será incrementado;



Visualizar todas as Cookies criadas até ao momento

usar o ciclo foreach  ou print_r

Visualiza todas os dados contidos no array  $_COOKIE



APAGAR COOKIES

setcookie (nome, "  ",   time() - 3600    ); 
// colocar tempo de expiração negativo ou definir o valor como vazio ''



As COOKIES e as SESSÕES têm de ser criadas/declaradas antes de qualquer tag HTML



 Algumas das principais finalidades dos Cookies e Sessões:
  • Permitir um login automático, evitando assim a necessidade de inserir novamente as credenciais de autenticação;
  • Personalizar o conteúdo de um website, armazenando as suas preferências, de forma a que o site possa parecer diferente para cada utilizador;
  • Manter o controlo de artigos adicionados ao carrinho de compras;
  • Registar a atividade do utilizador, tais como histórico de navegação, clique em determinados botões da página, etc.  (pplware)


  • O cookie é criado/definido quando o utilizador visita um determinado site pela primeira vez. 

Daí em diante, cada vez que o utilizador carregar o website, o navegador envia o cookie para o servidor web de modo a poder manter o controlo da atividade anterior do utilizador.



Por exemplo, ao visitar um site, este pode entregar um cookie identificando-o como utilizador X. Se sair do site e, em seguida, aceder novamente, o cookie será usado pelo website para reconhecer que é o mesmo utilizador X que tinha acedido anteriormente.

Um exemplo comum é um cookie de autenticação. Quando o utilizador efetua login num determinado website, este devolve um cookie que identifica a conta do utilizador e confirma que o login foi realizado com sucesso. Quando existir nova interação com o site, ele vai usar esse cookie como confirmação de que o utilizador em questão é o mesmo que fez o login.

Os cookies não são nenhum software nem vírus, uma vez que eles não são capazes de auto executar ou de se espalharem, como outros vírus podem fazer, no entanto, estes são capazes de rastrear a atividade de navegação do utilizador.

Que tipo de cookies existem?

Cookies de Sessão

São temporários caso nenhuma data de término seja especificada aquando da sua criação. Estes ficam armazenados na memória do Browser apenas até que este seja fechado, Representam menos risco em termos de segurança e são usados para os carrinhos de compras, de forma a controlar os elementos da página mostrados a um utilizador durante uma única visita.

Cookies Permanentes

De longo prazo e marcados pelo emissor com uma data de validade, são armazenados pelo navegador, mesmo depois de fechado. Estes são enviados para o servidor da página web sempre que visitar o site que emitiu o cookie ou sempre que visualizar qualquer site que contenha um recurso, como um anúncio, cujo emissor do cookie é o mesmo.
Assim, os cookies permanentes rastreiam a atividade do utilizador, não só no site que o emitiu, mas também em qualquer outro que inclua um recurso emitido pelo mesmo.
Sites como Google Facebook usam este mecanismo para criar um registo de atividade do utilizador através de vários sites. (fonte pplware)

Para que fins utilizamos cookies?  (fonte Altice)

- Cookies estritamente necessários - Permitem que navegue no website e utilize as suas aplicações, bem como aceder a áreas seguras do website. Sem estes cookies, os serviços que tenha requerido não podem ser prestados.
- Cookies analíticos - São utilizados anonimamente para efeitos de criação e análise de estatísticas, no sentido de melhorar o funcionamento do website.
- Cookies de funcionalidade - Guardam as preferências do utilizador relativamente à utilização do site, para que não seja necessário voltar a configurar o site cada vez que o visita.
- Cookies de terceiros - Medem o sucesso de aplicações e a eficácia da publicidade de terceiros. Podem também ser utilizados no sentido de personalizar um widget com dados do utilizador.
Cookies de publicidade - Direcionam a publicidade em função dos interesses de cada utilizador, por forma a direcionar as campanhas publicitárias tendo em conta os gostos dos utilizadores, sendo que, além disso, limitam a quantidade de vezes que vê o anúncio, ajudando a medir a eficácia da publicidade e o -sucesso da organização do website.
--------------------------------------------
Exemplo de Cookies utilizados pela TAP Portugal
Cookie
Nome
Finalidade
Mais Informações
Google
Maps

SID
SAPISID
APISID
SSID
HSID NID
PREF

Cookies utilizados pelo Google para
saber quantas pessoas estão a usar o
Google Maps.

Clique aqui para
saber mais sobre
a proteção da
privacidade no
Google

Google
Analytics

_utma
_utmb
_utmc
_utmz
_unam

Estes cookies são utilizados para
recolher informações sobre como os
visitantes utilizam o nosso sítio Web.
Usamos a informação para criar
relatórios e para nos ajudar a melhorar
o sítio. Os cookies recolhem
informações de forma anónima,
incluindo o número de visitantes, os
sítios de onde provêm, as páginas que
visitaram, e o número de vezes que um item é partilhado e quantas novas
visitas se devem a essa partilha.





Possíveis propriedades dos Cookies

ver   https://eduardogadotti.com/2021/11/28/cookies-e-sessao/#XSS

Os cookies possuem 3 propriedades que são possíveis fazer gestão, sendo todas para o tratamento de questões de segurança.

  • HttpOnly

Ao

ativar esta propriedade

, faz com que código que está rodando seu browser do sistema, não consiga aceder diretamente a informação contida no cookie. Em outras palavras, as rotinas javascript de front-end não poderão aceder à informação do cookie.


  • Secure
Com a propriedade ativa, irá mitigar a possibilidade de interceptação da informação através de tráfego não criptografado (HTTP), quando há exploração de Men in th Midle (MitM)
Cookie não será enviado ou recebido caso as requisições não estejam trafegando através de HTTPS.

O propósito principal do atributo SameSite é mitigar os ataques por Cross-Site Request Forgery (CSRF), reduzindo a possibilidade de phishing utilizando sua aplicação, roubo de sessões ou acionamento de métodos de forma arbitrária.
O atributo possui 3 possíveis valores: None, Lax e Strict.


Recomendação é que sempre se ative as propriedades httpOnly e secure.



Recuperar ou não o valor do cookie usando JavaScript

Criar cookies seguros utilizando HttpOnly
 

com atributo o HttpOnly "TRUE" não é possível recuperar o cookie com o JavaScript  



EXEMPLO

setcookie("NewCookie", "NEW cookie prof ester", time() + 3600*24, "/php/m5", "localhost", TRUE, TRUE);

$secure = true; // if you only want to receive the cookie over HTTPS
$httponly = true; // prevent JavaScript access to session cookie




SESSION's   -  SESSÕES

- As SESSION's (sessões) são pequenos ficheiros de texto guardados na pasta c:\xampp\tmp  no servidor web (Apache) e não no cliente (Browser).

- Estes ficheiros não podem ser acedidos pelo utilizador uma vez que estão guardados no servidor web

- Quando se cria uma sessão é também criado uma Cookie de sessão (chamada PHPSESSID), com informação do ID da sessão no servidor Web.

- é criada uma Variável Global, um array associativo $_SESSION

- SESSION's são muito utilizadas para autenticação através de Login e para controlo de acesso a determinadas páginas web por parte dos utilizadores.



Criar  e Usar uma SESSÃO

As  SESSÕES têm de ser criadas/declaradas antes de qualquer tag HTML

1. Iniciar/Criar uma session:    
          utilizar a função session_start();

2. Definir as variáveis de Sessão: 
     usar Variável Global  $_SESSION
           
    Exemplo:      $_SESSION["nome_variavel"]= "frase " ;


3. Executar o script  no Browser ...



EXEMPLO de criação de uma SESSION:





neste código há 2 variáveis de sessão 

 $_SESSION["utilizador"]               $_SESSION["password"]

que lhe foram atribuídos determinados conteúdo 

 $_SESSION["utilizador"] ="Ester"              $_SESSION["password"]="1234"


Exemplo criação de uma SESSION e visualização das variáveis globais:
temos um script em PHP que inicializa 2 variáveis de sessão e logo a seguir escreve os dados dessas variáveis de sessão 


EXECUTAR O SCRIPT no Browser para visualizar as sessões




ou também pode utilizar a função print_r($_SESSION)



VISUALIZAÇÃO DA SESSION no SERVIDOR 

o ficheiro da SESSION está guardado   c:\xampp\tmp no servidor Web  (WampServer na pasta c:\wamp\tmp )

Quando se cria uma sessão é criado o ficheiro da sessão na pasta c:\xampp\tmp\ e também é criado o COOKIE de SESSÃO (PHPSESSID)


JÁ NÃO se VISUALIZA COOKIES DESTA FORMA ABAIXO

Verifique nas Definições do Browser (em localhost) a existência deste COOKIE (PHPSESSID



-----------------Após fechar o Browser, este cookie PHPSESSID é eliminado.-------



RESUMINDO, podemos dizer que
------------------------------------------------------------------------------------
Uma SESSION é:
  • um ficheiro texto que guarda dados da sessão no servidor web (pasta c:\xampp\tmp)
  • e gera o Cookie (PHPSESSIDcontendo o ID da sessão  e existe enquanto o Browser está aberto 
-----------------------------------------------------------------------------------------------------------------------


CRIAR OUTRA SESSÃO



Visualizar o ID da sessão 
função session_id() é usado para obter o id da sessão para a sessão atual. 





Apagar dados da variável global

        unset ($_SESSION['nome']);


é necessário colocar a session_start() para usar as variáveis da sessão


Eliminar ficheiro na pasta do servidor web










Sistema de login simples em PHP link



Sem comentários:

Enviar um comentário