desenvolvendo com segurança em php

Post on 24-May-2015

1.915 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

SEGURANÇA EM PHPAugusto Pascutti

Friday, January 29, 2010

Augusto Pascutti

4 anos de experiência

Zend Certified Engineer

Co-Fundador PHPSP

Host PHPSPCast

Habari,CakePHP

Friday, January 29, 2010

Segurança

Friday, January 29, 2010

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

Segurança é ...

Friday, January 29, 2010

como um ogro ...

Friday, January 29, 2010

Que são como cebolas !

Friday, January 29, 2010

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

Informação Confidencial

Friday, January 29, 2010

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

Segurança x Usabilidade

Shozu.com

Friday, January 29, 2010

Segurança x Usabilidade

reCaptcha

Friday, January 29, 2010

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

Segurança x Usabilidade

Qual o animal da figura ?

Friday, January 29, 2010

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

Filtre o INPUT

Identifique o input

Filtre o input

Friday, January 29, 2010

Identificando Input

O input pode vir de diversos lugares

Formulário

Outra aplicação

Sistema

Friday, January 29, 2010

Filtrando

Friday, January 29, 2010

Filtrando

Friday, January 29, 2010

Filtrando

Friday, January 29, 2010

Filtrando

Friday, January 29, 2010

Filtrando

Friday, January 29, 2010

Filtrando

Friday, January 29, 2010

Filtrando

Friday, January 29, 2010

Filtrando

Friday, January 29, 2010

Filtrando

Friday, January 29, 2010

Escape o Output

O que é output ?

echo, print, sprintf

<?=

Na grande maioria, o destino é o navegador

Escapar HTML

Friday, January 29, 2010

Escape o Output

Friday, January 29, 2010

Escape o Output

Friday, January 29, 2010

Escape o Output

Friday, January 29, 2010

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

Escape o Output

Friday, January 29, 2010

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

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

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

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

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

CSRF

Friday, January 29, 2010

CSRF

Friday, January 29, 2010

CSRF

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

Friday, January 29, 2010

CSRF

Friday, January 29, 2010

CSRF

Friday, January 29, 2010

CSRF

Friday, January 29, 2010

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

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

allow_url_fopen

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

Friday, January 29, 2010

allow_url_fopen

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

Friday, January 29, 2010

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

register_globals

Friday, January 29, 2010

register_globals

Friday, January 29, 2010

register_globals

Friday, January 29, 2010

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

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

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

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

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

Redirecionamentos Inválidos

O que é?

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

Impacto

Phishing

Friday, January 29, 2010

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

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

Perguntas ?

Augusto Pascutti

augusto@phpsp.org.br

@augustohp

Friday, January 29, 2010

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

top related