2010-03-24 6 views
3

Je souhaite créer une application Web de base de données de fragments de code. Le meilleur moyen de le stocker dans la base de données serait de coder tout HTML pour empêcher XSS lors de l'affichage des extraits sur la page Web?Stocker des extraits de code dans une base de données

Merci pour l'aide!

Répondre

7

La base de données n'a rien à voir avec cela; vous avez simplement besoin d'échapper les snippets lorsqu'ils sont rendus en HTML.

Au minimum, vous devez encoder tous & comme &amp; et tous < caractères &lt;. Cependant, votre langage côté serveur dispose déjà d'une fonction de codage HTML intégrée; vous devriez l'utiliser au lieu de réinventer la roue. Pour plus de détails, veuillez nous indiquer dans quelle langue se trouve votre code côté serveur.

D'après vos questions précédentes, je suppose que vous utilisez PHP.
Si oui, vous recherchez les fonctions htmlspecialchars ou htmlentities.

+0

Oui, j'utilise PHP. – cskwrd

+0

Vous devriez voter pour les réponses que vous trouvez utiles en cliquant sur les flèches vers le haut à côté des réponses. – SLaks

0

La meilleure chose à faire est de ne pas le stocker dans la base de données. J'ai vu des gens stocker des procédures stockées dans des bases de données en tant que ligne. Juste parce que vous pouvez ne signifie pas que vous devriez.

+4

Je ne pense pas qu'il veuille réellement stocker du code pour son site dans la base de données, mais plus d'exemples de code de stockage. Des extraits de code pourraient aider à comprendre comment faire quelque chose. – Tarka

+0

c'est une idée tout aussi atroce. Si seulement il y avait un certain type de façon wiki de stocker des informations pertinentes pour votre application d'affaires – Woot4Moo

+0

Slokun, vous avez raison. – cskwrd

2

Vous deviez soit y échapper lorsque vous le stockez, soit y échapper lorsque vous l'affichez. Il serait probablement préférable de le faire sur l'affichage de sorte que si vous avez besoin de le modifier plus tard, vous n'avez pas à le décoder, puis le ré-encoder.

De même, vous voudrez vous assurer que vous l'échapperez correctement lorsque vous le stockez dans la base de données, sinon vous vous laisserez ouvrir à l'injection SQL. Les instructions paramétrées seraient la meilleure méthode, vous ne devriez pas avoir à changer les données brutes du tout.

+2

Je suis d'accord que le garder un-échappé dans la DB est le meilleur. Cela signifie également que si vous avez besoin de changer la façon dont il est échappé (peut-être que vous avez trouvé un bug, ou que vous voulez ajouter une syntaxe, par exemple), vous n'aurez pas à passer par tout le processus. Ajouter une mise en cache décente et vous êtes bon pour la performance, aussi. –

+0

+1 pour HTML en texte clair dans DB ** ET ** le rappel d'être paranoïaque injection SQL! – lexu

0

Peu importe comment vous le stockez, ce qui compte, c'est comment le rendre dans la représentation HTML. Je suppose que vous aurez besoin de faire une sorte d'assainissement avant de rendre les octets. Une autre option pourrait être de convertir chaque caractère en une entité HTML; cela peut suffire à empêcher l'interprétation d'un code ou de balises. Par exemple, consultez la source d'une page Stack Overflow avec un exemple de code, et voyez comment ils représentent le code dans le code HTML.

Questions connexes