Apresentação de boas práticas de segurança nas aplicações web. Contempla princípios de Segurança da informação, prevenção a ataques cross-site scripting, SQL injection e cross-site request forgery.
2. Pilares da Segurança da
Informação
Confidencialidade
Integridade
Disponibilidade
rafaelmonteiro / web-development-security
3. Princípios
Segurança em múltiplas camadas
Considere que cada camada eventualmente falhará
Forneça o mínimo de informação necessária
rafaelmonteiro / web-development-security
4. Validação de entradas
Considerando que a requisição HTTP pode ser
manipulada pelo cliente, toda entrada do usuário
deve ser validada.
rafaelmonteiro / web-development-security
5. Proteção
Para isso, o PHP oferece as extensões ctype e filter.
Além disso, a maioria dos frameworks de mercado
implementam algum tipo de
tratamento/sanitização de dados.
PHP 7+ oferece type declarations que permitem
especificar o tipo esperado de parâmetros. Para
isso:
declare(strict_types=1);
rafaelmonteiro / web-development-security
6. Cross-site scripting (XSS)
Ocorre quando um script inserido por um usuário é
armazenado e/ou executado pela aplicação.
rafaelmonteiro / web-development-security
10. Proteção
faz com que apenas códigos do
mesmo origin (protocolo/domínio/porta) tenham
acesso à aplicação, ao mesmo tempo que permite
acesso a arquivos externos (uma lib como o ,
por exemplo)
Filtrar entradas ( , , )
Escapar as saídas ( , ,
)
Aplicar (default-src, img-src,
script-src) -> eliminar código inline
Same-origin Policy
JQuery
strip_tags filter_var preg_replace
htmlspecialchars htmlentities
filter_var
Content Security Policy
rafaelmonteiro / web-development-security
12. SQL Injection
Proteção
Não concatenar dados (parâmetros) com comandos
Utilizar prepared statements
Validar entradas
Escapar caracteres
rafaelmonteiro / web-development-security
13. Gerenciamento de estado
Proteção
Usar HTTPS
Definir secure e HttpOnly flags
Prevenir XSS
ID de sessão
Armazenar informação do usuário na sessão
(headers)
Detectar sequestro de sessão
Usar para dificultar o roubo de sessão
Alterar
HSTS
rafaelmonteiro / web-development-security
15. Cross-site Request Forgery
(CSRF)
Causado por vírus, scam/phishing,
site/redirecionamento malicioso
Proteção
Não usar GET para operações que envolvam
manipulação de dados (porém, o POST também
pode ser manipulado)
Enviar token
rafaelmonteiro / web-development-security
16. Clickjacking
Atacante cria página e, através de requisições para o
site alvo (usualmente via iframe), aproveita-se da
sessão do usuário
Proteção
header(‘X-FRAME-OPTIONS’, ‘DENY’); //ou SAMEORIGIN
rafaelmonteiro / web-development-security