View
6.251
Download
4
Category
Preview:
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
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
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
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
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
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.
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...
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
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
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
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!
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
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
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
Segurança em Aplicações Web com PHPGedvan Dias
V Ensol22 de julho de 2011
set_error_handler()set_error_handler()
Segurança em Aplicações Web com PHPGedvan Dias
V Ensol22 de julho de 2011
RecomendaçõesRecomendaçõese boas práticase boas práticas
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
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
Segurança em Aplicações Web com PHPGedvan Dias
V Ensol22 de julho de 2011
KISSKISS
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”
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))
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!
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
Segurança em Aplicações Web com PHPGedvan Dias
V Ensol22 de julho de 2011
filter_inputfilter_input
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
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
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()
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
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
Segurança em Aplicações Web com PHPGedvan Dias
V Ensol22 de julho de 2011
SQL InjectionSQL Injection
Segurança em Aplicações Web com PHPGedvan Dias
V Ensol22 de julho de 2011
Exploits of a momExploits of a mom
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
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()
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
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`
Segurança em Aplicações Web com PHPGedvan Dias
V Ensol22 de julho de 2011
XSSXSSCross-Site ScriptingCross-Site Scripting
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
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))
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.
Segurança em Aplicações Web com PHPGedvan Dias
V Ensol22 de julho de 2011
Cross-Site ScriptingCross-Site Scripting
DemonstraçãoDemonstração
Segurança em Aplicações Web com PHPGedvan Dias
V Ensol22 de julho de 2011
CSRFCSRFCross-Site Request ForgeryCross-Site Request Forgery
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
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)
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?
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
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.
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
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
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
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
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)
Segurança em Aplicações Web com PHPGedvan Dias
V Ensol22 de julho de 2011
Request SpoofingRequest Spoofing
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
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
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
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
Segurança em Aplicações Web com PHPGedvan Dias
V Ensol22 de julho de 2011
ArquivosArquivos
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
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
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
Segurança em Aplicações Web com PHPGedvan Dias
V Ensol22 de julho de 2011
Autenticação e AutorizaçãoAutenticação e Autorização
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
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
Segurança em Aplicações Web com PHPGedvan Dias
V Ensol22 de julho de 2011
Finalizando...Finalizando...
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
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.
Segurança em Aplicações Web com PHPGedvan Dias
V Ensol22 de julho de 2011
LivrosLivros
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/
Segurança em Aplicações Web com PHPGedvan Dias
V Ensol22 de julho de 2011
Obrigado!Obrigado!
gedvan@gmail.comgedvan@gmail.com - - @gedvan@gedvan
Recommended