PHP 5 de Forma Correta e Segura
Kleber da Silva RodriguesEngenheiro de ComputaçãoMilenium InformáticaTwitter: @krebistux
19 de Novembro de 2011
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.
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]
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
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.
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
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.
Fonte: Tiobe Software
Popularidade
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, ...
Quem Usa PHP ?
Quem Usa PHP ?
Quem Usa PHP ?
Quem Usa PHP ?
Quem Usa PHP ?
Quem Usa PHP ?
Quem Usa PHP ?
Quem Usa PHP ?
Quem Usa PHP ?
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.
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.
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
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.
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.
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
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.
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.
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.
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).
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
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.
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.
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.
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.
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.
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.
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.
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.
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()
Algumas das Melhores Práticas para Iniciar em PHP
Armazene senhas criptografadas no banco.
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
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
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++;
}
?>
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.
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/
Um pouco de Segurança
O que é segurança ??
CONFICIALIDADE - INTEGRIDADE - DISPONIBILIDADE
Um pouco de Segurança
Não existem aplicaçoes 100% seguras ....
Um pouco de Segurança
Segurança e Usabilidade
Segurança e Usabilidade
Sempre ...
Proteção Nunca é Demais
Sua aplicação é Segura ?
Seu sistema invadido
pode e vai te gerar muitos
problemas.
Horas e Finais de Semana
de preocupação.
Sua aplicação é Segura ?
Revise seu código
Testes exaustivos, tornam
Mais seguros
Revise seu código
Sua aplicação é Segura ?
Aplicações com segurança,
custa caro
Aplicações sem segurança,
custam mais caro ainda ...
Tornando sua aplicação ais Segura
Mais pesquisa no projeto
Maior tempo de codificação
Testes mais sofisticados
Qual a melhor defesa ???
Tornando sua aplicação mais Segura
É o ATAQUE !!!
Ataque que podem acontecer
Brute Force
Rainbow Table
Password Sniffing
XSS (Cross-site Scripting)
SQL Injection
Session Hijacking
Cookie Theft
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)
Como Evitar ?
Existem funções prontas no PHP
Usadas como filtros de strings.
XSS (Cross-site Scripting)
Funções que você pode utilizar:
htmlspecialchars()
htmlentities()
filter_input()
XSS (Cross-site Scripting)
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.
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
Como Evitar ?
Filtrando os dados enviados pelo usuário é
possível evitar que seja injetado
código dentro do seu SQL.
SQL Injection
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
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
<?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
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
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
Cuidado com o Havij
Mecanismo de Busca
Mecanismo de Busca
Scanner Testing
Ataque que pode acontecer
Qual o pior do
Ataque Citado ?
Ataque Físico
Política de Segurança
Controle de Acesso
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)
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
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.
Duvidas?
Perguntas ?
www.mileniuminformatica.com.br3342-2115
Qualquer dúvida, entre em contato!
Obrigado !