Sie sind auf Seite 1von 68

Segurana em Aplicaes Web com PHP

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Sobre mim

Mestre em Informtica pela UFPB Professor substituto no IFPB

C, PHP, Comrcio Eletrnico

Professor na Faculdade IDEZ

HTML/CSS/PHP

Lexa Sistemas www.lexasistemas.com.br

Criao de sites em Drupal

Letz www.letz.com.br

Rede social para divulgao de eventos


V Ensol
22 de julho de 2011

Segurana em Aplicaes Web com PHP


Gedvan Dias

Esta palestra sobre

Segurana em aplicaes web


Boas prticas de programao Erros comuns Detalhes do PHP Tipos de ataques a sites Autenticao e autorizao Foco na implementao com PHP

Pode ser aplicado para outras linguagens

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Esta palestra no sobre

Segurana de servidores

Configurao de servidores Firewalls DNS, FTP, SSH, HTTPS, DoS, IP spoofing, phising, Spam

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Segurana e a linguagem PHP

Por que PHP? PHP surgiu de forma despretensiosa Acabou se tornando a linguagem server-side mais utilizada na web

Facilidade, rapidez, versatilidade, etc.

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Segurana e a linguagem PHP

Grandes poderes trazem grandes responsabilidades Programadores inexperientes Autodidatismo bom, mas...

Aprendo apenas o que me interessa Questes importantes acabam ficando de lado

Prazos apertados...

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Alguns casos recentes

Site Mysql.com tem banco de dados comprometido [1]


Ataque via SQL Injection Acesso a usurios, senhas, e-mails, etc.

[1] http://www.computerworld.com/s/article/9215249/MySQL_Web_site_falls_victim_to_SQL_injection_attack

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Alguns casos recentes

Sony

Sony Pictures[1] Sony Japan[2] Sony Greece[3] Sony Canada[4]

[1] http://www.bbc.co.uk/news/technology-13642145 [2] http://nakedsecurity.sophos.com/2011/05/24/sony-music-japan-hacked-through-sql-injection-flaw/ [3] http://nakedsecurity.sophos.com/2011/05/22/sony-bmg-greece-the-latest-hacked-sony-site/ [4] http://www.computerworld.com/s/article/9217028/Sony_says_hacker_stole_2_000_records_from_Canadian_site

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Alguns casos recentes

Sites do Governo Brasileiro


Vrios rgos pblicos tiveram seu site atacado Portal Brasil, Presidncia, Senado, Receita Federal, IBGE, entre outros Ataques de DoS, defacements e alguns roubos de dados

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Vamos ao que interessa


Show me the code!

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Configuraes do PHP

register_globals

Variveis globais so criadas automaticamente a partir de parmetros GET, POST, cookies, sesses, etc. Desabilitado por padro a partir do PHP 4.2 Depracated no PHP 5.3

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Tratamento de erros

Algumas configuraes relacionadas a erros:

error_reporting: nvel de erro a ser reportado

E_ALL ou E_ALL | E_STRICT Em produo, deve ser sempre desabilitado

display_errors: exibir ou no erros na tela

log_errors: fazer log dos erros em arquivo error_log: arquivo onde ser feito log

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Manipulao de erros

set_error_handler()

Permite usar uma funo prpria para o tratamento dos erros

set_exception_handler()

Permite usar uma funo para tratar excees no capturadas

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

set_error_handler()

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Recomendaes e boas prticas

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Programao defensiva

Prevenir melhor do que remediar A internet no um lugar amigvel Um plano B pode salvar a sua vida (seu emprego, sua reputao, etc.) Pense sempre em minimizar os riscos

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

KISS

Keep It Simple, Stupid Evite a complexidade desnecessria Abra mo da esperteza em prol da segurana

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

KISS

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Regra de Ouro
Toda entrada deve ser filtrada e toda sada deve ser escapada

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Filtro e Validao

Voc est recebendo o que est esperando receber? Trate todo o input da sua aplicao

Dados de formulrios Parmetros da URL Informaes de cookies Dados de sistemas externos

Validao x Filtro (sanitizing)


Segurana em Aplicaes Web com PHP
Gedvan Dias

V Ensol
22 de julho de 2011

Validao x Filtro
CPF
filtro/sanitizing

241.775.842-31
validao

24177584231

Erro! Formato invlido!

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

API Data Filtering

Funes para tratar o input usando vrios tipos de filtro/validao Disponvel a partir do PHP 5.2 Pode substituir totalmente o acesso aos arrays superglobais

$_GET, $_POST, $_COOKIE, $_SERVER, $_ENV

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

filter_input

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Escapando a Sada

Regra de ouro: toda sada deve ser escapada

Pelo menos a toda a sada no confivel

O que quer dizer escapar?


Vem do ingls escape Nesse contexto, quer dizer que devemos converter determinados caracteres (ou sequncias)

Objetivo: manter a integridade da sada


Segurana em Aplicaes Web com PHP
Gedvan Dias

V Ensol
22 de julho de 2011

Escapando o HTML

A sada mais comum do PHP o HTML No HTML temos, basicamente:

Tags (abertura, fechamento, atributos)

Definem a estrutura do documento

Contedo das tags (valores, texto)

Escape no HTML significa, normalmente, impedir que hajam tags onde no deveria haver
Segurana em Aplicaes Web com PHP
Gedvan Dias

V Ensol
22 de julho de 2011

Escapando o HTML

Funes: htmlespecialchars(), htmlentities() API Data Filtering: filter_input(), filter_var()

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Principais Tipos de Ataques e Vulnerabilidades

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

SQL Injection

Consiste em tentar inserir um trecho de cdigo SQL em uma query que ser enviada a um banco de dados

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

SQL Injection

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Exploits of a mom

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

SQL Injection

SQL Injection uma das vulnerabilidades mais comuns em aplicaes PHP

Felizmente, muito fcil se proteger contra esse tipo de ataque

Basta escapar os dados enviados nas queries


Lembra da regra de ouro? Ao utilizar banco de dados, as queries so dados de sada (output) da aplicao Portanto, devem ser escapadas
V Ensol
22 de julho de 2011

Segurana em Aplicaes Web com PHP


Gedvan Dias

Escapando Valores de Queries

Para escapar os valores enviados ao banco, pode-se usar as funes de cada extenso

MySQL: mysql_real_escape_string() PostgreSQL: pg_escape_string() Em ltimo caso, pode-se usar a funo addslashes()

Interfaces OO e camadas de abstrao geralmente tm um mtodo equivalente

PDO: quote()
V Ensol
22 de julho de 2011

Segurana em Aplicaes Web com PHP


Gedvan Dias

Bound Parameters

As camadas de abstrao, normalmente, tambm tem suporte a parmetros bound


O valores so vinculados atravs de marcadores A prpria biblioteca faz o escape dos dados

Oferecem uma tima proteo contra SQL Injection

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Escape de Identificadores

Normalmente, apenas os valores precisam ser escapados Em alguns casos, tambm preciso escapar (ou filtrar) os identificadores

Nomes de tabelas e campos Nos casos onde eles vm de uma fonte externa

No MySQL, os identificadores pode ser escritos entre crases.

Ex: SELECT * FROM `tablename`


V Ensol
22 de julho de 2011

Segurana em Aplicaes Web com PHP


Gedvan Dias

XSS
Cross-Site Scripting

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Cross-Site Scripting

Tambm um dos tipos mais comuns de ataques Toda aplicao que exibe dados recebidos (input) corre riscos

Se esses dados no forem devidamente filtrados e escapados, a aplicao estar vulnervel

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Cross-Site Script

O atacante normalmente explorar essa falha inserindo tags e cdigo javascript no seu HTML

Tags <iframe> chamando pginas maliciosas Cdigo js para redirecionar o usurio para outras pginas Cdigo js para ler os cookies do usurio e envi-los para outros sites Cdigo js para alterar as informaes do site (defacement)

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Cross-Site Scripting

Para se proteger de XSS, basta fazer o que j foi dito


Filtrar a entrada, e Escapar a sada

htmlentities, htmlespecialchars, etc.

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Cross-Site Scripting

Demonstrao

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

CSRF
Cross-Site Request Forgery

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

CSRF

Como o nome diz, consiste em tentar forjar uma requisio de um site para outro O atacante usa a prpria vtima para fazer a requisio, sem que ela tenha conhecimento Portanto, muito difcil identificar se uma requisio legtima ou um ataque CSRF

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

CRSF

Uma linha de cdigo vale mais que mil palavras (demonstrao)

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

CSRF

Ento como se defender do CSRF?

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

GET x POST

Antes de tudo

Entenda a diferena entre GET e POST Funcionamento Objetivos Saiba quando usar cada um

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

GET

O mtodo GET deve ser utilizado apenas para consultas


Exibio de pginas Listagens Pesquisas Downloads, etc.

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

POST

O mtodo POST deve ser utilizado para as operaes


Cadastros Atualizao Excluso Autenticao

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

GET

No use o GET para realizar operaes* Nada que v modificar os seus dados Dessa forma, os ataques CSRF via GET no causaro nenhum dano

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Operaes via GET

s vezes, necessrio realizar operaes via GET


Ativao de usurio Reset de senha

Normalmente, o usurio recebe o link por email Nesses casos, o link deve conter um cdigo gerado aleatoriamente

De preferncia, com data de expirao


V Ensol
22 de julho de 2011

Segurana em Aplicaes Web com PHP


Gedvan Dias

POST

Entretanto, ainda estamos vulnerveis a ataques CSRF via POST Uma soluo utilizar tokens na sesso

Os tokens so gerados de forma aleatria So armazenados na sesso e includos no formulrio Ao receber a requisio, os tokens da sesso e do POST so comparados

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

POST

Outras tcnicas ainda podem ser utilizadas para incrementar a segurana


Incluir um tempo de expirao para os tokens Validar o cabealho HTTP_REFERER (embora no seja 100% confivel)

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Request Spoofing

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Request Spoofing

Request Spoofing a tentativa de manipular requisies de alguma forma A forma mais simples alterar manualmente os parmetros em uma URL Tambm possvel alterar os elementos de um formulrio

Modificar atributos (maxlength, disabled, readonly, name, value) Inserir ou remover elementos
V Ensol
22 de julho de 2011

Segurana em Aplicaes Web com PHP


Gedvan Dias

Request Spoofing

Para alterar um formulrio, basta simplesmente salvar a pgina no seu computador e edit-la Ou utilizar ferramentas como o Firebug, que permite editar todo o HTML Outras ferramentas permitem at executar cdigos javascript de terceiros Observao

A sada que voc gera na aplicao (HTML + CSS + Javascript) no mais sua, do cliente
V Ensol
22 de julho de 2011

Segurana em Aplicaes Web com PHP


Gedvan Dias

Request Spoofing

Com um pouco mais de conhecimento, possvel criar requisies HTTP completas


Pode ser feito na linha de comando, com o comando telnet, por exemplo Pode-se criar um script em qualquer linguagem que se conecta ao socket do servidor web Existem vrias outras formas

O HTTP um padro aberto e sua aplicao deve estar pronta para isso
Segurana em Aplicaes Web com PHP
Gedvan Dias

V Ensol
22 de julho de 2011

Request Spoofing

Como se proteger nessa situao? Filtrar a entrada e escapar a sada

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Arquivos

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Exposio de Cdigo

Deve-se evitar arquivos PHP com extenso diferente de .php (ex: .inc)

Ou deve-se ter certeza que esto fora da raiz web Ou que o Apache est configurado corretamente para execut-los e no exibi-los

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Incluso de Arquivos

Incluso arquivos errados: index.php?usuario=../../admin Code injection: POST path=http://meusite.com

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Command Injection

Se a sua aplicao executa comandos do shell, tambm preciso escap-los Funes


escapeshellcmd escapeshellarg

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Autenticao e Autorizao

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Autenticao

o processo de identificar um usurio Ou seja, verificar se a pessoa que est acessando corresponde ao seu usurio Dependendo de sua aplicao, considere o uso do protocolo HTTPS para a autenticao

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Autorizao

Tambm chamado de controle de acesso Consiste em determinar se o usurio est autorizado a acessar um determinado recurso

Pgina, operao, consulta, etc.

Normalmente, as informaes de autorizao ficam na sesso Para processos crticos, considere fazer uma nova autenticao
Segurana em Aplicaes Web com PHP
Gedvan Dias

V Ensol
22 de julho de 2011

Finalizando...

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Dicas finais

Crie o hbito de programar de forma segura Em uma equipe, todos os programadores devem ter os conceitos bsicos em mente Estabelea uma poltica de segurana previamente Esteja atualizado

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

OWASP

The Open Web Application Secutiry Project


Padres relacionados a segurana Levantamento sobre vulnerabilidades e ataque Tecnologias e ferramentas Notcias, etc.

Projeto apoiado por grandes empresas e universidades

Amazon, IBM, Mozilla, Oracle, etc.

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Livros

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Links

OWASP: www.owasp.org Manual do PHP: http://php.net/manual/en/security.php PHP Security Consortium: http://phpsec.org/

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Obrigado!
gedvan@gmail.com - @gedvan

Segurana em Aplicaes Web com PHP


Gedvan Dias

V Ensol
22 de julho de 2011

Das könnte Ihnen auch gefallen