Pdo\Sqlite::setAuthorizer
(PHP 8 >= 8.5.0)
Pdo\Sqlite::setAuthorizer â Configure une fonction de rappel Ă utiliser comme autorisateur pour limiter ce qu'une instruction peut faire
Description
public function Pdo\Sqlite::setAuthorizer(
?callable $callback):
void
Définit une fonction de rappel qui sera appelée par SQLite chaque fois qu'une action
est effectuée (lecture, suppression, mise à jour, etc.). Cela est utilisé lors de la
préparation d'une instruction SQL provenant d'une source non fiable, afin de s'assurer
que l'instruction n'accÚde pas à des données qu'elle n'est pas autorisée à voir et
n'exécute pas d'instructions malveillantes qui endommageraient la base de données.
L'autorisateur n'est utilisé que pendant la phase de préparation de l'instruction.
Il peut ĂȘtre appelĂ© plusieurs fois pour une seule instruction : une requĂȘte
SELECT ou UPDATE l'appelle pour chaque colonne
qui serait lue ou mise à jour. Il est appelé de nouveau chaque fois que SQLite
prépare à nouveau une instruction, ce qui peut se produire pendant que l'instruction
est en cours d'exécution, par exemple aprÚs une modification du schéma.
L'autorisateur est appelé avec jusqu'à cinq arguments. Les arguments reçus sont
décrits sur la page SQLite3::setAuthorizer().
Un seul autorisateur peut ĂȘtre en place Ă la fois sur une connexion Ă une base de
données. Chaque appel à cette méthode remplace le précédent. L'autorisateur est
dĂ©sactivĂ© par dĂ©faut, et peut ĂȘtre dĂ©sactivĂ© de nouveau en dĂ©finissant une fonction
de rappel null.
La fonction de rappel ne doit pas modifier la connexion à la base de données qui
l'a invoquée.
Plus de détails sont disponibles dans la
» documentation de SQLite.
Note:
Cette méthode est l'équivalent de SQLite3::setAuthorizer(),
Ă ceci prĂšs qu'elle retourne void au lieu de bool.
Liste de paramĂštres
callback
-
Le callable à invoquer, ou null pour désactiver la fonction de
rappel d'autorisation courante.
Il doit retourner l'une des valeurs Pdo\Sqlite::OK,
Pdo\Sqlite::DENY ou
Pdo\Sqlite::IGNORE.
Lorsque Pdo\Sqlite::DENY est retourné, l'instruction qui a
déclenché l'autorisateur échoue avec une erreur indiquant que l'accÚs est refusé.
Lorsque Pdo\Sqlite::IGNORE est retourné pour une action de
lecture, l'instruction est préparée de sorte qu'une valeur null soit substituée
à la colonne qui aurait été lue.
Valeurs de retour
Aucune valeur n'est retournée.
Exemples
Exemple #1 Exemple avec Pdo\Sqlite::setAuthorizer()
Seules les actions de lecture sont autorisées sur la connexion. Les codes d'action
sont exposés en tant que constantes de la classe SQLite3, ce
qui nécessite que l'extension SQLite3 soit
disponible ; leurs valeurs entiĂšres peuvent ĂȘtre utilisĂ©es directement dans le cas
contraire.
<?php
$db = new Pdo\Sqlite('sqlite::memory:');
$db->exec('CREATE TABLE users (id, name)');
$db->setAuthorizer(function (int $action, ...$args) {
return match ($action) {
SQLite3::SELECT, SQLite3::READ => Pdo\Sqlite::OK,
default => Pdo\Sqlite::DENY,
};
});
var_dump($db->query('SELECT name FROM users') instanceof PDOStatement);
try {
$db->exec('DROP TABLE users');
} catch (PDOException $e) {
echo $e->getMessage(), "\n";
}
?>
Résultat de l'exemple ci-dessus est similaire à :
bool(true)
SQLSTATE[HY000]: General error: 23 not authorized
Voir aussi
- SQLite3::setAuthorizer() - Configure une fonction de rappel Ă utiliser comme autorisateur pour limiter ce qu'une instruction peut faire