O documento discute sessões PHP e bancos de dados. Ele explica como sessões PHP armazenam dados temporariamente usando IDs únicos e mostra um exemplo de código. Ele também discute a necessidade de armazenar dados de forma persistente em bancos de dados e apresenta drivers como mysqli e PDO.
2. PHP Sessions
• Como identificar um usuário na
internet?
• Sessōes trabalham com identificador
único (UID)
• Armazenamento temporário
3. PHP Sessions<?php!
!
// inicia um PHP Session!
session_start();!
!
// guarda uma informação na sessão!
$_SESSION['message'] = 'Hello, Session!';!
!
// recupera uma informação da sessão!
echo $_SESSION['message'];!
!
// remove parte da sessão !
unset($_SESSION['message']);!
!
// remove a sessão inteira !
session_destroy();!
4. Databases
• Necessidade de Persistir e
Recuperar dados por tempo
indeterminado
• Geralmente possui armazenamento
não-volátil
5. Drivers Nativos
• Uma API diferente para cada banco
de dados
• mysqli, pgsql, mssql, etc.
• Melhor opção até o PHP 5.1.0
6. MySQL Extension
• Será removida nas próximas versões
• Funções iniciadas com mysql_*
• mysql_connect, mysql_query, mysql_num_rows,
etc…
• Substituir por mysqli ou PDO
Depreciada no PHP 5.5.0
9. PDO Extension
• Não irá traduzir suas consultas SQL
• Conexão com múltiplos banco de dados
usando a mesma API
• Mais importante: PDO evita ataques de
SQL Injections
• PDO Statements + Bind Parameters
10. SQL Injection
<?php!
!
$pdo = new PDO('sqlite:/path/db/users.db');!
$pdo->query("SELECT name FROM users WHERE id = ".$_GET['id']); // <-- NO!!
SELECT name FROM users WHERE id = 50!
http://yourdomain.com/users?id=50
Resultado:
11. SQL Injection
SELECT name FROM users WHERE id = 50;DELETE FROM users!
E se…
http://yourdomain.com/users?id=50%3BDELETE+FROM+users
Resultado:
<?php!
!
$pdo = new PDO('sqlite:/path/db/users.db');!
$pdo->query("SELECT name FROM users WHERE id = ".$_GET['id']); // <-- NO!!
12. SQL Injection
Como evitar?
<?php!
!
$pdo = new PDO('sqlite:/path/db/users.db');!
$stmt = $pdo->prepare('SELECT name FROM users WHERE id = :id');!
$stmt->bindParam(':id', $_GET['id'], PDO::PARAM_INT); // <--
Automatically sanitized by PDO!
$stmt->execute();!
Maiores informações:
https://www.owasp.org/index.php/SQL_Injection
13. Front Controller
• Padrão Arquitetural
• Bastante utilizado em Aplicações Web
• Responsável pelo Fluxo da Aplicação
• Evita duplicação de código
• Manipulação de Sessões, Caching, Filtro de
dados, Autenticação, etc.