Hoe kan een gebruiker HTML-opmerkingen invoeren?

Gebruikmakend van MVC, EF 4.2. Ik ben bezig met een applicatie met een gedeelte voor reacties. Op dit moment als een gebruiker een opmerking invoert die HTML bevat, bijvoorbeeld

text

en hits indienen ik krijg het bericht "Een potentieel gevaarlijke Request.Form-waarde is gedetecteerd ..."

  1. Hoe kan ik html op weg naar de db afhandelen? Moet ik de HTML gewoon verwijderen? Of codeer je het? Ik probeerde server.htmlencode de tekst, maar ik had nog steeds dezelfde foutmelding.

I have read a number of posts on the matter including some here at SO - this one and this one

In het ideale geval zou ik graag een beperkt aantal html-tags kunnen toestaan, zoals em strong, a. Zouden Anti-XSS, HTML Agility, een soort BB-code of een editor voor de opmaakstijl nog steeds de aanbevolen manier zijn? Ik weet dat Jeff een code op de whitelist heeft - maar het is maar een paar jaar oud.

2

4 antwoord

je kunt doen

[ValidateInput(false)]
public ActionResult foo()
{
}

or you can decorate the model property with AllowHtml

   public class Foo
    {
        [AllowHtml]
        public string bar{ get; set; }
    }
1
toegevoegd
yup dat is het compromis, als je de oudere view-engine gebruikt (ik ben de naam vergeten) kun je <%: Html.TextBoxFor%> schrijven om de waarde te coderen of als je scheermes gebruikt @ syntaxis codeert het de html
toegevoegd de auteur Rafay, de bron
Als u zich zorgen maakt over xss en andere code, kijkt u in de Microsoft Anti-XSS -bibliotheek
toegevoegd de auteur Buildstarted, de bron
Ik heb die kenmerken ook bekeken, maar zouden ze niet toestaan ​​dat XSS en kwaadaardige code via de opmerking worden ingediend?
toegevoegd de auteur Ashok Padmanabhan, de bron

MVC heeft een kenmerk waarmee u kunt opgeven dat een eigenschap html moet toestaan ​​zonder de validatie volledig uit te schakelen. Het is nog steeds gevaarlijk, maar het kan worden beperkt tot een enkele eigenschap, zodat het risico kan worden beperkt. Hier is het MSDN-artikel voor de AllowHtmlAttribute . Het juiste gebruik van het kenmerk moet zijn om de juiste eigenschap in uw model te versieren:

public class MyModel
{
    public MyModel()
    {

    }

   //Some other stuff in here

    [AllowHtml]
    [HttpPost]
    public string MyHtmlString { get; set; }

}
0
toegevoegd

U moet mogelijk ook de requestValidationMode in uw web.config instellen:


  

Zie deze link voor meer informatie.

0
toegevoegd

Mijn oplossing voor het toestaan ​​van HTML-incomments is als volgt:

  1. AllowHtml op de eigenschap CommentText in mijn reactieklasse
  2. Sta een smalle subset van tags toe. Gebruik een Html Sanitizer-klasse om HTML- en inlinescript te scrubben dat niet is toegestaan ​​via een witte lijst
  3. Sla vervolgens het resultaat op naar de db zoals normaal
  4. Gebruik tijdens de uitvoeringstijd Html.Raw om de HTML in de reacties weer te geven
0
toegevoegd