2. Tolos ignoram complexidade, enquanto
pragmáticos sofrem com ela. Alguns até
conseguem evitar.
Gênios a removem.
Epigrams in Programming(http://www.cs.yale.edu/quotes.html)
3. Há duas formas de escrever programas sem erros;
só a terceira realmente funciona.
Epigrams in Programming(http://www.cs.yale.edu/quotes.html)
19. XSS
Cross-Site Scripting
- Permite inserir código que persiste na
página
- Usuário pode inserir código malicioso e
tornar seus outros usuários vítimas
21. XSS
Retirado do site da OWASP
Simples como essa função.
http://br2.php.net/htmlspecialchars
22. XSS
Novamente, várias ferramentas prontas
para facilitar.
Exemplo do framework CodeIgniter
(http://ellislab.com/codeigniter/user-guide/libraries/input.html)
27. CSRF
Você tem um controller que modifica determinado
dado quando requisitado.
Como saber que é uma requisição legítima?
28. CSRF
1- Crie um token aleatório e complexo, como chave de
segurança, provavelmente na hora da autenticação.
29. CSRF
2- Armazene este token também em uma sessão (ou
outra fonte de dados persistente similar, não acessível
ao usuário).
30. CSRF
3- Ao executar qualquer ação dentro do site, como
submeter um formulário em AJAX, envie também o
token (que pode estar guardado em um hidden input).
31. CSRF
4- Ao receber alguma requisição, verifique se o token
foi enviado e, caso tenha sido, se é igual ao
armazenado em sessão. Se não, negue.
33. CSRF
Como o Facebook trata CSRF no PHP SDK:
https://github.com/facebook/facebook-php-sdk/blob/master/src/base_facebook.php
Passo 1 e 2: Cria token e guarda em sessão
47. Path Traversal
Você recebe o caminho de um arquivo, e executa
alguma ação com isso.
http://www.site.com/download.php?arquivo=carro.jpg
48. Path Traversal
O que você recebe como parâmetro está em um
diretório específico, construído para esse fim.
49. Path Traversal
Mas eis que surge o “ZzboladozZ”...
http://www.site.com/download.php?arquivo=../../../../etc/shado
w
50. Path Traversal
É necessário impor limites, não deixar que o usuário
vá a qualquer lugar do sistema. Ele só pode inserir o
nome do arquivo, e não um caminho.
52. Path Traversal
Simples como isso, sem REGEX.
Dessa forma, ../../../anything vira só anything, e
nenhum arquivo indevido é acessado.
53. Path Traversal
1. Quando possível, pode usar identificadores
numéricos para os arquivos, e não caminhos.
54. Path Traversal
Não funciona para poucos casos, como arquivos Phar.
E realpath requer que o caminho exista (caso não
exista, retorna falso).
2. Caso queira que sejam permitidos diretórios no
caminho, mas só “abaixo”, pode usar o