PHP 5 de Forma Correta e Segura

74
PHP 5 de Forma Correta e Segura Kleber da Silva Rodrigues Engenheiro de Computação Milenium Informática Twitter: @krebistux 19 de Novembro de 2011

description

A forma correta e simples de seguir uma técnica de programação em PHP.Alguns dos ataques mais comum e como se defender.É comum encontrar desenvolvedores desatentos deixando brechas que, por mais simples que seja, podem gerar situações desagradáveis. Prevenção de ataques aplicados ao seu usuário, modalidade de ataque que vem crescendo. Esta palestra vai abordar melhores práticas para Iniciar em PHP, reunindo os cuidados que devem ser tomados na hora de desenvolver uma aplicação web, com técnicas de programação defensiva em segurança.

Transcript of PHP 5 de Forma Correta e Segura

Page 1: PHP 5 de Forma Correta e Segura

PHP 5 de Forma Correta e Segura

Kleber da Silva RodriguesEngenheiro de ComputaçãoMilenium InformáticaTwitter: @krebistux

19 de Novembro de 2011

Page 2: PHP 5 de Forma Correta e Segura

Sobre a Milenium Informatica

Área de Atuação – 17 Anos no Mercado

A Milenium Informática é uma empresa prestadora de serviços, atuando na área de:

Consultoria em Conectividade, Redes, Segurança da Informação, Servidores de aplicações;

Soluções em Banco de Dados, Conectividade , Desenvolvimento,

Redes e Segurança da Informação;

Desenvolvimento de sistemas personalizados;

Treinamentos: Milenium TI Center e Mandriva.

Page 3: PHP 5 de Forma Correta e Segura

Sobre a Milenium Informatica

* PHP - Web Sites Dinâmicos I

* PHP Avançado - Web Sites Dinâmicos II

* PostgreSQL – Começando nesta semana (23/11/2011)

* Informações no site, por telefone ou msn: [email protected]

Page 4: PHP 5 de Forma Correta e Segura

Porque utilizar PHP :)

Dados Atuais sobre PHP na área de TI

Dicas para programação correta

Técnicas para Segurança

As formas de Ataque/ Tipos de Ameaça

Protegento o lado do cliente

Onde pedir ajuda Oportunidade de carreira

Dúvidas, critícas, sugestões ...

Conteúdo da Palestra

Page 5: PHP 5 de Forma Correta e Segura

Introdução

O PHP é hoje uma das linguagens web mais populares.

Se você sair navegando pela internet e observar a extensão das

páginas verá que uma grande parte, se não a maioria, é página

PHP.

E ainda tem aqueles sites que escondem a extensão.

Page 6: PHP 5 de Forma Correta e Segura

O PHP tem grandes vantagens como programação web:

É uma linguagem simples de aprender (isso também gera

problema, pois mesmo quem não sabe consegue fazer uma

página)

Tem muitos recursos para a criação de sites, como boas

funções para trabalhar com strings, com arquivos, etc.

Integração com os principais SGBDs

Page 7: PHP 5 de Forma Correta e Segura

O PHP tem grandes vantagens como programação web:

Funciona com os principais servidores web, sendo

principalmente usado com Apache.

Tem um bom suporte a Orientação a Objetos. Veja que os

grandes frameworks e CMS usam o PHP orientado a objetos.

Em consequência de ser popular você não vai encontrar uma

hospedagem web para seu site que não tenha suporte ao

PHP.

Page 8: PHP 5 de Forma Correta e Segura

Fonte: Tiobe Software

Popularidade

Page 9: PHP 5 de Forma Correta e Segura

Simplicidade e Adaptabilidade

Modelo de desenvolvimento simples

- Facilita o aprendizando

Sintaxe Estruturada ou

Sintaxe Orientada à Objetos

- Similar ao Java e C++

- Encapsulamento, Herança, Polimorfismo, Interfaces,

Reflexão

- Visibilidade, Exceções, Métodos Mágicos (interceptadores).

- SPL (Standard PHP Library)

- Desenvolvimento em camadas, Shell Scripts, ...

Page 10: PHP 5 de Forma Correta e Segura

Quem Usa PHP ?

Page 11: PHP 5 de Forma Correta e Segura

Quem Usa PHP ?

Page 12: PHP 5 de Forma Correta e Segura

Quem Usa PHP ?

Page 13: PHP 5 de Forma Correta e Segura

Quem Usa PHP ?

Page 14: PHP 5 de Forma Correta e Segura

Quem Usa PHP ?

Page 15: PHP 5 de Forma Correta e Segura

Quem Usa PHP ?

Page 16: PHP 5 de Forma Correta e Segura

Quem Usa PHP ?

Page 17: PHP 5 de Forma Correta e Segura

Quem Usa PHP ?

Page 18: PHP 5 de Forma Correta e Segura

Quem Usa PHP ?

Page 19: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Seja amigo do manual do PHP e da busca de funções em:

Manual

http://www.php.net/manual/pt_BR/

Busca por Funções

http://www.php.net

Muito rico: sintaxe, explicações e vários exemplos de uso.

Page 20: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Ative a reportagem de erros.

http://www.php.net/manual/en/function.error-reporting.php

Se não estiver ativa você não receberá nenhuma

indicação sobre os erros.

Quando ativa você será ajudado, com mensagens de erro

contendo muitos detalhes que o ajudarão a corrigir o erro.

Page 21: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Adote uma IDE. Experimente:

NetBeans for PHP - http://www.netbeans.org

Eclipse PDT - http://www.eclipse.org/pdt

Page 22: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Ambas com últimos recursos que tornarão seu trabalho

de programador mais produtivo:

– Destaque de sintaxe;

– Auto-completar o código;

– Avisos de erros (tratamento de erros);

– E muitos outros bons recursos.

Page 23: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Atenção para não se repetir no código (DRY).

Sempre que existir um código que você usa em vários

locais, procure criar uma função e evite ao máximo copiar

e colar código.

Page 24: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Para grande clareza do seu código sempre use

INDENTAÇÃO. Alguns códigos sem indentação ficam

quase ilegíveis, em especial em estruturas de controle.

http://pt.wikipedia.org/wiki/Indentação

Page 25: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Seja organizado e sempre procure separar seu código em

camadas coerentes.

Código JavaScript deve ficar em um arquivo .js.

Código CSS deve ficar em um arquivo separado .css.

Assim como deve ter um arquivo de funções, um arquivo

com configurações, um diretório para os templates, um

para as imagens, etc.

Page 26: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Sempre usa as tags:

< ?php

? >

São as mais completas, as únicas que suportam o XML.

Evite as outras possíveis.

Page 27: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Outro assunto importante são o sistema de nomeação de

variáveis, funções, constantes e classes.

Use um sistema coerente. Não precisa seguir nenhum

padrão existente, embora não seja também problema se o

fizer, mas o importante é que sempre siga o mesmo

padrão.

Page 28: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

/* Comentários */

Estes tanto são importantes para quem ler seu código

quanto para você mesmo.

Para efetuar alguma manutenção bem posterior.

Os comentários ajudam muito. Para ajudar tem o PHP

Documentor (http://www.phpdoc.org).

Page 29: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Para iniciar use um bom pacote instalador. Existem

vários, mas meu preferido LAMP.

Outros:

EasyPHP - http://www.easyphp.org/

Xampp - http://www.apachefriends.org/pt_br/index.html

Page 30: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Existe uma função no PHP, que controla o tempo de

execução dos scripts, que chama-se, set_time_limit().

Esta função evita loops infinitos e timeout da conexão

com o banco de dados.

Ela define a quantidade máxima de segundos em que a

função deve rodar (default são 30 segundos). Após esse

tempo um erro fatal será disparado.

Page 31: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Use POO somente quando necessário e realmente se

caracterizar o uso de objetos.

Caracterização da Modelagem do Sistema.

Page 32: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Evite o uso de frameworks, pois geralmente engessam

qualquer manutenção ou alguma alteração que precise

fazer.

Frameworks devem ser usados apenas quando você usa

exatamente os mesmos estilos de aplicativos.

Melhor ir guardando os exemplos usados, as funções,

rotinas e com o tempo ter sua biblioteca que irá facilitar a

construção de aplicativos.

Page 33: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Evite o uso de aspas duplas. Somente use quando

necessário. As aspas simples são mais seguras e com

melhor desempenho.

Page 34: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Caso crie um arquivo contendo a função phpinfo() em seu

servidor de produção, remova-o após a execução.

Existe muita informação que poderá cair em mãos

erradas.

Page 35: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Sempre valide os dados recebidos dos usuários.

Por mais confiáveis que eles sejam eles estão sujeitos a

erros.

Valide sempre antes de armazenar no banco.

Page 36: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Includes

A inclusão de arquivos via include() e require(),

São muito úteis, mas pode ter consequências muito ruins

senão utilizadas corretamente.

É muito comum a inclusão de arquivos recebidos via URL

sem que a string seja filtrada.

Page 37: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Includes

Arquivos com extensões que o seu servidor web não

conheça.

Evite extensões do tipo .inc. Se for fazer, prefira

colocando arquivo.inc.php.

Page 38: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Includes

Funções para filtrar dados recebidos e evitar um ataque

de XSS ou exposição de código.

basename()

file_exists()

Page 39: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Armazene senhas criptografadas no banco.

Page 40: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Use visualizadores de dados dos SGBDs.

MySQL

DBDesigner - http://fabforce.net/dbdesigner4

WorkBench - http://dev.mysql.com/workbench

PostgreSQL

DBVisualizer - http://www.dbvis.com

Page 41: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Valide dados de Cookies.

Para isso use as funções:

– htmlspecialchars()

– mysql_real_escape_string ()

– pg_escape_string()

http://us3.php.net/manual/en/function.htmlspecialchars.php

http://us3.php.net/mysql_real_escape_string

Page 42: PHP 5 de Forma Correta e Segura

Mantenha funçoẽs fora de laços

<?php

$cont!=0;

function laco ($cont) {

echo 'Nada bom isso';

}

while ($cont<100)

{

laco ($cont)

echo "O valor atual do contador é $cont <br>";

$cont++;

}

?>

Page 43: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Trabalhe sempre com as versões mais recentes dos

softwares que utiliza, inclusive PHP, Apache, MySQL,

PostgreSQL.

As versões mais recentes corrigem bugs, trazem novas e

importantes funcionalidades.

Page 44: PHP 5 de Forma Correta e Segura

Algumas das Melhores Práticas para Iniciar em PHP

Assine boas listas de discussão.

Visite bons fórums e bons sites, assim como também em

ainda sobrando alguma dúvida procure no Google.

Documentação ampla :)

http://phpbrasil.com/http://www.phpms.org/

Page 45: PHP 5 de Forma Correta e Segura

Um pouco de Segurança

O que é segurança ??

CONFICIALIDADE - INTEGRIDADE - DISPONIBILIDADE

Page 46: PHP 5 de Forma Correta e Segura

Um pouco de Segurança

Não existem aplicaçoes 100% seguras ....

Page 47: PHP 5 de Forma Correta e Segura

Um pouco de Segurança

Segurança e Usabilidade

Segurança e Usabilidade

Sempre ...

Proteção Nunca é Demais

Page 48: PHP 5 de Forma Correta e Segura

Sua aplicação é Segura ?

Seu sistema invadido

pode e vai te gerar muitos

problemas.

Horas e Finais de Semana

de preocupação.

Page 49: PHP 5 de Forma Correta e Segura

Sua aplicação é Segura ?

Revise seu código

Testes exaustivos, tornam

Mais seguros

Revise seu código

Page 50: PHP 5 de Forma Correta e Segura

Sua aplicação é Segura ?

Aplicações com segurança,

custa caro

Aplicações sem segurança,

custam mais caro ainda ...

Page 51: PHP 5 de Forma Correta e Segura

Tornando sua aplicação ais Segura

Mais pesquisa no projeto

Maior tempo de codificação

Testes mais sofisticados

Page 52: PHP 5 de Forma Correta e Segura

Qual a melhor defesa ???

Page 53: PHP 5 de Forma Correta e Segura

Tornando sua aplicação mais Segura

É o ATAQUE !!!

Page 54: PHP 5 de Forma Correta e Segura

Ataque que podem acontecer

Brute Force

Rainbow Table

Password Sniffing

XSS (Cross-site Scripting)

SQL Injection

Session Hijacking

Cookie Theft

Page 55: PHP 5 de Forma Correta e Segura

O que é ?

Injeção de código indevido em uma página.

Como ocorre

Brechas em formulários onde os dados

enviados ao servidor não são devidamente

filtrados.

XSS (Cross-site Scripting)

Page 56: PHP 5 de Forma Correta e Segura

Como Evitar ?

Existem funções prontas no PHP

Usadas como filtros de strings.

XSS (Cross-site Scripting)

Page 57: PHP 5 de Forma Correta e Segura

Funções que você pode utilizar:

htmlspecialchars()

htmlentities()

filter_input()

XSS (Cross-site Scripting)

Page 58: PHP 5 de Forma Correta e Segura

SQL Injection

O que é ?

Injeção de códigos SQL aleatório dentro de

uma consulta no seu BD.

Na maioria das vezes a injeção de códigos

SQL se dá partir de formulários não

filtrados, em que dos dados recebidos vão

diretamente para dentro da consulta.

Page 59: PHP 5 de Forma Correta e Segura

SQL Injection

EXEMPLO:

id=-

999.9'/**/UNION/**/ALL/**/SELECT/**/0x31303235343830303536,0

x31303235343830303536,(SELECT/**/concat(0x7e

,0x27,Hex(cast(acessar.senha/**/as/**/char)),0x27,0x7e

)/**/FROM/**/`banco`.acesso/**/LIMIT/**/0,1

)/**/,0x31303235343830303536,0x31303235343830303536,0x3130

3235343830303536,0

x31303235343830303536,0x31303235343830303536,0x31303235

343830303536,0x31303235343830303536/**/and/**/'x'='x

Page 60: PHP 5 de Forma Correta e Segura

Como Evitar ?

Filtrando os dados enviados pelo usuário é

possível evitar que seja injetado

código dentro do seu SQL.

SQL Injection

Page 61: PHP 5 de Forma Correta e Segura

Proteja seus script contra Injeção em SQL.

MySQL - mysql_real_escape_string():

http://us3.php.net/mysql_real_escape_string

PostgreSQL existe a função pg_escape_string() e pg-

escape-bytea():

http://www.php.net/manual/pt_BR/function.pg-escape-

string.php

http://www.php.net/manual/pt_BR/function.pg-escape-

bytea.php

SQL Injection

Page 62: PHP 5 de Forma Correta e Segura

E para reforçar a segurança:

$meus_dados =

pg_escape_string(utf8_encode($_POST['meus_dados']));

Mais Funções que pode utilizar:

addslashes()

preg_replace()

mysql_real_escape_string()

SQL Injection

Page 63: PHP 5 de Forma Correta e Segura

<?php

/*está função deve ser chamada sempre que enviar dados de GET ou POST

em consultas sql*/

function anti_injection($sql){

$sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|

show tables|#|\*|--|\\\\)/"), "" ,$sql);

$sql = trim($sql);

$sql = strip_tags($sql);

$sql = (get_magic_quotes_gpc()) ? $sql : addslashes($sql);

return $sql;

}

?>

SQL Injection – Exemplo Anti Injection

Page 64: PHP 5 de Forma Correta e Segura

O que é ?

Quando o invasor obtém acesso à sessão de um usuário já

autenticado no sistema.

Como acontece ?

Sempre que os dados do cliente são armazenados em sessão é

gerado um identificador de usuário no servidor.

Se o invasor conseguir obter o ID, poderá navegar pelo site

como usuário real.

Exemplo -> pagina.php?id_user=22

Session Hijacking

Page 65: PHP 5 de Forma Correta e Segura

Evitando o Ataque

Verificar o ID recebido, com funções redundantes, comparando

o IP e o usuário com outros campos para mais segurança;

Aplicação de Cookies, para uma navegação mais segura;

Sobre mais http://tinyurl.com/mais-sobre-sess-hijacking

Session Hijacking

Page 66: PHP 5 de Forma Correta e Segura

Cuidado com o Havij

Mecanismo de Busca

Page 67: PHP 5 de Forma Correta e Segura

Mecanismo de Busca

Scanner Testing

Page 68: PHP 5 de Forma Correta e Segura

Ataque que pode acontecer

Qual o pior do

Ataque Citado ?

Page 69: PHP 5 de Forma Correta e Segura

Ataque Físico

Política de Segurança

Controle de Acesso

Page 70: PHP 5 de Forma Correta e Segura

Pesquise sobre:

Ataque de negação de Servico (Dos)

Testes de Invasão (Penetration Test)

Cross-site Request Forgery (XRFS)

Ataque Físico – (Tiazinha da Swat)

Page 71: PHP 5 de Forma Correta e Segura

PHP é uma linguagem amplamente usada, é especializada para o desenvolvimento Web.De acordo com a Security Space, a linguagem PHP é o módulo mais popular do Apache e é instalado em mais de 50% dos sites Apache na Web.

PHP

Page 72: PHP 5 de Forma Correta e Segura

Por que aprender PHP?Pesquisas mostram que o mercado brasileiro de programação

web deverá atingir índices expressivos de crescimento nos

próximos anos, aumentando assim a procura por profissionais

capacitados nessa linguagem para aplicaçoẽs web.

Page 73: PHP 5 de Forma Correta e Segura

Duvidas?

Perguntas ?

Page 74: PHP 5 de Forma Correta e Segura

www.mileniuminformatica.com.br3342-2115

Qualquer dúvida, entre em contato!

[email protected]

Obrigado !