le degré de sécurité sont préparées de PDO
Commencé à utiliser PDO préparées il y a pas longtemps, et, comme je le comprends, il fait tout le échappant/sécurité pour vous.
par exemple, en supposant que $_POST['titre'] est un champ de formulaire.
$title = $_POST['title'];
$query = "insert into blog(userID, title) values (?, ?)"
$st = $sql->prepare($query);
$st->bindParam(1, $_SESSION['user']['userID'], PDO::PARAM_INT);
$st->bindParam(2, $title);
$st->execute();
Est-ce vraiment sûr? Dois-je faire autre chose? quoi d'autre dois-je prendre en considération?
Grâce.
Vous devez vous connecter pour publier un commentaire.
Strictement parlant, il n'existe pas de s'échapper nécessaire, parce que la valeur du paramètre n'est jamais interpolées dans la chaîne de requête.
La façon dont les paramètres de la requête travail est que la requête est envoyée au serveur de base de données lorsque vous avez appelé
prepare()
, et les valeurs des paramètres sont envoyés plus tard, quand vous avez appeléexecute()
. Si elles sont séparées de la forme textuelle de la requête. Il n'y a jamais une occasion pour l'injection SQL (à conditionPDO::ATTR_EMULATE_PREPARES
est faux).Donc oui, les paramètres de requête vous aider à éviter cette forme de vulnérabilité de la sécurité.
Sont-ils 100% imperméable à toute faille de sécurité? Non, bien sûr que non. Comme vous le savez peut-être, un paramètre de requête ne prend la place d'une seule valeur littérale d'une expression SQL. Vous ne pouvez pas faire un seul paramètre de substitution pour une liste de valeurs, par exemple:
Vous ne pouvez pas utiliser un paramètre pour que les noms de table ou de colonne des noms dynamiques:
Vous ne pouvez pas utiliser un paramètre pour tout autre type de syntaxe SQL:
Il y a donc assez peu de cas où vous avez à manipuler la requête comme une chaîne de caractères, avant la
prepare()
appel. Dans ces cas, vous avez encore le besoin d'écrire du code avec soin pour éviter les injection SQL.LIKE ?
est valide, mais vous devez échapper les caractères utilisés pour la correspondance.C'est la sécurité de l'injection SQL.
Un couple de choses qu'il n'est PAS sûr à partir de:
La sécurité est plus que juste la prévention de l'injection SQL.
Concernant les Injections SQL, je crois que c'est le plus sûr que vous pouvez obtenir, spécialement si vous utilisez des constantes comme PDO::PARAM_INT.
De voir que XSS a été mentionné, je pense qu'il est aussi bon de prendre un coup d'oeil à l'aide des choses telles que la saisie de nettoyage de la classe http://www.phpclasses.org/browse/package/2189.html pour empêcher les attaques XSS.