SlideShare uma empresa Scribd logo
1 de 74
Baixar para ler offline
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
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: treinamento@mileniuminformatica.com.br
Conteúdo da Palestra

 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 ...
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.

Popularidade




               Fonte: Tiobe Software
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




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





    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 :)
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
          
                  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
XSS (Cross-site Scripting)

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()
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
SQL Injection

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 – Exemplo Anti 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;
}
?>
Session Hijacking

 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
Mecanismo de Busca




Cuidado com o Havij
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

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.
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 ?
Obrigado !



   Qualquer dúvida, entre em contato!
   contato@mileniuminformatica.com.br


www.mileniuminformatica.com.br
         3342-2115

Mais conteúdo relacionado

Mais procurados

Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosRodrigo Nossal
 
Curso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoCurso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoLuiz Junior
 
Programando php com mais segurança
Programando php com mais segurançaProgramando php com mais segurança
Programando php com mais segurançaMichael Douglas
 
Django para desenvolvimento web; porque ser repetitivo é chato.
Django para desenvolvimento web; porque ser repetitivo é chato.Django para desenvolvimento web; porque ser repetitivo é chato.
Django para desenvolvimento web; porque ser repetitivo é chato.Arthur Furlan
 
Apresentação php
Apresentação phpApresentação php
Apresentação phpwilliameier
 
Curso de php do básico ao avançado
Curso de php do básico ao avançadoCurso de php do básico ao avançado
Curso de php do básico ao avançadoThiago Carlos
 
Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Felipe Queiroz
 
Treinamento Básico de Django
Treinamento Básico de DjangoTreinamento Básico de Django
Treinamento Básico de DjangoLeandro Zanuz
 
Criando websites a jato com Django
Criando websites a jato com DjangoCriando websites a jato com Django
Criando websites a jato com DjangoMarcos Petry
 
De Zero à Web com Python e Django
De Zero à Web com Python e DjangoDe Zero à Web com Python e Django
De Zero à Web com Python e DjangoOsvaldo Santana Neto
 
Apresentação da Linguagem de Programação PHP
Apresentação da Linguagem de Programação PHPApresentação da Linguagem de Programação PHP
Apresentação da Linguagem de Programação PHPLorranna Machado
 
php orientado_a_objetos
php orientado_a_objetosphp orientado_a_objetos
php orientado_a_objetosFer Nando
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetosFrancisco Santos
 
Aula 01 introdução ao php
Aula 01   introdução ao phpAula 01   introdução ao php
Aula 01 introdução ao phpAdriano Castro
 
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação WebDjango Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Webantonio sérgio nogueira
 

Mais procurados (19)

01 java fundamentos
01 java fundamentos01 java fundamentos
01 java fundamentos
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutos
 
Django - Muito além do básico
Django - Muito além do básicoDjango - Muito além do básico
Django - Muito além do básico
 
Curso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoCurso de PHP Básico ao Avançado
Curso de PHP Básico ao Avançado
 
Apresentação faef
Apresentação faefApresentação faef
Apresentação faef
 
Programando php com mais segurança
Programando php com mais segurançaProgramando php com mais segurança
Programando php com mais segurança
 
Django para desenvolvimento web; porque ser repetitivo é chato.
Django para desenvolvimento web; porque ser repetitivo é chato.Django para desenvolvimento web; porque ser repetitivo é chato.
Django para desenvolvimento web; porque ser repetitivo é chato.
 
Apresentação php
Apresentação phpApresentação php
Apresentação php
 
Curso de php do básico ao avançado
Curso de php do básico ao avançadoCurso de php do básico ao avançado
Curso de php do básico ao avançado
 
Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!
 
Treinamento Básico de Django
Treinamento Básico de DjangoTreinamento Básico de Django
Treinamento Básico de Django
 
Criando websites a jato com Django
Criando websites a jato com DjangoCriando websites a jato com Django
Criando websites a jato com Django
 
De Zero à Web com Python e Django
De Zero à Web com Python e DjangoDe Zero à Web com Python e Django
De Zero à Web com Python e Django
 
Apresentação da Linguagem de Programação PHP
Apresentação da Linguagem de Programação PHPApresentação da Linguagem de Programação PHP
Apresentação da Linguagem de Programação PHP
 
php orientado_a_objetos
php orientado_a_objetosphp orientado_a_objetos
php orientado_a_objetos
 
A Linguagem Php
A Linguagem PhpA Linguagem Php
A Linguagem Php
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
 
Aula 01 introdução ao php
Aula 01   introdução ao phpAula 01   introdução ao php
Aula 01 introdução ao php
 
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação WebDjango Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
 

Destaque

Destaque (20)

Tratando as vulnerabilidades do Top 10 com php
Tratando as vulnerabilidades do Top 10 com phpTratando as vulnerabilidades do Top 10 com php
Tratando as vulnerabilidades do Top 10 com php
 
Patrocinadores
PatrocinadoresPatrocinadores
Patrocinadores
 
PROYECTO PARTE II
PROYECTO PARTE IIPROYECTO PARTE II
PROYECTO PARTE II
 
Catalogo imolalanternas
Catalogo imolalanternasCatalogo imolalanternas
Catalogo imolalanternas
 
Effect11
Effect11Effect11
Effect11
 
Retrato consa
Retrato consaRetrato consa
Retrato consa
 
Periódico Extensão Rural 2012-2 (DEAER/UFSM)
Periódico Extensão Rural 2012-2 (DEAER/UFSM)Periódico Extensão Rural 2012-2 (DEAER/UFSM)
Periódico Extensão Rural 2012-2 (DEAER/UFSM)
 
Treinamento Blogs Microcamp
Treinamento Blogs MicrocampTreinamento Blogs Microcamp
Treinamento Blogs Microcamp
 
Ofertas empleo
Ofertas empleoOfertas empleo
Ofertas empleo
 
Boletin aej 7 febrero 2013
Boletin aej   7 febrero 2013Boletin aej   7 febrero 2013
Boletin aej 7 febrero 2013
 
Informática Educativa e atuação do Pedagogo
Informática Educativa e atuação do PedagogoInformática Educativa e atuação do Pedagogo
Informática Educativa e atuação do Pedagogo
 
BBOM Diamante Brasil
BBOM Diamante BrasilBBOM Diamante Brasil
BBOM Diamante Brasil
 
Catalogo Cofran 2009-2010
Catalogo Cofran 2009-2010Catalogo Cofran 2009-2010
Catalogo Cofran 2009-2010
 
Patins
PatinsPatins
Patins
 
Agenda Electronica java _(gilsonrodrigis15@hotmail.com)
Agenda Electronica java _(gilsonrodrigis15@hotmail.com)Agenda Electronica java _(gilsonrodrigis15@hotmail.com)
Agenda Electronica java _(gilsonrodrigis15@hotmail.com)
 
ecolab _ar01_entire
ecolab  _ar01_entireecolab  _ar01_entire
ecolab _ar01_entire
 
Oliveira danniel madson_vieira_i
Oliveira danniel madson_vieira_iOliveira danniel madson_vieira_i
Oliveira danniel madson_vieira_i
 
Boletin 15 febrero 2013
Boletin  15 febrero 2013Boletin  15 febrero 2013
Boletin 15 febrero 2013
 
Bolo De Peito De Peru Com Legumes
Bolo De Peito De Peru Com LegumesBolo De Peito De Peru Com Legumes
Bolo De Peito De Peru Com Legumes
 
Obesidade final
Obesidade finalObesidade final
Obesidade final
 

Semelhante a PHP 5 de Forma Correta e Segura

Semelhante a PHP 5 de Forma Correta e Segura (20)

Guia php
Guia phpGuia php
Guia php
 
Começando errado com php
Começando errado com phpComeçando errado com php
Começando errado com php
 
Aula 01 - Programação Web - PHP
Aula 01  - Programação Web - PHPAula 01  - Programação Web - PHP
Aula 01 - Programação Web - PHP
 
4. Introdução ao PHP.pdf
4. Introdução ao PHP.pdf4. Introdução ao PHP.pdf
4. Introdução ao PHP.pdf
 
Desenvolvimento de Software I - USBWEBSERVER - PHP
Desenvolvimento de Software I - USBWEBSERVER - PHPDesenvolvimento de Software I - USBWEBSERVER - PHP
Desenvolvimento de Software I - USBWEBSERVER - PHP
 
Qualitypress - Segurança em Aplicações Web com PHP
Qualitypress - Segurança em Aplicações Web com PHPQualitypress - Segurança em Aplicações Web com PHP
Qualitypress - Segurança em Aplicações Web com PHP
 
Aprendendo a criar plugins para o Wordpress - Richard Barros
Aprendendo a criar plugins para o Wordpress - Richard BarrosAprendendo a criar plugins para o Wordpress - Richard Barros
Aprendendo a criar plugins para o Wordpress - Richard Barros
 
Cake Php
Cake PhpCake Php
Cake Php
 
Php
PhpPhp
Php
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Tema 1 | Introdução a PHP
Tema 1 | Introdução a PHPTema 1 | Introdução a PHP
Tema 1 | Introdução a PHP
 
Introdução ao Wordpress
Introdução ao WordpressIntrodução ao Wordpress
Introdução ao Wordpress
 
Apache PHP MySQL
Apache  PHP  MySQLApache  PHP  MySQL
Apache PHP MySQL
 
Linguagem PHP
Linguagem PHPLinguagem PHP
Linguagem PHP
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
 
File3
File3File3
File3
 
File3
File3File3
File3
 
Programando php com excelência
Programando php com excelênciaProgramando php com excelência
Programando php com excelência
 
Apresentação faef
Apresentação faefApresentação faef
Apresentação faef
 
Apostila php
Apostila phpApostila php
Apostila php
 

Último

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx2m Assessoria
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuisKitota
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfSamaraLunas
 

Último (9)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 

PHP 5 de Forma Correta e Segura

  • 1. 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
  • 2. 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.
  • 3. 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: treinamento@mileniuminformatica.com.br
  • 4. Conteúdo da Palestra 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 ...
  • 5. 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.
  • 6. 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
  • 7. 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. 
  • 8. Popularidade Fonte: Tiobe Software
  • 9. 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, ...
  • 19. 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. 
  • 20. 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.
  • 21. 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
  • 22. 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.
  • 23. 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.
  • 24. 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
  • 25. 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.
  • 26. 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.
  • 27. 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.
  • 28. 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).
  • 29. 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
  • 30. 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.
  • 31. 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.
  • 32. 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.
  • 33. 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.
  • 34. 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.
  • 35. 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.
  • 36. 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.
  • 37. 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.
  • 38. 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()
  • 39. Algumas das Melhores Práticas para Iniciar em PHP Armazene senhas criptografadas no banco.
  • 40. 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
  • 41. 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
  • 42. 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++; } ?>
  • 43. 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.
  • 44. Algumas das Melhores Práticas para Iniciar em PHP http://phpbrasil.com/ http://www.phpms.org/  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 :)
  • 45. Um pouco de Segurança O que é segurança ?? CONFICIALIDADE - INTEGRIDADE - DISPONIBILIDADE
  • 46. Um pouco de Segurança  Não existem aplicaçoes 100% seguras ....
  • 47. Um pouco de Segurança Segurança e Usabilidade  Sempre ... Proteção Nunca é Demais
  • 48. Sua aplicação é Segura ?  Seu sistema invadido pode e vai te gerar muitos problemas. Horas e Finais de Semana de preocupação.
  • 49. Sua aplicação é Segura ?  Revise seu código   Testes exaustivos, tornam  Mais seguros  Revise seu código  
  • 50. Sua aplicação é Segura ?  Aplicações com segurança,  custa caro   Aplicações sem segurança,  custam mais caro ainda ...  
  • 51. Tornando sua aplicação ais Segura  Mais pesquisa no projeto   Maior tempo de codificação   Testes mais sofisticados  
  • 52. Qual a melhor defesa ???
  • 53. Tornando sua aplicação mais Segura É o ATAQUE !!!
  • 54. Ataque que podem acontecer  Brute Force  Rainbow Table  Password Sniffing  XSS (Cross-site Scripting)  SQL Injection  Session Hijacking  Cookie Theft
  • 55. XSS (Cross-site Scripting) 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.
  • 56. XSS (Cross-site Scripting) Como Evitar ? Existem funções prontas no PHP Usadas como filtros de strings.
  • 57. XSS (Cross-site Scripting) Funções que você pode utilizar: htmlspecialchars() htmlentities() filter_input()
  • 58. 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.
  • 59. 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
  • 60. SQL Injection Como Evitar ? Filtrando os dados enviados pelo usuário é possível evitar que seja injetado código dentro do seu SQL.
  • 61. 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
  • 62. 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()
  • 63. SQL Injection – Exemplo Anti 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; } ?>
  • 64. Session Hijacking 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
  • 65. 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
  • 67. Mecanismo de Busca Scanner Testing
  • 68. Ataque que pode acontecer Qual o pior do Ataque Citado ?
  • 69. Ataque Físico  Política de Segurança  Controle de Acesso
  • 70. 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)
  • 71. PHP 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.
  • 72. 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.
  • 73. Duvidas? Perguntas ?
  • 74. Obrigado ! Qualquer dúvida, entre em contato! contato@mileniuminformatica.com.br www.mileniuminformatica.com.br 3342-2115