Comment enregistrer HTML à la base de données et le récupérer correctement
L'apprentissage de la sécurité de ces jours 🙂
J'ai besoin de permettre aux utilisateurs d'entrer du texte dans une forme et leur permettre certaines balises HTML: gras, italique, etc la liste. et pour les empêcher d'ajouter un peu dangereux de code JavaScript.
J'ai donc utilisé cette liste blanche de mise en œuvre pour nettoyer le code HTML.
Mais je suis encore confus sur la façon d'enregistrer et d'afficher dans le droit chemin.
Voici donc ce que j'ai fait:
Modèle:
public class Post
{
[AllowHtml]
public string Data { get; set; }
}
Contrôleur:
[HttpPost, ActionName("Create")]
[ValidateAntiForgeryToken]
public ActionResult Create(Post model)
{
//Decode model.Data as it is Encoded after post
string decodedString = HttpUtility.HtmlDecode(model.Data);
//Clean HTML
string sanitizedHtmlText = HtmlUtility.SanitizeHtml(decodedString);
string encoded = HttpUtility.HtmlEncode(sanitizedHtmlText);
Vue:
@using (Html.BeginForm("Create", "Home", FormMethod.Post)) {
@Html.AntiForgeryToken()
@Html.TextAreaFor(a=>a.Data)
<input type="submit" value="submit" />
}
Donc quand je poste un formulaire que je vois:
<p>Simple <em><strong>whitelist</strong> </em>test:</p>
<ul>
<li>t1</li>
<li>t2</li>
</ul>
<p>Image:</p>
<p><img src="http://metro-portal.hr/img/repository/2010/06/medium/hijena_shutter.jpg" /></p>
Becaouse de <p><
je pense que j'ai besoin de décoder le premier:
<p>Simple <em><strong>whitelist</strong> </em>test:</p>
<ul>
<li>t1</li>
<li>t2</li>
</ul>
<p>Image:</p>
<p><img src="http://metro-portal.hr/img/repository/2010/06/medium/hijena_shutter.jpg" /></p>
Puis-je désinfecter à l'encontre de liste blanche et j'ai désinfecté HTML:
<p>Simple <em><strong>whitelist</strong> </em>test:</p>
<ul>
<li>t1</li>
<li>t2</li>
</ul>
<p>Image:</p>
<p>
1) dois-je l'enregistrer comme cela dans la base de données?
2) Ou j'ai besoin de Coder ce résultat et de l'enregistrer dans la base de données (codée ci-dessous)?
<p>Simple <em><strong>whitelist</strong> </em>test:</p>
<ul>
<li>t1</li>
<li>t2</li>
</ul>
<p>Image:</p>
<p>
Ici, je ne sais pas si je l'ai mis sur l'affichage comme ceci:
@Model.Data
- Je obtenir ce sur la vue:
<p>Simple <em><strong>whitelist</strong> </em>test:</p> <ul> <li>t1</li> <li>t2</li> </ul> <p>Image:</p> <p>
ou
<p>Simple <em><strong>whitelist</strong> </em>test:</p> <ul> <li>t1</li> <li>t2</li> </ul> <p>Image:</p> <p>
Alors, que faire pour afficher cette page correctement (gras, liste, etc.)?
source d'informationauteur 1110 | 2014-02-09
Vous devez vous connecter pour publier un commentaire.
La règle de base est la suivante:
Donc:
puis lors de l'affichage:
Avis comment j'ai utilisé le Html.Raw helper ici pour vous assurer de ne pas obtenir le double de HTML codé de sortie. Le
HtmlUtility.SanitizeHtml
fonction doit déjà prendre soin de désinfecter la valeur et le retour d'un coffre-fort de la chaîne que vous pouvez afficher dans votre point de vue et il ne sera pas codé. En revanche, si vous avez utilisé@HtmlUtility.SanitizeHtml(Model.Data)
puis le@
rasoir fonction de codage HTML le résultat de laSanitizeHtml
fonction qui pourrait ne pas être ce que vous cherchez.De framework 4.5, en Utilisant MVC 5, utilisation
@Html.Raw(WebUtility.HtmlDecode(item.ADITIONAL_INFORMAtION))