68
Segurança em Aplicações Web com PHP Gedvan Dias V Ensol 22 de julho de 2011 Segurança em Aplicações Segurança em Aplicações Web com PHP Web com PHP

Segurança em Aplicações Web com PHP

Embed Size (px)

DESCRIPTION

Palestra sobre segurança em aplicações web com PHP apresentada no V Ensol (Encontro de Software Livre da Paraíba) no dia 22 de julho de 2011.

Citation preview

Page 1: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Segurança em Aplicações Segurança em Aplicações Web com PHPWeb com PHP

Page 2: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Sobre mimSobre mim● Mestre em Informática pela UFPBMestre em Informática pela UFPB

● Professor substituto no IFPBProfessor substituto no IFPB– C, PHP, Comércio EletrônicoC, PHP, Comércio Eletrônico

● Professor na Faculdade IDEZProfessor na Faculdade IDEZ– HTML/CSS/PHPHTML/CSS/PHP

● Lexa Sistemas – Lexa Sistemas – www.lexasistemas.com.brwww.lexasistemas.com.br– Criação de sites em DrupalCriação de sites em Drupal

● Letz – Letz – www.letz.com.brwww.letz.com.br– Rede social para divulgação de eventosRede social para divulgação de eventos

Page 3: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Esta palestra é sobreEsta palestra é sobre● Segurança em Segurança em aplicaçõesaplicações web web

– Boas práticas de programaçãoBoas práticas de programação– Erros comunsErros comuns– Detalhes do PHPDetalhes do PHP– Tipos de ataques a sitesTipos de ataques a sites– Autenticação e autorizaçãoAutenticação e autorização– Foco na implementação com PHPFoco na implementação com PHP

● Pode ser aplicado para outras linguagensPode ser aplicado para outras linguagens

Page 4: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Esta palestra Esta palestra nãonão é sobre é sobre● Segurança de servidoresSegurança de servidores

– Configuração de servidoresConfiguração de servidores– FirewallsFirewalls– DNS, FTP, SSH, HTTPS, …DNS, FTP, SSH, HTTPS, …– DoS, IP spoofing, phising, …DoS, IP spoofing, phising, …– SpamSpam

Page 5: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Segurança e a linguagem PHPSegurança e a linguagem PHP● Por que PHP?Por que PHP?

● PHP surgiu de forma despretensiosaPHP surgiu de forma despretensiosa

● Acabou se tornando a linguagem server-side Acabou se tornando a linguagem server-side mais utilizada na webmais utilizada na web

– Facilidade, rapidez, versatilidade, etc.Facilidade, rapidez, versatilidade, etc.

Page 6: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Segurança e a linguagem PHPSegurança e a linguagem PHP● Grandes poderes trazem grandes Grandes poderes trazem grandes

responsabilidadesresponsabilidades

● Programadores inexperientesProgramadores inexperientes

● Autodidatismo é bom, mas...Autodidatismo é bom, mas...– Aprendo apenas o que me interessaAprendo apenas o que me interessa– Questões importantes acabam ficando de ladoQuestões importantes acabam ficando de lado

● Prazos apertados...Prazos apertados...

Page 7: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Alguns casos recentesAlguns casos recentes

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

– Ataque via SQL InjectionAtaque via SQL Injection– Acesso a usuários, senhas, e-mails, etc.Acesso a usuários, senhas, e-mails, etc.

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

Page 8: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Alguns casos recentesAlguns casos recentes● SonySony

Sony PicturesSony Pictures[1][1]

Sony JapanSony Japan[2][2]

Sony GreeceSony Greece[3][3]

Sony CanadaSony Canada[4][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

Page 9: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Alguns casos recentesAlguns casos recentes● Sites do Governo BrasileiroSites do Governo Brasileiro

– Vários órgãos públicos tiveram seu site atacadoVários órgãos públicos tiveram seu site atacado– Portal Brasil, Presidência, Senado, Receita Federal, IBGE, Portal Brasil, Presidência, Senado, Receita Federal, IBGE,

entre outrosentre outros– Ataques de DoS, defacements e alguns roubos de dadosAtaques de DoS, defacements e alguns roubos de dados

Page 10: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Vamos ao que interessaVamos ao que interessaShow me the code!Show me the code!

Page 11: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Configurações do PHPConfigurações do PHP

● register_globalsregister_globals Variáveis globais são criadas automaticamente a Variáveis globais são criadas automaticamente a

partir de parâmetros GET, POST, cookies, sessões, partir de parâmetros GET, POST, cookies, sessões, etc.etc.

Desabilitado por padrão a partir do PHP 4.2Desabilitado por padrão a partir do PHP 4.2 Depracated no PHP 5.3Depracated no PHP 5.3

Page 12: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Tratamento de errosTratamento de erros● Algumas configurações relacionadas a erros:Algumas configurações relacionadas a erros:

error_reportingerror_reporting: nível de erro a ser reportado: nível de erro a ser reportado– E_ALL ou E_ALL | E_STRICTE_ALL ou E_ALL | E_STRICT

display_errorsdisplay_errors: exibir ou não erros na tela: exibir ou não erros na tela– Em produção, deve ser Em produção, deve ser sempresempre desabilitado desabilitado

log_errorslog_errors: fazer log dos erros em arquivo: fazer log dos erros em arquivo error_logerror_log: arquivo onde será feito log: arquivo onde será feito log

Page 13: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Manipulação de errosManipulação de erros● set_error_handler()set_error_handler()

Permite usar uma função própria para o Permite usar uma função própria para o tratamento dos errostratamento dos erros

● set_exception_handler()set_exception_handler() Permite usar uma função para tratar exceções não Permite usar uma função para tratar exceções não

capturadascapturadas

Page 14: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

set_error_handler()set_error_handler()

Page 15: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

RecomendaçõesRecomendaçõese boas práticase boas práticas

Page 16: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Programação defensivaProgramação defensiva● ““Prevenir é melhor do que remediar”Prevenir é melhor do que remediar”

● A internet não é um lugar amigávelA internet não é um lugar amigável

● Um plano B pode salvar a sua vida (seu Um plano B pode salvar a sua vida (seu emprego, sua reputação, etc.)emprego, sua reputação, etc.)

● Pense sempre em minimizar os riscosPense sempre em minimizar os riscos

Page 17: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

KISSKISS● Keep It Simple, StupidKeep It Simple, Stupid

● Evite a complexidade desnecessáriaEvite a complexidade desnecessária

● Abra mão da “esperteza” em prol da segurançaAbra mão da “esperteza” em prol da segurança

Page 18: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

KISSKISS

Page 19: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Regra de OuroRegra de Ouro

Toda entrada deve ser filtradaToda entrada deve ser filtradae toda saída deve ser “escapada”e toda saída deve ser “escapada”

Page 20: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Filtro e ValidaçãoFiltro e Validação● Você está recebendo o que está esperando Você está recebendo o que está esperando

receber?receber?

● Trate todo o input da sua aplicaçãoTrate todo o input da sua aplicação– Dados de formuláriosDados de formulários– Parâmetros da URLParâmetros da URL– Informações de cookiesInformações de cookies– Dados de sistemas externosDados de sistemas externos

● Validação x Filtro (Validação x Filtro (sanitizingsanitizing))

Page 21: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Validação x FiltroValidação x Filtro

241.775.842-31CPF

filtro/sanitizing validação

24177584231 Erro! Formato inválido!

Page 22: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

API Data FilteringAPI Data Filtering● Funções para tratar o input usando vários tipos Funções para tratar o input usando vários tipos

de filtro/validaçãode filtro/validação

● Disponível a partir do PHP 5.2Disponível a partir do PHP 5.2

● Pode substituir totalmente o acesso aos arrays Pode substituir totalmente o acesso aos arrays superglobaissuperglobais

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

Page 23: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

filter_inputfilter_input

Page 24: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Escapando a SaídaEscapando a Saída● Regra de ouro: … toda saída deve ser Regra de ouro: … toda saída deve ser

“escapada”“escapada”– Pelo menos a toda a saída não confiávelPelo menos a toda a saída não confiável

● O que quer dizer “escapar”?O que quer dizer “escapar”?– Vem do inglês Vem do inglês escapeescape– Nesse contexto, quer dizer que devemos converter Nesse contexto, quer dizer que devemos converter

determinados caracteres (ou sequências)determinados caracteres (ou sequências)

● Objetivo: manter a integridade da saídaObjetivo: manter a integridade da saída

Page 25: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Escapando o HTMLEscapando o HTML● A saída mais comum do PHP é o HTMLA saída mais comum do PHP é o HTML

● No HTML temos, basicamente:No HTML temos, basicamente: Tags (abertura, fechamento, atributos)Tags (abertura, fechamento, atributos)

– Definem a estrutura do documentoDefinem a estrutura do documento Conteúdo das tags (valores, texto)Conteúdo das tags (valores, texto)

● Escape no HTML significa, normalmente, Escape no HTML significa, normalmente, impedir que hajam tags onde não deveria impedir que hajam tags onde não deveria haverhaver

Page 26: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Escapando o HTMLEscapando o HTML● Funções: htmlespecialchars(), htmlentities()Funções: htmlespecialchars(), htmlentities()

● API Data Filtering: filter_input(), filter_var()API Data Filtering: filter_input(), filter_var()

Page 27: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Principais Tipos de Ataques e Principais Tipos de Ataques e VulnerabilidadesVulnerabilidades

Page 28: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

SQL InjectionSQL Injection

● Consiste em tentar inserir um trecho de código Consiste em tentar inserir um trecho de código SQL em uma query que será enviada a um SQL em uma query que será enviada a um banco de dadosbanco de dados

Page 29: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

SQL InjectionSQL Injection

Page 30: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Exploits of a momExploits of a mom

Page 31: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

SQL InjectionSQL Injection

● SQL Injection é uma das vulnerabilidades mais SQL Injection é uma das vulnerabilidades mais comuns em aplicações PHPcomuns em aplicações PHP

– Felizmente, é muito fácil se proteger contra esse tipo de Felizmente, é muito fácil se proteger contra esse tipo de ataqueataque

● Basta escapar os dados enviados nas queriesBasta escapar os dados enviados nas queries– Lembra da regra de ouro?Lembra da regra de ouro?– Ao utilizar banco de dados, Ao utilizar banco de dados, as queries são dados de as queries são dados de

saídasaída (output) da aplicação (output) da aplicação– Portanto, devem ser escapadasPortanto, devem ser escapadas

Page 32: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Escapando Valores de QueriesEscapando Valores de Queries● Para escapar os valores enviados ao banco, Para escapar os valores enviados ao banco,

pode-se usar as funções de cada extensãopode-se usar as funções de cada extensão– MySQL: mysql_real_escape_string()MySQL: mysql_real_escape_string()– PostgreSQL: pg_escape_string()PostgreSQL: pg_escape_string()– ……– Em último caso, pode-se usar a função addslashes()Em último caso, pode-se usar a função addslashes()

● Interfaces OO e camadas de abstração Interfaces OO e camadas de abstração geralmente têm um método equivalentegeralmente têm um método equivalente

– PDO: quote()PDO: quote()

Page 33: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Bound ParametersBound Parameters● As camadas de abstração, normalmente, As camadas de abstração, normalmente,

também tem suporte a parâmetros também tem suporte a parâmetros boundbound– O valores são vinculados através de marcadoresO valores são vinculados através de marcadores– A própria biblioteca faz o escape dos dadosA própria biblioteca faz o escape dos dados

Oferecem uma ótima proteção contra SQL Oferecem uma ótima proteção contra SQL InjectionInjection

Page 34: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Escape de IdentificadoresEscape de Identificadores● Normalmente, apenas os valores precisam ser Normalmente, apenas os valores precisam ser

escapadosescapados

● Em alguns casos, também é preciso escapar Em alguns casos, também é preciso escapar (ou filtrar) os identificadores(ou filtrar) os identificadores

– Nomes de tabelas e camposNomes de tabelas e campos– Nos casos onde eles vêm de uma fonte externaNos casos onde eles vêm de uma fonte externa

● No MySQL, os identificadores pode ser escritos No MySQL, os identificadores pode ser escritos entre crases.entre crases.

– Ex: SELECT * FROM `tablename`Ex: SELECT * FROM `tablename`

Page 35: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

XSSXSSCross-Site ScriptingCross-Site Scripting

Page 36: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Cross-Site ScriptingCross-Site Scripting● Também é um dos tipos mais comuns de Também é um dos tipos mais comuns de

ataquesataques

● Toda aplicação que exibe dados recebidos Toda aplicação que exibe dados recebidos (input) corre riscos(input) corre riscos Se esses dados não forem devidamente filtrados e Se esses dados não forem devidamente filtrados e

escapados, a aplicação estará vulnerávelescapados, a aplicação estará vulnerável

Page 37: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Cross-Site ScriptCross-Site Script● O atacante normalmente explorará essa falha O atacante normalmente explorará essa falha

inserindo tags e código javascript no seu HTMLinserindo tags e código javascript no seu HTML– Tags <iframe> chamando páginas maliciosasTags <iframe> chamando páginas maliciosas– Código js para redirecionar o usuário para outras Código js para redirecionar o usuário para outras

páginaspáginas– Código js para ler os cookies do usuário e enviá-los para Código js para ler os cookies do usuário e enviá-los para

outros sitesoutros sites– Código js para alterar as informações do site Código js para alterar as informações do site

((defacementdefacement))

Page 38: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Cross-Site ScriptingCross-Site Scripting

● Para se proteger de XSS, basta fazer o que já Para se proteger de XSS, basta fazer o que já foi ditofoi dito Filtrar a entrada, eFiltrar a entrada, e Escapar a saídaEscapar a saída

– htmlentities, htmlespecialchars, etc.htmlentities, htmlespecialchars, etc.

Page 39: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Cross-Site ScriptingCross-Site Scripting

DemonstraçãoDemonstração

Page 40: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

CSRFCSRFCross-Site Request ForgeryCross-Site Request Forgery

Page 41: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

CSRFCSRF

● Como o nome diz, consiste em tentar forjar Como o nome diz, consiste em tentar forjar uma requisição de um site para outrouma requisição de um site para outro

● O atacante usa a própria vítima para fazer a O atacante usa a própria vítima para fazer a requisição, sem que ela tenha conhecimentorequisição, sem que ela tenha conhecimento

● Portanto, é muito difícil identificar se uma Portanto, é muito difícil identificar se uma requisição é legítima ou um ataque CSRFrequisição é legítima ou um ataque CSRF

Page 42: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

CRSFCRSF

Uma linha de código vale mais que mil palavrasUma linha de código vale mais que mil palavras

(demonstração)(demonstração)

Page 43: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

CSRFCSRF● Então como se defender do CSRF?Então como se defender do CSRF?

Page 44: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

GET x POSTGET x POST● Antes de tudoAntes de tudo

Entenda a diferença entre GET e POSTEntenda a diferença entre GET e POST FuncionamentoFuncionamento ObjetivosObjetivos Saiba quando usar cada umSaiba quando usar cada um

Page 45: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

GETGET● O método GET deve ser utilizado apenas para O método GET deve ser utilizado apenas para

consultasconsultas Exibição de páginasExibição de páginas ListagensListagens PesquisasPesquisas Downloads, etc.Downloads, etc.

Page 46: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

POSTPOST● O método POST deve ser utilizado para as O método POST deve ser utilizado para as

operaçõesoperações CadastrosCadastros AtualizaçãoAtualização ExclusãoExclusão AutenticaçãoAutenticação

Page 47: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

GETGET● Não use o GET para realizar operações*Não use o GET para realizar operações*

● Nada que vá modificar os seus dadosNada que vá modificar os seus dados

● Dessa forma, os ataques CSRF via GET não Dessa forma, os ataques CSRF via GET não causarão nenhum danocausarão nenhum dano

Page 48: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Operações via GETOperações via GET● Às vezes, é necessário realizar operações via Às vezes, é necessário realizar operações via

GETGET– Ativação de usuárioAtivação de usuário– Reset de senhaReset de senha

● Normalmente, o usuário recebe o link por e-Normalmente, o usuário recebe o link por e-mailmail

● Nesses casos, o link deve conter um código Nesses casos, o link deve conter um código gerado aleatoriamentegerado aleatoriamente

– De preferência, com data de expiraçãoDe preferência, com data de expiração

Page 49: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

POSTPOST● Entretanto, ainda estamos vulneráveis a Entretanto, ainda estamos vulneráveis a

ataques CSRF via POSTataques CSRF via POST

● Uma solução é utilizar tokens na sessãoUma solução é utilizar tokens na sessão Os tokens são gerados de forma aleatóriaOs tokens são gerados de forma aleatória São armazenados na sessão e incluídos no São armazenados na sessão e incluídos no

formulárioformulário Ao receber a requisição, os tokens da sessão e do Ao receber a requisição, os tokens da sessão e do

POST são comparadosPOST são comparados

Page 50: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

POSTPOST● Outras técnicas ainda podem ser utilizadas Outras técnicas ainda podem ser utilizadas

para incrementar a segurançapara incrementar a segurança Incluir um tempo de expiração para os tokensIncluir um tempo de expiração para os tokens Validar o cabeçalho HTTP_REFERER (embora não Validar o cabeçalho HTTP_REFERER (embora não

seja 100% confiável)seja 100% confiável)

Page 51: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Request SpoofingRequest Spoofing

Page 52: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Request SpoofingRequest Spoofing● Request SpoofingRequest Spoofing é a tentativa de manipular é a tentativa de manipular

requisições de alguma formarequisições de alguma forma

● A forma mais simples é alterar manualmente A forma mais simples é alterar manualmente os parâmetros em uma URLos parâmetros em uma URL

● Também é possível alterar os elementos de um Também é possível alterar os elementos de um formulárioformulário

– Modificar atributos (maxlength, disabled, readonly, Modificar atributos (maxlength, disabled, readonly, name, value)name, value)

– Inserir ou remover elementosInserir ou remover elementos

Page 53: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Request SpoofingRequest Spoofing● Para alterar um formulário, basta simplesmente Para alterar um formulário, basta simplesmente

salvar a página no seu computador e editá-lasalvar a página no seu computador e editá-la

● Ou utilizar ferramentas como o Firebug, que Ou utilizar ferramentas como o Firebug, que permite editar todo o HTMLpermite editar todo o HTML

● Outras ferramentas permitem até executar Outras ferramentas permitem até executar códigos javascript de terceiroscódigos javascript de terceiros

● ObservaçãoObservação– A saída que você gera na aplicação (HTML + CSS + A saída que você gera na aplicação (HTML + CSS +

Javascript) não é mais sua, é do clienteJavascript) não é mais sua, é do cliente

Page 54: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Request SpoofingRequest Spoofing

● Com um pouco mais de conhecimento, é Com um pouco mais de conhecimento, é possível criar requisições HTTP completaspossível criar requisições HTTP completas

– Pode ser feito na linha de comando, com o comando Pode ser feito na linha de comando, com o comando telnet, por exemplotelnet, por exemplo

– Pode-se criar um script em qualquer linguagem que se Pode-se criar um script em qualquer linguagem que se conecta ao socket do servidor webconecta ao socket do servidor web

– Existem várias outras formasExistem várias outras formas

● O HTTP é um padrão aberto e sua aplicação O HTTP é um padrão aberto e sua aplicação deve estar pronta para issodeve estar pronta para isso

Page 55: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Request SpoofingRequest Spoofing

● Como se proteger nessa situação?Como se proteger nessa situação?

Filtrar a entrada …Filtrar a entrada …

… … e escapar a saídae escapar a saída

Page 56: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

ArquivosArquivos

Page 57: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Exposição de CódigoExposição de Código● Deve-se evitar arquivos PHP com extensão Deve-se evitar arquivos PHP com extensão

diferente de .php (ex: .inc)diferente de .php (ex: .inc) Ou deve-se ter certeza que estão fora da raiz webOu deve-se ter certeza que estão fora da raiz web Ou que o Apache está configurado corretamente Ou que o Apache está configurado corretamente

para executá-los e não exibi-lospara executá-los e não exibi-los

Page 58: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Inclusão de ArquivosInclusão de Arquivos● Inclusão arquivos errados: iInclusão arquivos errados: index.php?usuario=../../adminndex.php?usuario=../../admin

● Code injection: Code injection: POST path=http://meusite.comPOST path=http://meusite.com

Page 59: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Command InjectionCommand Injection● Se a sua aplicação executa comandos do shell, Se a sua aplicação executa comandos do shell,

também é preciso escapá-lostambém é preciso escapá-los

● FunçõesFunções escapeshellcmdescapeshellcmd escapeshellargescapeshellarg

Page 60: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Autenticação e AutorizaçãoAutenticação e Autorização

Page 61: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

AutenticaçãoAutenticação● É o processo de identificar um usuárioÉ o processo de identificar um usuário

● Ou seja, verificar se a pessoa que está Ou seja, verificar se a pessoa que está acessando corresponde ao seu usuárioacessando corresponde ao seu usuário

● Dependendo de sua aplicação, considere o uso Dependendo de sua aplicação, considere o uso do protocolo HTTPS para a autenticaçãodo protocolo HTTPS para a autenticação

Page 62: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

AutorizaçãoAutorização● Também é chamado de controle de acessoTambém é chamado de controle de acesso

● Consiste em determinar se o usuário está Consiste em determinar se o usuário está autorizado a acessar um determinado recursoautorizado a acessar um determinado recurso

– Página, operação, consulta, etc.Página, operação, consulta, etc.

● Normalmente, as informações de autorização Normalmente, as informações de autorização ficam na sessãoficam na sessão

● Para processos críticos, considere fazer uma Para processos críticos, considere fazer uma nova autenticaçãonova autenticação

Page 63: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Finalizando...Finalizando...

Page 64: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Dicas finaisDicas finais● Crie o hábito de programar de forma seguraCrie o hábito de programar de forma segura

● Em uma equipe, todos os programadores Em uma equipe, todos os programadores devem ter os conceitos básicos em mentedevem ter os conceitos básicos em mente

● Estabeleça uma política de segurança Estabeleça uma política de segurança previamentepreviamente

● Esteja atualizadoEsteja atualizado

Page 65: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

OWASPOWASP● The Open Web Application Secutiry ProjectThe Open Web Application Secutiry Project

– Padrões relacionados a segurançaPadrões relacionados a segurança– Levantamento sobre vulnerabilidades e ataqueLevantamento sobre vulnerabilidades e ataque– Tecnologias e ferramentasTecnologias e ferramentas– Notícias, etc.Notícias, etc.

● Projeto apoiado por grandes empresas e Projeto apoiado por grandes empresas e universidadesuniversidades Amazon, IBM, Mozilla, Oracle, etc.Amazon, IBM, Mozilla, Oracle, etc.

Page 66: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

LivrosLivros

Page 67: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

LinksLinks● OWASP: OWASP: www.owasp.orgwww.owasp.org

● Manual do PHP: Manual do PHP: http://php.net/manual/en/security.phphttp://php.net/manual/en/security.php

● PHP Security Consortium: PHP Security Consortium: http://phpsec.org/http://phpsec.org/

Page 68: Segurança em Aplicações Web com PHP

Segurança em Aplicações Web com PHPGedvan Dias

V Ensol22 de julho de 2011

Obrigado!Obrigado!

[email protected]@gmail.com - - @gedvan@gedvan