Y a-t-il des problèmes avec ce que je fais ici? C'est la première fois que je fais face à quelque chose comme ça, et je veux juste m'assurer de comprendre tous les risques, etc., pour différentes méthodes. J'utilise WMD pour obtenir l'entrée de l'utilisateur, et je l'affiche avec un contrôle littéral. Comme il est entré une fois non modifiable j'entreposez le code HTML et non le Markdown,Liste blanche, prévention XSS avec contrôle WMD en C#
input = Server.HTMLEncode(stringThatComesFromWMDTextArea)
Et puis exécutez quelque chose comme ce qui suit pour les balises que je veux que les utilisateurs puissent utiliser.
// Unescape whitelisted tags.
string output = input.Replace("<b>", "<b>").Replace("</b>", "</b>")
.Replace("<i>", "<i>").Replace("</i>", "</i>");
Modifier Voici ce que je fais actuellement:
public static string EncodeAndWhitelist(string html)
{
string[] whiteList = { "b", "i", "strong", "img", "ul", "li" };
string encodedHTML = HttpUtility.HtmlEncode(html);
foreach (string wl in whiteList)
encodedHTML = encodedHTML.Replace("<" + wl + ">", "<" + wl + ">").Replace("</" + wl + ">", "</" + wl + ">");
return encodedHTML;
}
- Est-ce que ce que je fais ici me tenir protégé de XSS?
- Y a-t-il d'autres considérations à faire?
- Y a-t-il une bonne liste de balises normales à la liste blanche?
Ce code ne fonctionnera pas pour la balise "IMG" puisque le remplacement de "<img>" ne permet pas l'attribut "src" " – David