Protegendo sites php no seu servidor web

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.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    Protegendo sites php no seu servidor web - Presentation Transcript

    1. Cláudio
Borges
 cborges@openbsd‐sp.org

    2. O
Que
será
abordado
   O
porque
da
segurança.
   Diretivas
e
funções
perigosas.
   Configurando
o
open_basedir
e
 disable_functions.
   Utilizando
as
diretivas
php_flag
e
php_value.
   A
polêmica
do
register_globals.
   Mod_security.
   Suhoshin.
   Cuidados
com
logs
e
exibição
de
erros
em
 ambiente
de
produção.
   Programando
com
segurança.

    3. O
Porque
da
segurança

    4.   Falhas
podem
existir
em
qualquer
sistema.
   Programas
inseguros
podem
ser
feitos
em 
qualquer
linguagem.
   Proteger
as
aplicações
web
é
tarefa
tanto
do 
administrador
quando
do
programador.
   Muitas
features
ajudam
na
programação
mas 
diminuem
a
segurança.
   Por
ser
uma
linguagem
muito
rica,muitos 
programadores
não
consideram
que
a 
segurança
também
depende
da
qualidade
do 
seu
código
PHP.

    5. Diretivas
perigosas

    6.   allow_url_fopen
–
Permite
utilizar
arquivos
 externos
como
se
fossem
arquivos
locais.
   allow_url_include
–
Permite
utilizar
arquivos
 externos
em
include/require.
   expose_php
–
Adiciona
uma
assinatura
no
 header
do
seu
servidor
web,
informando
que
 o
php
está
instalado.

    7.   Exemplo
de
uso
de
site
mal
desenvolvido
e 
allow_url_fopen/allow_url_include
habilitado:

    8.   Agora
desabilitado:

    9.   Exemplo
de
scan
em
servidor
com 
expose_php
habilitado:

    10.   E
com
ele
desabilitado:

    11. Funções
perigosas

    12.   As
funções
exec,
shellexec,
system
e
passthru
 executam
comandos
externos.
   Outras
funções:

phpinfo,
proc_open,
 proc_nice,
chdir,
chroot,
dir,
closedir,
getcwd,
 opendir,
readdir,
rewinddir,
scandir,
popen,
 pcntl_exec,
pcntl_fork,
pcntl_alarm,
 pcntl_setpriority,
pcntl_signal,
pcntl_wait,
 pcntl_waitpid,
ini_get,
ini_get_all,
ini_set,
 ini_restore.

    13. Configurando
o
open_basedir
 e
disable_functions

    14.   open_basedir
–
Define
os
diretórios
a
partir
 dos
quais
o
PHP
pode
utilizar.
 open_basedir = /var/www/:/tmp/   disable_functions
–
Permite
desabilitar
 funções
que
não
precisem
ser
utilizadas.
 disable_functions = phpinfo, shell_exec, exec, passthru, proc_open, proc_nice, system, chdir, chroot, dir, closedir, getcwd, opendir, readdir, rewinddir, scandir, popen, pcntl_exec, pcntl_fork, pcntl_alarm, pcntl_setpriority, pcntl_signal, pcntl_wait, pcntl_waitpid, ini_get, ini_get_all, ini_set, ini_restore
    15.   Exemplo
de
uma
página
sem
open_basedir 
configurado:

    16.   Outro
exemplo:
criei
um
arquivo
chamado
readfile.php 
com
o
seguinte
conteúdo: <?php readfile(‘/etc/passwd’); ?>   E
o
resultado:

    17.   E
o
mesmo
exemplo
com
ele
configurado:
 open_basedir = /var/www/:/tmp/
    18.   E
com
o
código
do
readfile.php:

    19. A
polêmica
do
 register_globals

    20.   Com
register_globals
habilitado,
são
criadas
 variáveis
locais
com
o
nome
equivalente
às
da
 EGPCS.
   É
possível
utilizar
register_globals
habilitado
 e
ter
minha
aplicação
segura?
   Por
que
tantos
programadores
insistem
em
 habilitar
register_globals?
   Porque
não
utilizar
register_globals?

    21. Exemplos
de
uso
de
 register_globals

    22.   Exemplo
de
código
com
register_globals
habilitado:
 if (authenticated_user()) $auth = true; if ($auth) echo “Usuário autorizado…”; else echo “Usuário sem autorização!”;   O
código
acima
pode
ser
facilmente
burlado
com
a
 seguinte
URL:
 http://www.site.com.br?login.php?auth=1
    23.   E
agora
da
forma
correta:
 if (authenticated_user()) $_SESSION[‘auth’] = true; if ($_SESSION[‘auth’]) echo “Usuário autorizado…”; else 
 echo “Usuário sem autorização!”;
    24. Utilizando
as
diretivas
 php_flag
php_value

    25.   Com
as
diretivas
php_value,
php_flag,
é 
possível
definir
opções
personalizadas
para 
cada
vhost
via
arquivos
.htaccess.
É 
necessário
que
a
diretiva
AllowOverride 
esteja
definida
com
o
valor
All.
   As
diretivas
php_admin_flag
e 
php_admin_value
só
podem
ser
utilizadas 
em
arquivos
de
configuração
do
Apache
e 
não
podem
ser
sobrescritas
por 
diretivas
.htaccess.

    26.   Exemplo
de
uso
da
diretiva
php_admin_value:

    27. Mod_security

    28.   É
um
firewall
de
aplicação
web
(WAF).
   É
um
módulo
do
Apache.
   Monitoramento,
detecção
e
prevenção
em

 tempo
real.
   Existem
arquivos
de
regras
disponíveis
para
 download.
   Você
mesmo
pode
criar
suas
regras.
   É
possível
criar
whitelists.

    29. Suhoshin

    30.   Um
patch
para
o
PHP
que
pode
ser
utilizado 
como
estensão.
   Proteção
em
tempo
de
execução.
   Tem
modo
de
simulação
e
proteção.
   Aceita
filtrar
entrada
de
dados.
   Permite
encriptar
sessões.
   Proteção
de
memória.
   Aplica
limites
de
requisições
por
tipo
de
variável.
   Várias
opções
de
logs.
   Aceita
criar
whitelist/blacklist.

    31. Cuidados
com
logs
e
exibição
 de
erros
em
ambiente
de
 produção

    32.   Gravar
logs
de
erros
é
útil
para
debugar
 problemas.
   O
usuário
não
deve
ter
acesso
a
todas
as
 informações
de
erro.
   Exibir
erros
em
ambiente
de
produção
pode
 fornecer
informações
sobre
sistema
e
 servidor.

    33. Opções
de
erros
e
logs
no
 php.ini

    34.   error_reporting
–
Define
quais
níveis
de
erros
 serão
reportados.
   display_errors
–
Determina
se
os
erros
devem
 ser
exibidos
como
parte
da
saída
ou
não.
   log_errors
–
Define
se
os
erros
serão
gravados
 em
arquivo
ou
não.
   error_log
–
Define
em
qual
arquivo
os
erros
 serão
gravados.
Necessita
que
o
log_errors
 esteja
ativado.

    35. Programando
com
segurança

    36.   Sempre
verifique
o
tipo
de
dado,
utilize
funções 
ctype_alpha,
ctype_alnum,
ctype_digit, 
is_numeric,
is_digit,
e
expressões
regulares.
   Filtre
os
dados
de
entrada
com
funções
do
tipo 
filter_var
e
filter_input.
   Utilizar
funções
de
escape
output,
como
por 
exemplo
htmlentities,
strip_tags.
   Nunca
utilize
magic_quotes.
   Nunca
armazene
senha
em
texto
plano,
utilize 
hashes
(md5,
sha1,
…).
   Utilize
require_once
no
lugar
de
include.
   Nunca
confie
em
usuário,
sempre
verifique
a 
origem
dos
dados.

    37. Referências

    38.   Site
oficial
da
linguagem
php:
 http://www.php.net
   Site
oficial
do
mod_security
 http://www.modsecurity.org
   Site
oficial
do
suhoshin:
 http://www.hardened‐php.net/suhosin/
   Site
oficial
do
phpsecinfo:
 http://phpsec.org/projects/phpsecinfo/index.html
   Site
oficial
do
Chorizo:
 https://chorizo‐scanner.com

    39. Perguntas?
 cborges@openbsd‐sp.org
 IRC:
irc.freenode.net
 Canais:
slackware‐br,
sysadms,
openbsd‐br,
opensd‐sp


    + manuellemosmanuellemos, 2 years ago

    custom

    1472 views, 0 favs, 2 embeds more stats

    Palestra dada por Claudio Borges no CONAPHP 2008 - more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 1472
      • 1467 on SlideShare
      • 5 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 53
    Most viewed embeds
    • 4 views on http://codesphp.blogspot.com
    • 1 views on http://static.slideshare.net

    more

    All embeds
    • 4 views on http://codesphp.blogspot.com
    • 1 views on http://static.slideshare.net

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories