Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados...

43
Segurança de Aplicativos Web com PHP Conferencia 11 MSc. Yoenis Pantoja Zaldívar Programação Web

Transcript of Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados...

Page 1: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

Segurança de Aplicativos Web

com PHP

Conferencia 11

MSc. Yoenis Pantoja Zaldívar

Programação Web

Page 2: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

10 conselhos de segurança

1. Evitar os links suspeitos.

2. Não aceder aos websites de duvidosa

reputação.

3. Actualizar o SO e aplicativos com os últimos

patches de segurança.

4. Descarregar aplicativos desde websites

oficiais.

5. Utilizar tecnologias de segurança (ex. antivirus,

firewall e antispam).

Page 3: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

10 conselhos de segurança

6. Evitar a entrada de dados pessoales em

formularios duvidosos.

7. Ter cautela com os resultados devolvidos por

pesquisas na web.

8. Evitar a ejecução de arquivos duvidosos.

9. Aceitar só contactos conhecidos (clientes de

mensajería, redes sociais).

10. Utilizar senhas fortes.

Page 4: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

Opções de configuração do PHP.

Segurança de Bancos de Dados.

Reporte de Erros.

Cookies.

Tratamento de Sesões

Resumo

Page 5: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

Caracterizar os mecanismos de

segurança para as distintas ameaças que

podam surgir, aproveitando as funções e

potencial que fornece o PHP para fazer

um aplicativo mais confiável e seguro.

Objectivo

Page 6: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

PHP 5 Power Programming. Cap. 7. Disponible

no website da disciplina: https://progwebisutic.files.wordpress.com/2016/07/php-

5-power-programming.pdf

PHP DOCUMENTATION GROUP. PHP Manual.

Bibliografía

Page 7: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

“Alcançar um sistema

seguro es práticamente

imposível”

Page 8: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

Uso de register_globals

Directiva para a definição automática de as

variáveis externas.

Como alternativa deben-se utilizar as

variáveis superglobales tais como $_GET,

$_POST, $_REQUEST, $_SESSION

Page 9: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

<>// autenticacion.php

if ($password == “my_password”) {

$authorized = 1;

}

if ($authorized == 1) {

// Ações importantes

}

// PROBLEMA DE SEGURIDADE com a direção

// http://localhost/autentificacion.php?authorized=1

Exemplo (parte 1 de 2)

Page 10: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

<>// autenticacion.php

// SOLUÇÃO 1

$authorized = 0; // Inicializar a variável

if ($password == “my_password”) {

$authorized = 1;

}

if ($authorized == 1) {

// Ações importantes

}

// SOLUÇÃO 2

// Estabelecer valor register_globals=Off no arquivo de

configuração de PHP

Exemplo (parte 2 de 2)

Page 11: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

Definir as variáveis antes de usarlas.

Usar matrizes superglobales.

Não usar nomes típicos para as variáveis,

porque aumenta a posibilidade de que um

invasor poda descobrir como modificar

seus valores.

Bõas práticas

Page 12: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

Erros en PHP

Page 13: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

Erros en PHP

Page 14: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

Erros en PHP

Page 15: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

São importantes os reportes?

São peligrosos?

Erros en PHP

Page 16: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

Mecanismo útil para o desenvolvedor

(causa, arquivo, linha de um erro).

Debe-se limitar e/ou personalizar para

um meio de produção, porque pode

revelar informação sensível do sistema

tornando-o vulnerável aos ataques.

Reporte de erros

Page 17: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

Introdução de dados inapropriados.

Verificação dos tipos de erros devolvidos e

seus contextos.

Obter informação do servidor para

determinar possívels fraquezas.

Tática de ataques

Page 18: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

“With this directive set to off, errors that occur during the execution of scripts will no longer be

displayed as a part of the script output, and thus,

will no longer be exposed to remote users. With some errors, the error message content may

expose information about your script, web server, or database server that may be exploitable for

hacking. Production sites should have this

directive set to off”

display_errors

Directiva display_errors

Page 19: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

Directiva display_errors

php.ini

Page 20: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

Alguns níveles de reporte

E_ERROR E_WARNING E_PARSE

Erros fatais de

ejecução

Avisos de ejecução

E_NOTICE

Erros de compilação

Notificações de

ejecução (ex. variáveis

sem inicializar)

E_ALL

Todos os erros e avisos

(excepto E_STRICT)

para más información

VER MANUAL?

Page 21: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

Nívels de reporte: phi.ini

Page 22: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

Nívels de reporte: phi.ini

Common Values:• E_ALL (Show all errors, warnings and notices including coding

standards.)

• E_ALL & ~E_NOTICE (Show all errors, except for notices)

• E_ALL & ~E_NOTICE & ~E_STRICT (Show all errors, except for

notices and coding standards warnings.)

• E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_C

ORE_ERROR (Show only errors)

• Default Value: E_ALL & ~E_STRICT & ~E_DEPRECATED

• Development Value: E_ALL

• Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT

error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT

Page 23: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

<>// Deshabilitar todo reporte de erros

error_reporting(0);

// Reportar todos os erros excepto E_NOTICE

// Este é o valor predeterminado no php.ini

error_reporting(E_ALL ^ E_NOTICE);

/////////////// No php.ini /////////////////////////////////////////////////////

// Deshabilitar todo reporte de erros

display_errors = Off

// Reportar todos os erros excepto E_NOTICE

error_reporting = E_ALL & ~E_NOTICE

Exemplo: Reporte de erros

Page 24: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

<>function divide($x) {

if ($x==0) {

throw new Exception('División por cero.');

}

else return 1/$x;

}

try {

echo divide(5) . "\n";

echo divide(0) . "\n";

} catch (Exception $e) {

echo 'Excepção capturada: ', $e->getMessage(), "\n";

}

// Continuar a ejecução

Exemplo: Trabalho com erros

Page 25: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

Segurança em Bancos de Dados

tb_estudante

numero turma

tb_nota

id nota disciplina

1

1…n

tb_profesor

numero disciplina turma

1

1…n

Tem modifica

Qué acontece se ambos conectam-se ao Banco de

Dados com os mesmos permisos sobre a tabela

tb_nota?

Page 26: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

Os aplicativos não deven ser ligados ao

banco de dados com o usuario

correspondente à seu proprietário (root).

Podem-se criar diferentes usuarios do BD

para cada rol de seu aplicativo com

dereitos limitados.

Asegurar as conexões: encriptar.

Segurança em Bancos de Dados

Page 27: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

É uma técnica na qual um atacante cria ou

muda comandos SQL existentes para

mostrar dados ocultos, sobrescrever

dados críticos, ou executar comandos do

sistema peligrosos na máquina donde

está o banco de dados.

Inyeção de SQL

Page 28: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

<><>// Código XHTML

<form method="login.php" action="POST">

Usuario: <input type="text" name=“txt_usuario" />

Senha: <input type="password" name=“psw_senha" />

<input type="submit" value=“Aceder" />

</form>

// No procesamento com PHP

$u = $_POST[‘txt_usuario’];

$c = md5($_POST[‘psw_senha’]);

$sql = "SELECT * tb_usuario WHERE usuario=‘$u’ AND clave= ‘$c’";

// …

Exemplo

Page 29: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

// No procesamento com PHP …

$sql = “SELECT * FROM tb_usuario WHERE nombre=‘pepe’ OR 1 = 1 --’ AND

clave=‘d41d8cd98f00b204e9800998ecf8427e’”;

// …

Inyeção SQL

pepe‘OR 1 = 1 --

pepe’ OR 1 = 1 --

Page 30: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

<>$sql = sprintf("INSERT INTO tb_usuario (nombre,

clave) VALUES ('%s', '%s');",

pg_escape_string($u), md5($c));

$resultado = pg_query($con, $sql);

// para obtener el usuario

$sql = sprintf("SELECT * FROM tb_usuario

WHERE nombre='%s' AND clave='%s';",

pg_escape_string($u), md5($c));

$resultado = pg_query($con, $sql);

Exemplo: Encriptar valores

Page 31: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

Filtrado dos dados de entrada.

Validação dos tipos de dados: is_numeric(),

ctype_digit() , is_string()

Uso de aspas simples nos dados.

Não ligarse aos SGBD como superusuario.

Proteção vs. ataques SQL

Page 32: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

¿Cómo lograr esta

funcionalidad?

Page 33: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

Cookies

setcookie() $_COOKIE

Array asociativo de variávels

pasadas ao script actual

através de Cookies HTTP

para más información

VER MANUAL?

Define uma cookie para ser

enviada junto com as demais

cabeceras de HTTP

Page 34: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

<>setcookie(“autenticado", “yes”);

// hasta que o navegador seja fechado

setcookie(“autenticado", “yes”, 0);

// 30 días

setcookie(“autenticado", “yes”, time() + 60*60*24*30);

// Em outro arquivo…

echo $_COOKIE[“autenticado”];

// yes

Exemplo

Page 35: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

São parte da cabecera HTTP, por tanto a

função setcookie() debe invocarse antes de

cualquer saída ao navegador.

Não serão visíveis hasta a seguinte carga de

uma página na que deben estar disponíveis.

Têm que ser eliminadas com os mesmos

parámetros com os que são criadas

(subtraindo o tempo)

Importante: sobre as cookies

Page 36: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

Permitem criar uma sesão por cada

usuario ligado.

Verificar em cada página do aplicativo qué

usuario está ligado.

Mostrar o conteúdo da página em

dependença dos permisos que tenha cada

usuario.

Sesões

Page 37: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

Sesiones

session_start() session_unset()

$_SESSION

Libera todas as variáveis de

sesão

para más información

VER MANUAL?

Array asociativo que contém

variáveis de sesão disponíveis

Iniciar uma nova sesão

unset($var)

Destrói uma variável

especificada

Page 38: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

<>// autenticacion.php

$usuario = $_POST["txt_nome_usuario"];

$senha = $_POST["psw_senha"];

if ($usuario == "docencia" && $senha == "docencia") {

session_start();

$_SESSION["autenticado"] = $usuario;

header ("Location: inicio.php");

} else {

echo "El usuario o la clave no son v&aacute;lidos.";

}

Exemplo 1: Sesões (parte 1 de 2)

Page 39: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

<>// inicio.php

session_start();

if (! isset($_SESSION["autenticado"])) {

header (“Location: autenticacion.php");

}

if(isset($_POST["btn_salir"])){

session_unset();

header ("Location: autenticacion.php");

}

Exemplo 1: Sesões (parte 2 de 2)

Page 40: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

<>// inicio.php

session_start();

$rol = $_SESSION['rol_usuario'];

switch($rol) {

case ‘editor’:

header("Location:../Modulos/Editor/editor.php");

break;

case ‘administrador’:

header("Location:../Modulos/Admin/admin.php");

break;

default:

header("Location:../inicio.php");

}

Ejemplo 2: Sesiones

Page 41: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

Configuração

de PHP

Banco de

Dados

Reporte de

errosCookies

Sesões

SEGURANÇA

Page 42: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

Tarefa

• Implementar um pequeno exemplo que

aplique qualquer dos mecanismos para a

segurança aprendidos na conferencia.

Enviar por correo antes de segunda feira.

Page 43: Segurança de Aplicativos Web com PHP...10 conselhos de segurança 6. Evitar a entrada de dados pessoales em formularios duvidosos. 7. Ter cautela com os resultados devolvidos por

Segurança de Aplicativos Web

com PHP

Conferencia 11

MSc. Yoenis Pantoja Zaldívar

Programação Web