2010-12-05 7 views
0

J'expérimente avec la création d'un système de commentaire. J'utilise php-OEmbed classe et HTML Purifier. Quel filtre puis-je utiliser pour m'assurer que les commentaires peuvent être insérés dans ma base de données en toute sécurité? Je sais que vous pouvez utiliser des filtres PHP tels que FILTER_SANITIZE_STRING, mais ne transformeront-ils pas le HTML en entités?Garantir la sécurité des commentaires

De plus, si vous utilisez quelque chose comme le WMD editor, devez-vous utiliser quelque chose du côté client (comme PHP Markdown) pour vous assurer qu'il est sûr?

Répondre

2

Fondamentalement, vous devez nettoyer l'entrée utilisateur chaque fois que vous l'envoyez quelque part. Lorsque vous le placez dans votre base de données, vous devez empêcher l'injection SQL en indiquant des caractères spéciaux SQL (les instructions préparées le feront pour vous). Lorsque vous l'envoyez à un navigateur, vous devez échapper les caractères spéciaux HTML (PHP a des fonctions pour cela) pour empêcher l'injection de script.

Il peut y avoir d'autres endroits où vous devez également sortir des caractères spéciaux. Par exemple, si vous envoyez les commentaires à un script Bash sur le serveur pour effectuer un traitement. Dans ce cas, vous devez citer ou échapper des caractères spéciaux spécifiques à Bash.

Il est important de ne pas citer/échapper au mauvais stade: par exemple, n'échappez pas aux entités HTML lorsque vous les placez dans la base de données, sauf si vous êtes absolument sûr de ce que vous faites. Il est très facile d'échapper accidentellement à nouveau lorsque vous le sortez de la base de données et que vous vous préparez à l'envoyer à un navigateur ou si vous envoyez un message d'erreur en cas d'échec de la connexion à la base de données). Evadez-vous au dernier moment et vous éviterez probablement ces pièges.

1

Vous n'avez pas besoin d'utiliser de filtre pour l'injection SQL. Une solution préférable est d'utiliser prepared statements. Par exemple, PDO fournit PDOStatement.

+0

J'oublie d'ajouter, j'utilise redbean, qui est construit sur PDO. – jonnnnnnnnnie

Questions connexes