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.

Erreurs / Exceptions

Cette mĂ©thode elle-mĂȘme ne lance pas d'exception, mais si la fonction de rappel d'autorisation ne retourne pas un int, ou retourne un int qui n'est pas l'une des valeurs Pdo\Sqlite::OK, Pdo\Sqlite::DENY ou Pdo\Sqlite::IGNORE, la prĂ©paration de l'instruction lance respectivement une TypeError ou une ValueError.

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
add a note

User Contributed Notes

There are no user contributed notes for this page.