5546 sujets

Sémantique web et HTML

Bonjour à tous,
Je suis en train de concevoir un site structuré autour d'une base de données (MySQL), dans laquelle se trouvera le contenu des pages (php).
Je souhaite créer des formulaires html permettant à plusieurs personnes d'enrichir et mettre à jour cette base afin d'alimenter le site. Pour que le contenu du site soit mis en forme, je voudrais que les quelques contributeurs puissent insérer directement dans les champs du formulaire (et donc par ce biais dans les champs correspondants de la BDD) des balises html/css. Est-ce possible, et sans risquer d'injection SQL ? Sinon, quelle autre solution adopter ?

Voici les balises dont je voudrais permettre l'utilisation :
<p> <ul> (li) <table> (tr, th, td) <a href=""> <b> <i> <u>

Merci pour votre aide.
Modérateur
Bonjour,

Pour les injections SQL, c'est dans tes appels SQL que ça se passe.

Le risque est plutôt l'inclusion de scripts malveillants dans la page et les attaques XSS.

Pourquoi ne pas utiliser un CMS courant qui gère cela très bien?

Alors oui c'est possible sans risquer d'injection XSS, mais c'est tout de même assez complexe. Le mieux est de se servir d'une librairie comme HTML Purifier qui va nettoyer le code pour toi.
Modifié par kustolovic (15 Mar 2017 - 13:55)
Bonsoir,

Comme solution simple en PHP sans être obligé d'utiliser un CMS si tel n'est pas ton désir, il y a la fonction strip_tags.
Elle te permet de supprimer toutes les balises HTML qui ne sont pas dans celles que tu veux autoriser.

Note néanmoins que stocker du HTML en base n'est pas forcément la meilleure idée. Tu peux faire plus simple avec beaucoup moins de risques en utilisant markdown ou des langages wiki.
Avec du HTML tu as toujours un risque, notamment si tu utilises un WYSIWYG pour l'édition, qu'il est particulièrement facile de pièger malgré les protections, en collant du code tordu et/ou inattendu... ça peut même ne pas être volontaire.
Modérateur
Justement n'utiliser que strip_tags est très incomplet et ne permet pas d'éviter les attaques XSS. Il faut supprimer certains attributs, en autoriser certains mais les nettoyer, etc.