• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Segurança em PHP: O que você precisa saber
 

Segurança em PHP: O que você precisa saber

on

  • 924 views

 

Statistics

Views

Total Views
924
Views on SlideShare
924
Embed Views
0

Actions

Likes
3
Downloads
19
Comments
2

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

12 of 2 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Segurança em PHP: O que você precisa saber Segurança em PHP: O que você precisa saber Presentation Transcript

    • Segurança em PHP: o que você precisa saber Jota Júnior
    • Tolos ignoram complexidade, enquanto pragmáticos sofrem com ela. Alguns até conseguem evitar. Gênios a removem. Epigrams in Programming(http://www.cs.yale.edu/quotes.html)
    • Há duas formas de escrever programas sem erros; só a terceira realmente funciona. Epigrams in Programming(http://www.cs.yale.edu/quotes.html)
    • “Não confie em estranhos.” Sua mãe
    • Sempre haverá um “ZzboladozZ” Acreditem, já vi este nick! Ele se dizia “ráquer”
    • Vamos lá! • OWASP • SQL Injection • XSS • CSRF • File Upload • Path Traversal
    • Vamos lá! • OWASP • SQL Injection • XSS • CSRF • File Upload • Path Traversal
    • Uma boa fonte é mais importante do que uma boa memória. https://www.owasp.org/index.php/PHP_Security_Cheat_Sheet https://www.owasp.org/
    • Vamos lá! • OWASP • SQL Injection • XSS • CSRF • File Upload • Path Traversal
    • SQL Injection Um dado proveniente do usuário nunca pode virar código diretamente.
    • SQL Injection
    • SQL Injection
    • SQL Injection Existe o jeito complexo e o jeito certo. A escolha é sua.
    • SQL Injection E quando a query é dinâmica, ou existe alguma limitação para os prepared statements?
    • SQL Injection
    • SQL Injection
    • Vamos lá! • OWASP • SQL Injection • XSS • CSRF • File Upload • Path Traversal
    • XSS Cross-Site Scripting - Permite inserir código que persiste na página - Usuário pode inserir código malicioso e tornar seus outros usuários vítimas
    • XSS <embed src="http://www.orkut.com.br/GLogin.aspx ?cmd=logout"&gt;
    • XSS Retirado do site da OWASP Simples como essa função. http://br2.php.net/htmlspecialchars
    • XSS Novamente, várias ferramentas prontas para facilitar. Exemplo do framework CodeIgniter (http://ellislab.com/codeigniter/user-guide/libraries/input.html)
    • Vamos lá! • OWASP • SQL Injection • XSS • CSRF • File Upload • Path Traversal
    • CSRF Chega de proteger o sistema. Proteja também seu usuário.
    • CSRF Cross Site Request Forgery Permite forjar requisições, levando seu usuário a executar ações indesejadas.
    • CSRF Como? <a href=”http://bancoruim.com/usuario/transferir/jota/1000”> Download </a>
    • CSRF Você tem um controller que modifica determinado dado quando requisitado. Como saber que é uma requisição legítima?
    • CSRF 1- Crie um token aleatório e complexo, como chave de segurança, provavelmente na hora da autenticação.
    • CSRF 2- Armazene este token também em uma sessão (ou outra fonte de dados persistente similar, não acessível ao usuário).
    • CSRF 3- Ao executar qualquer ação dentro do site, como submeter um formulário em AJAX, envie também o token (que pode estar guardado em um hidden input).
    • CSRF 4- Ao receber alguma requisição, verifique se o token foi enviado e, caso tenha sido, se é igual ao armazenado em sessão. Se não, negue.
    • CSRF Outras considerações: Complicações podem existir caso o token seja previsível ou acessível (normalmente se existe outra falha associada, como do navegador ou de sessão).
    • CSRF Como o Facebook trata CSRF no PHP SDK: https://github.com/facebook/facebook-php-sdk/blob/master/src/base_facebook.php Passo 1 e 2: Cria token e guarda em sessão
    • CSRF Passo 3: Envia o token estabelecido para a requisição
    • CSRF Passo 4: Ao receber a requisição, verifica se o código enviado é o mesmo da sessão
    • Vamos lá! • OWASP • SQL Injection • XSS • CSRF • File Upload • Path Traversal
    • File Upload Aquele upload de imagens inofensivo pode se tornar uma grande dor de cabeça.
    • File Upload Alguns dados, aparentemente confiáveis, podem ser maliciosamente manipulados. Entre eles, estão os cabeçalhos HTTP.
    • File Upload Confira, sempre.
    • File Upload Uma forma de verificar a imagem é verificando a extensão e o MIME-Type.
    • File Upload A extensão é bem simples.
    • File Upload O índice type do $_FILES traz o MIME-Type do arquivo, mas o que ele diz ter. É manipulável e, portanto, não pode ser utilizado.
    • File Upload Código retirado do site da OWASP Gasta mais recursos, mas faz uma verificação muito mai confiável, pois obtém o real MIME-Type.
    • File Upload Outras considerações: - GIFs são do mal. Quando possível, não aceite; - O velho getimagesize(); é burlável (por GIFs, inclusive!)
    • Vamos lá! • OWASP • SQL Injection • XSS • CSRF • File Upload • Path Traversal
    • Path Traversal Imponha limites.
    • Path Traversal Você recebe o caminho de um arquivo, e executa alguma ação com isso. http://www.site.com/download.php?arquivo=carro.jpg
    • Path Traversal O que você recebe como parâmetro está em um diretório específico, construído para esse fim.
    • Path Traversal Mas eis que surge o “ZzboladozZ”... http://www.site.com/download.php?arquivo=../../../../etc/shado w
    • Path Traversal É necessário impor limites, não deixar que o usuário vá a qualquer lugar do sistema. Ele só pode inserir o nome do arquivo, e não um caminho.
    • Path Traversal Simplesmente não.
    • Path Traversal Simples como isso, sem REGEX. Dessa forma, ../../../anything vira só anything, e nenhum arquivo indevido é acessado.
    • Path Traversal 1. Quando possível, pode usar identificadores numéricos para os arquivos, e não caminhos.
    • Path Traversal Não funciona para poucos casos, como arquivos Phar. E realpath requer que o caminho exista (caso não exista, retorna falso). 2. Caso queira que sejam permitidos diretórios no caminho, mas só “abaixo”, pode usar o
    • Obrigado :-)