4. Outros
● senhas e hashs
● configurações de segurança (php.ini)
5. Introdução Segurança
● Uma das coisas mais importantes que o
desenvolvedor deve-se atentar.
6. Introdução Segurança
● Infelizmente a maioria dos desenvolvedores
falham na questão de segurança,
comprometendo dezenas e até milhares de
linhas de códigos.
8. Consequências
● DOS (Denial Of Service).
● Roubo de informações confidenciais.
● Danificar banco de dados.
● Roubo de sessão do usuário.
● Comprometer a aplicação.
9. Regras básicas
● Filtrar dados de Input
● Filtrar dados de Output
10. Filtrar dados de Input
● Não se deve confiar nos dados provenientes
do usuário.
● Toda informação oriunda do usuário deve
ser filtrada/validada antes do uso.
19. Filtrando dados de Saída
<a href="<?php echo htmlspecialchars($url, ENT_COMPAT, 'utf-8'); ?>">
<?php echo htmlspecialchars($name, ENT_NOQUOTES, 'utf-8'); ?>
</a>
20. htmlspecialchars()
Caracter Nome Código
< menor que <
> maior que >
& E comercial &
“ aspas duplas "
http://php.net/htmlspecialchars
22. XSS (Cross-site-scripting)
● É um tipo de ataque que permite injetar
códigos (javascript) maliciosos em sites
“confiáveis”.
● Explora a confiança que o usuário tem no
site.
23. XSS (Cross-site-scripting)
● Roubo de cookies e informações de sessão.
● Disparar requisições HTTP na sessão do
usuário.
● Redirecionar o usuário para sites maliciosos.
● Instalar malware
24. XSS Exemplo - Não Persistente
<?php
// Gera resultados baseado em parametro via GET
echo "Você esta buscando por: " . $_GET["query"];
25. XSS Exemplo - Não Persistente
<?php
// Gera resultados baseado em parametro via GET
echo "Você esta buscando por: " . $_GET["query"];
http://example.com/search.php?query=<script>alert("hacked")</script>
26. XSS Exemplo - Não Persistente
<?php
// Gera resultados baseado em parametro via GET
echo "Você esta buscando por: " . $_GET["query"];
http://example.com/search.php?query=<script>alert("hacked")</script>
Você esta buscando por: <script>alert("hacked")</script>
30. XSS - Prevenção
● Output Escaping
<?php
// Gera resultados baseado em parametro via GET
echo "Você esta buscando por: " . htmlspecialchars($_GET["query"]);
32. SQL Injection
● Permite manipulação de consultas SQL
○ passar por controles de acesso e autenticação.
○ expor dados escondidos.
○ sobrescrita de dados.
○ exclusão de dados.
○ execução de comandos no S.O.
34. SQL Injection
' or '1'='1
SELECT * FROM users WHERE name ='' OR '1'='1';
' or '1'='1' --
SELECT * FROM users WHERE name ='' OR '1'='1' --';
35. SQL Injection
a';DROP TABLE users; --
SELECT * FROM users WHERE name ='a';DROP TABLE
users; --';
36. SQL Injection - Protegendo-se
<?php
$stmt = $dbh->prepare("SELECT * FROM users WHERE name = :name");
$stmt->bindParam(':name', $txtName);
$stmt->execute();
● Suporte:
○ mysqli
○ PDO
37. SQL Injection - Protegendo-se
<?php
$name = mysql_real_escape_string($name);
$sql = "SELECT * FROM users WHERE name ='$name'";
● Usar no caso de extensão padrão do Mysql para PHP
55. Command Injection
● Permite o atacante injetar códigos shell
maliciosos.
● Normalmente quando você usa o input do
usuário para criar um comando shell.
62. Segurança de Sessão
● Flag httponly, php.ini:
session.cookie_httponly = 1
Marca o cookie de sessão do PHP com httponly. Isso faz
com que o novageador não exponha o valor deste cookie
via javascript.
63. Segurança de Sessão
● Flag use_only_cookies, php.ini:
session.use_only_cookies = 1
Desabilita a possiblidade de setar o ID da sesssão via GET.
64. Segurança de Sessão
● Flag cookie_secure, php.ini:
session.cookie_secure = 1
Assegura que o cookie de sessão seja transmitido apenas
por conexão segura.
65. Session hijacking
<?php
session_start();
if (isset($_SESSION['HTTP_USER_AGENT'])) {
if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT'])) {
/* Prompt for password */
exit;
}
} else {
$_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
}