• Nenhum resultado encontrado

Segurança de Aplicativos Web com PHP

N/A
N/A
Protected

Academic year: 2021

Share "Segurança de Aplicativos Web com PHP"

Copied!
43
0
0

Texto

(1)

Segurança de Aplicativos Web

com PHP

Conferencia 11

MSc. Yoenis Pantoja Zaldívar

(2)

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,

(3)

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).

(4)

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

Segurança de Bancos de Dados.

Reporte de Erros.

Cookies.

Tratamento de Sesões

(5)

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.

(6)

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.

(7)

“Alcançar um sistema

seguro es práticamente

(8)

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

(9)

<>

// 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

(10)

<>

// 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

(11)

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.

(12)
(13)
(14)
(15)

São importantes os reportes?

São peligrosos?

(16)

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.

(17)

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.

(18)

“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

(19)

Directiva display_errors

(20)

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

(21)
(22)

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

(23)

<>

// 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

(24)

<>

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

(25)

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?

(26)

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

.

(27)

É 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.

(28)

<>

<>

// 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’";

// …

(29)

// 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

(30)

--<>

$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);

(31)

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

(32)

¿Cómo lograr esta

funcionalidad?

(33)

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

(34)

<>

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

(35)

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)

(36)

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.

(37)

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

(38)

<>

// 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."; }

(39)

<>

// inicio.php

session_start();

if (! isset($_SESSION["autenticado"])) { header (“Location: autenticacion.php"); }

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

session_unset();

header ("Location: autenticacion.php"); }

(40)

<>

// 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

(41)

Configuração de PHP Banco de Dados Reporte de erros Cookies Sesões

SEGURANÇA

(42)

Tarefa

Implementar um pequeno exemplo que

aplique qualquer dos mecanismos para a

segurança aprendidos na conferencia.

(43)

Segurança de Aplicativos Web

com PHP

Conferencia 11

MSc. Yoenis Pantoja Zaldívar

Referências

Documentos relacionados

Esta fala de Waiwai explicita dois tipos de experiências relativas a filmagens que os Waiãpi conheceram: uma negativa, que remete a uma primeira experiência nos anos 70 com os

In the Environmental sector, operated through the ETSA Group, turnover stood at 7.1 million euros in the period in analysis, practically unchanged from the first quarter in

Na sua qualidade de instituição responsável pela organização do processo de seleção, o Secretariado-Geral do Conselho garante que os dados pessoais são tratados nos termos do

Considerando que o valor de bolsa e os indicadores de geração de valor são cada vez mais utilizados pelos investidores ao analisar o desempenho econômico e

2.º A avaliação do processo de desenvolvimento e aprendizagem dos alunos do 1.º ao 9.º ano do Ensino Fundamental e do Programa de Educação de Jovens e Adultos

A maneira expositiva das manifestações patológicas evidencia a formação de fissuras devido a movimentação térmica das paredes, Figura 9, que não foram dimensionadas com

 Para os agentes físicos: ruído, calor, radiações ionizantes, condições hiperbáricas, não ionizantes, vibração, frio, e umidade, sendo os mesmos avaliados

A Coordenação do NETEL convocará candidatos selecionados (seguindo a lógica indicada no item 1.3 deste edital) por meio de mensagem de texto enviada ao e-mail informado pelo