desenvolvendo com segurança em php

61
SEGURANÇA EM PHP Augusto Pascutti Friday, January 29, 2010

Upload: campus-party-brasil

Post on 24-May-2015

1.915 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Desenvolvendo com Segurança em PHP

SEGURANÇA EM PHPAugusto Pascutti

Friday, January 29, 2010

Page 2: Desenvolvendo com Segurança em PHP

Augusto Pascutti

4 anos de experiência

Zend Certified Engineer

Co-Fundador PHPSP

Host PHPSPCast

Habari,CakePHP

Friday, January 29, 2010

Page 3: Desenvolvendo com Segurança em PHP

Segurança

Friday, January 29, 2010

Page 4: Desenvolvendo com Segurança em PHP

Princípios

Se mantenha a eles e você terá:

Um usuário feliz

Um patrão feliz

Finais de Semana e quem sabe férias

Friday, January 29, 2010

Page 5: Desenvolvendo com Segurança em PHP

Segurança é ...

Friday, January 29, 2010

Page 6: Desenvolvendo com Segurança em PHP

como um ogro ...

Friday, January 29, 2010

Page 7: Desenvolvendo com Segurança em PHP

Que são como cebolas !

Friday, January 29, 2010

Page 8: Desenvolvendo com Segurança em PHP

Segurança em camadas

Segurança nunca é demais

Segurança em profundidade

Aplique camadas de segurança em tudo que puder

Não conte com a bondade no mundo

Friday, January 29, 2010

Page 9: Desenvolvendo com Segurança em PHP

Informação Confidencial

Friday, January 29, 2010

Page 10: Desenvolvendo com Segurança em PHP

Informação Confidencial

Classifique tudo que for sensível

Impeça o acesso a essa informação

Lei do menor privilégio

Se o usuário não precisa ver, não deixe.

Friday, January 29, 2010

Page 11: Desenvolvendo com Segurança em PHP

Segurança x Usabilidade

Shozu.com

Friday, January 29, 2010

Page 12: Desenvolvendo com Segurança em PHP

Segurança x Usabilidade

reCaptcha

Friday, January 29, 2010

Page 13: Desenvolvendo com Segurança em PHP

Segurança x Usabilidade

Procure implementar segurança transparente ao usuário

Se não for possível:

Pense no Risco e na Usabilidade

Tenha em mente que dependemos de usuários felizes

NUNCA esqueça da usabilidade

Friday, January 29, 2010

Page 14: Desenvolvendo com Segurança em PHP

Segurança x Usabilidade

Qual o animal da figura ?

Friday, January 29, 2010

Page 15: Desenvolvendo com Segurança em PHP

Vigie sempre

Nunca confie no usuário

Nunca confie em outras aplicações

Nunca confie.

Mantenha registro da onde, de quem e quando a informação for gerada

Friday, January 29, 2010

Page 16: Desenvolvendo com Segurança em PHP

Filtre o INPUT

Identifique o input

Filtre o input

Friday, January 29, 2010

Page 17: Desenvolvendo com Segurança em PHP

Identificando Input

O input pode vir de diversos lugares

Formulário

Outra aplicação

Sistema

Friday, January 29, 2010

Page 18: Desenvolvendo com Segurança em PHP

Filtrando

Friday, January 29, 2010

Page 19: Desenvolvendo com Segurança em PHP

Filtrando

Friday, January 29, 2010

Page 20: Desenvolvendo com Segurança em PHP

Filtrando

Friday, January 29, 2010

Page 21: Desenvolvendo com Segurança em PHP

Filtrando

Friday, January 29, 2010

Page 22: Desenvolvendo com Segurança em PHP

Filtrando

Friday, January 29, 2010

Page 23: Desenvolvendo com Segurança em PHP

Filtrando

Friday, January 29, 2010

Page 24: Desenvolvendo com Segurança em PHP

Filtrando

Friday, January 29, 2010

Page 25: Desenvolvendo com Segurança em PHP

Filtrando

Friday, January 29, 2010

Page 26: Desenvolvendo com Segurança em PHP

Filtrando

Friday, January 29, 2010

Page 27: Desenvolvendo com Segurança em PHP

Escape o Output

O que é output ?

echo, print, sprintf

<?=

Na grande maioria, o destino é o navegador

Escapar HTML

Friday, January 29, 2010

Page 28: Desenvolvendo com Segurança em PHP

Escape o Output

Friday, January 29, 2010

Page 29: Desenvolvendo com Segurança em PHP

Escape o Output

Friday, January 29, 2010

Page 30: Desenvolvendo com Segurança em PHP

Escape o Output

Friday, January 29, 2010

Page 31: Desenvolvendo com Segurança em PHP

htmlentities()Converte TODO caractere para entidade HTML correspondente

Segundo e terceiro parâmetro são opcionais

Segundo: como as aspas (duplas e simples) seão tratadas

Padrão: ENT_COMPAT

ENT_QUOTES: Converte ambas para entidade HTML

Terceiro: encoding do output

Padrão: ISO-8859-1

Friday, January 29, 2010

Page 32: Desenvolvendo com Segurança em PHP

Escape o Output

Friday, January 29, 2010

Page 33: Desenvolvendo com Segurança em PHP

Brindes

Extensão dos arquivos sempre “.php”

Dentro do DocRoot, só o necessário

Mantenha seu código simples e encapsulado

Favoreça Orientação a Objetos

Friday, January 29, 2010

Page 34: Desenvolvendo com Segurança em PHP

TOP 10 OWASPLista de riscos de Segurança (rc1) de 2010

InjectionXSSQuebra de Autenticação e Problemas de SessõesReferências não seguras a ObjetosCSRFErros de ConfiguraçãoFalhas ao restringir acesso a URLsRedirecionamentos e Encaminhamentos não segurosMétodos de criptografia não segurosSegurança insuficiente no transporte de dados

Friday, January 29, 2010

Page 35: Desenvolvendo com Segurança em PHP

Sql Injection

O que é ?

Envio de comandos não tratados pela aplicação para o interpretador

Impacto

Toda a base de dados pode ser lida ou modificada

Pode garantir acesso ao banco de dados ou até ao Sistema Operacional

Friday, January 29, 2010

Page 36: Desenvolvendo com Segurança em PHP

Cross Site Scripting (XSS)

O que é ?

Dados do atacante são enviados ao navegador do cliente

Impacto

Roubo de sessão, de dados sensíveis, phishing

Friday, January 29, 2010

Page 37: Desenvolvendo com Segurança em PHP

Cross Site Request Forgery (CSRF)

O que é ?

O navegador é “enganado” e envia um comando a um site vulnerável

Impacto

Iniciar transações (tranferência, logout, cancelamento)

Acesso sensível a dados

Mudança de dados da conta

Friday, January 29, 2010

Page 38: Desenvolvendo com Segurança em PHP

CSRF

Friday, January 29, 2010

Page 39: Desenvolvendo com Segurança em PHP

CSRF

Friday, January 29, 2010

Page 40: Desenvolvendo com Segurança em PHP

CSRF

<img src="http://loja/comprar.php?quant=100" />

Friday, January 29, 2010

Page 41: Desenvolvendo com Segurança em PHP

CSRF

Friday, January 29, 2010

Page 42: Desenvolvendo com Segurança em PHP

CSRF

Friday, January 29, 2010

Page 43: Desenvolvendo com Segurança em PHP

CSRF

Friday, January 29, 2010

Page 44: Desenvolvendo com Segurança em PHP

Problemas de Configuração

O que é ?

Configuração de rede e do servidor de aplicação

Impacto

Acesso ao Sistema Operacional através de um problema conhecido

Acesso a dados da aplicação

Friday, January 29, 2010

Page 45: Desenvolvendo com Segurança em PHP

allow_url_fopen

Permite acesso a recursos remotos

Valor padrão: On

Aliado ao ‘allow_url_include’ (> 5.2) é muito perigoso

Friday, January 29, 2010

Page 46: Desenvolvendo com Segurança em PHP

allow_url_fopen

$conteudo = file_get_contents(“http://www.google.com”)

Friday, January 29, 2010

Page 47: Desenvolvendo com Segurança em PHP

allow_url_fopen

include “http://www.bad-bad-site.com”

Friday, January 29, 2010

Page 48: Desenvolvendo com Segurança em PHP

register_globals

Exporta índices de super globais para variáveis comuns

Impede que se identifique a origem do dado

Padrão

< 4.2: On

>4.2: Off

Friday, January 29, 2010

Page 49: Desenvolvendo com Segurança em PHP

register_globals

Friday, January 29, 2010

Page 50: Desenvolvendo com Segurança em PHP

register_globals

Friday, January 29, 2010

Page 51: Desenvolvendo com Segurança em PHP

register_globals

Friday, January 29, 2010

Page 52: Desenvolvendo com Segurança em PHP

magic_quotes_gpc

Escapa todos os dados em $_GET, $_POST e $_COOKIE

Usa addslashes() e não escape nativo do seu banco

Complica seu algoritmo de filtro

Padrão: On

Obsoleto no PHP 5.3

Removido do PHP 6

Friday, January 29, 2010

Page 53: Desenvolvendo com Segurança em PHP

display_errors

Exibe no output erros do PHP

DEVE ser usado no desenvolvimento

DEVE ser desligado na produção

Padrão: On

Friday, January 29, 2010

Page 54: Desenvolvendo com Segurança em PHP

error_reporting

Controla os níveis de erros que devem ser exibidos

Ajuda na identificação de erros e boas práticas

Recomendado: -1

Friday, January 29, 2010

Page 55: Desenvolvendo com Segurança em PHP

safe_mode

Restringe algumas funcões tidas como prejudiciais

Verifica se o dono do arquivo a ser executado é o mesmo do script em execução

Melhora a segurança

Não é suficiente

Padrão: Off

Friday, January 29, 2010

Page 56: Desenvolvendo com Segurança em PHP

Acesso a URLs Restritas

O que é?

Permitir que um usuário possa forjar uma autorização a uma URL sensível

Impacto

Permitir ações privilegiadas a qualquer pessoa

Friday, January 29, 2010

Page 57: Desenvolvendo com Segurança em PHP

Redirecionamentos Inválidos

O que é?

Enviar o usuário para uma URL não valida

Impacto

Phishing

Friday, January 29, 2010

Page 58: Desenvolvendo com Segurança em PHP

Criptografia Não SeguraO que é?

Falha na identificação de todos os dados que devem ser criptografados

Uso de criptografia não segura (md5, sha1)

Impacto

Acesso a dados sensíveis

Solução

mcrypt

Friday, January 29, 2010

Page 59: Desenvolvendo com Segurança em PHP

Transporte de dados

O que é?

Falta de segurança na troca de informações sensíveis

Impacto

Acesso a dados sensíveis

Solução

SSL ou TLS para transporte dos dados

Friday, January 29, 2010

Page 60: Desenvolvendo com Segurança em PHP

Perguntas ?

Augusto Pascutti

[email protected]

@augustohp

Friday, January 29, 2010

Page 61: Desenvolvendo com Segurança em PHP

Referências

Essential PHP Security - Chris Chiflett - O’Reilly

http://www.owasp.org/

http://phpsp.org.br/category/phpsp/phpspcast/

Segurança em PHP - Márcio Pessoa - Novatec

Friday, January 29, 2010