• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content

Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

PHP Desenvolvimento Seguro

on

  • 2,463 views

Orientações para desenvolvimento seguro em PHP

Orientações para desenvolvimento seguro em PHP

Statistics

Views

Total Views
2,463
Views on SlideShare
2,462
Embed Views
1

Actions

Likes
1
Downloads
78
Comments
0

1 Embed 1

http://static.slidesharecdn.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial LicenseCC Attribution-NonCommercial License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    PHP Desenvolvimento Seguro PHP Desenvolvimento Seguro Presentation Transcript

    • Desenvolvimento Seguro com PHP Palestrante: Flávio Gomes da Silva Lisboa www.fgsl.eti.br
    • “Com um grande poder, vem uma grande responsabilidade”.
    • Introdução Poder e Responsabilidade “Ben Parker avisou uma vez seu jovem sobrinho Peter Peter, cujo alter- ego super-herói é o Homem-Aranha, que “com um grande poder, vem uma grande responsabilidade”. Assim é com a segurança em aplicações PHP. O PHP fornece um rico conjunto de ferramentas com imenso poder – alguns tem argumentado que talvez seja muito poder – e este poder, quando usado com cuidadosa atenção aos detalhes, permite a criação de aplicações complexas e robustas. Por outro lado, sem essa atenção para os detalhes, usuários maliciosos podem usar o poder do PHP para seus próprios interesses, atacando aplicações de várias formas.” Zend PHP 5 Certification Study Guide Desenvolvimento Seguro com PHP
    • Introdução Falta de segurança: mito do PHP A maior fraqueza na maioria dos programas PHP não é inerente a linguagem em si, mas meramente um problema de código escrito desconsiderando a segurança. Por essa razão, você sempre deve investir um pouco de tempo considerando as implicações de um certo pedaço de código, para ter certeza do dano possível se uma variável não esperada for submetida ao mesmo. Manual do PHP: www.php.net Desenvolvimento Seguro com PHP
    • Agenda Conceitos e Práticas Toda Entrada está Doente Lista Branca versus Lista Negra Filtro de Entrada Tratamento de Saída Register Globals Segurança de Website Formulários Falsificados Cross-Site Scripting Cross-Site Request Forgeries Segurança de Banco de Dados Segurança de Sessão Segurança do Sistema de Arquivos Remote Code Injection Command Injection Algumas Dicas Importantes Desenvolvimento Seguro com PHP
    • Conceitos e Práticas Toda Entrada está Doente ►Se o dado se origina de uma fonte externa, ele não pode ser confiável. ►Não temos certeza de os dados contém caracteres que podem ser executados no contexto errado. ►Dados de todas as matrizes superglobais, exceto $_SESSION devem ser considerados doentes. CONCLUSÃO: Todo dado deve ser filtrado. Zend PHP 5 Certification Study Guide Desenvolvimento Seguro com PHP
    • Conceitos e Práticas Lista Branca versus Lista Negra ►Lista Negra → Menos restritiva. → Há um conjunto específico de palavras que são consideradas inapropriadas. → Qualquer palavra que não conste da lista é permitida. → Listas negras devem ser modificadas continuamente, e expandidas quando novos vetores de ataque tornam-se evidentes. ►Lista Branca → Mais restritiva. → Identifica somente os dados que são aceitáveis. → Mantém controle sobre os parâmetros que mudam e não os deixa aos caprichos de pretensos atacantes. CONCLUSÃO: Listas brancas oferecem mais proteção contra ataque do que listas negras. Desenvolvimento Seguro com PHP
    • Conceitos e Práticas Filtro de Entrada Uma vez que toda entrada é doente e não pode ser confiável, é necessário filtrar sua entrada de modo a garantir que a entrada recebida seja a esperada. Para fazer isto, use uma abordagem de lista branca. Filtrar com uma abordagem de lista branca coloca o controle firmemente em suas mãos e assegura que sua aplicação não receberá dados maliciosos. Você deve forçar o usuário a fornecer dados corretos e então tentar limpar e sanitizá-los por conta própria. Funções: addslashes(), ctype_*(), html_entity_decode(), htmlentities(), strip_tags(), stripslashes(), trim(), entre outras. Desenvolvimento Seguro com PHP
    • Conceitos e Práticas Tratamento de Saída Assim como a filtragem de entrada protege sua aplicação de dados maliciosos e nocivos, o tratamento de saída protege o cliente e o usuário de comandos potencialmente perigosos. A saída deve ser tratada porque os clientes – navegadores Web, servidores de banco de dados, e assim por diante – freqüentemente executam uma ação quando encontram caracteres especiais. Funções: addslashes(), ctype_*(), html_entity_decode(), htmlentities(), strip_tags(), stripslashes(), trim(), entre outras. Desenvolvimento Seguro com PHP
    • Conceitos e Práticas Register Globals Se configurada como On todas as variáveis provenientes de literais de consulta, formulários postados, sessões armazenadas, cookies, e assim por diante, estão disponíveis como o que parecem ser variáveis nomeadas localmente. Se as variáveis não forem inicializadas antes do uso, é possível para um usuário malicioso configurar variáveis de script e comprometer uma aplicação. Tira do programador a noção de origem dos dados. Tira do interpretador da linguagem a noção de origem dos dados. Desabilitada por padrão à partir da versão 4.2.0 e na versão 6 será eliminada. Desenvolvimento Seguro com PHP
    • Segurança de Website Formulários Falsificados Há várias formas de falsificar formulários, o mais fácil deles é simplesmente copiar um formulário alvo e executá-lo de um lugar diferente. Falsificar um formulário torna possível para um atacante remover todas as restrições do lado do cliente impostas pelo formulário de modo a submeter toda e qualquer forma de dados para sua aplicação. Submissões de formulários falsificados são difíceis de prevenir. CONCLUSÃO: Nunca dependa somente da validação do lado do cliente. Desenvolvimento Seguro com PHP
    • Segurança de Website Cross-Site Scripting (XSS) É um dos mais comuns e mais conhecidos tipos de ataque. Explora a confiança do usuário na aplicação e é geralmente um esforço para roubar informações do usuário, tal como cookies e outros dados de identificação pessoal. Todas as aplicações que mostram a entrada são um risco. Exemplo: fóruns, blogs, etc. Pode ser contornado com o tratamento da saída. Desenvolvimento Seguro com PHP
    • Segurança de Website Cross-Site Request Forgeries (CSRF) É um ataque que tenta fazer com que uma vítima envie sem saber requisições HTTP, normalmente para URLs que requerem acesso privilegiado e usar a sessão existente da vítima para determinar o acesso. A requisição HTTP então força a vítima a executar uma ação particular baseada no seu nível de privilégio, tal como fazer uma compra ou modificar ou remover uma informação. Sua aplicação necessita da habilidade de determinar se uma requisição foi intencional e legítima ou forjada e maliciosa. Pode ser contornado com o uso de um token randômico armazenado em sessão, que seja gravado nos formulários. Desenvolvimento Seguro com PHP
    • Segurança de Banco de Dados SQL Injection Ocorre quando um usuário malicioso experimenta obter informações sobre um banco de dados através de um formulário. Depois de conseguir conhecimento suficiente – geralmente das mensagens de erro do banco de dados – o atacante estará equipado para explorar o formulário para quaisquer possíveis vulnerabilidades através de injeção de SQL em campos do formulário. CONCLUSÃO: Filtre todos os dados que possam fazer parte de declarações SQL. Desenvolvimento Seguro com PHP
    • Segurança de Sessão Session Fixation É possível configurar o identificador de sessão manualmente através de um literal de consulta, forçando o uso de uma sessão particular. Obtido geralmente pela criação de um link para sua aplicação e a adição do identificador que o atacante deseja dar a qualquer usuário que clicar no link. Enquanto o usuário acessa seu site através da sessão, ele pode fornecer informações sensíveis ou mesmo credenciais de login. O propósito do ataque é obter um alto nível de privilégio. CONCLUSÃO: Cada vez que um nível de acesso de usuário muda, é necessário regenerar o identificador de sessão. PHP faz disso uma tarefa simples com session_regenerate_id(). Desenvolvimento Seguro com PHP
    • Segurança de Sessão Session Hijacking Este é um termo genericamente usado para descrever quaisquer meios pelos quais um atacante obtenha um identificador de sessão válido (ou que forneça um de sua própria autoria). Pode ser contornado pela verificação de vários cabeçalhos da requisição enviados pelo cliente, através de parâmetros que não se alterem. Desenvolvimento Seguro com PHP
    • Segurança de Sistema de Arquivos Remote Code Injection Ocorre quando um atacante é capaz de fazer sua aplicação executar código PHP de seu escolha. Pode ser contornado com filtragem de dados. Desenvolvimento Seguro com PHP
    • Segurança de Sistema de Arquivos Command Injection O PHP provê grande poder com as funções exec(), system() e passthru(), bem como o operador ‘ (acento agudo). Elas não devem ser usadas levianamente, e é importante tomar grande cuidado em garantir que atacantes não possam injetar e executar comandos de sistema arbitrariamente. Pode ser contornado com filtragem de dados. Funções: escapeshellcmd() e escapeshellarg(). Desenvolvimento Seguro com PHP
    • Algumas Dicas Importantes Mensagens de Erro são para o Desenvolvimento Desligue display_errors na produção. Use log_errors e error_log. Desenvolvimento Seguro com PHP
    • Algumas Dicas Importantes Use require ao invés de include require gera erros fatais e interrompe a aplicação. include reporta o erro e prossegue com a execução. Desenvolvimento Seguro com PHP
    • Algumas Dicas Importantes Criptografe os Dados Funções: MD5, SHA1, mcrypt, etc Desenvolvimento Seguro com PHP
    • Algumas Dicas Importantes Desligue magic_quotes_gpc Afeta a portabilidade (está ligada, está desligada?) Performance: todos os dados sofrem escaping. Inconveniência. Gera caracteres de escape onde não é necessário (por exemplo, e-mail). Será removido no PHP 6. Desenvolvimento Seguro com PHP
    • Onde obtenho ajuda? http://www.php.net/manual/pt_BR/security.php Desenvolvimento Seguro com PHP
    • Sugestão de Leitura Desenvolvimento Seguro com PHP
    • Perguntas ? www.fgsl.eti.br Desenvolvimento Seguro com PHP
    • Fim Obrigado Desenvolvimento Seguro com PHP