Vraag Hoe gebruik ik C # om de invoer op een html-pagina te zuiveren?


Is er een bibliotheek of een acceptabele methode om de invoer van een html-pagina te ontsmetten?

In dit geval heb ik een formulier met alleen een naam, telefoonnummer en e-mailadres.

Code moet C # zijn.

Bijvoorbeeld:

"<script src='bobs.js'>John Doe</script>" zou moeten worden "John Doe"


20
2017-10-09 19:41


oorsprong


antwoorden:


Dit is een oudere, maar nog steeds relevante vraag.

We gebruiken de HtmlSanitizer .Net-bibliotheek, die:

Ook op Nuget


12
2017-10-03 18:56



Als u met ontsmetten bedoelt dat u de tags geheel moet VERWIJDEREN, is het RegEx-voorbeeld waarnaar wordt verwezen door Bryant het type oplossing dat u wilt.

Als u er zeker van wilt zijn dat de code NIET knoeit met uw ontwerp en render aan de gebruiker. U kunt de HttpUtility.HtmlEncode-methode gebruiken om dat te voorkomen!


8
2017-10-09 20:03



Op basis van de opmerking die u in dit antwoord hebt gemaakt, vindt u wellicht enkele nuttige informatie in deze vraag:
https://stackoverflow.com/questions/72394/what-should-a-developer-know-before-building-a-public-web-site

Hier is een geparametreerd queryvoorbeeld. In plaats van dit:

string sql = "UPDATE UserRecord SET FirstName='" + txtFirstName.Text + "' WHERE UserID=" + UserID;

Doe dit:

SqlCommand cmd = new SqlCommand("UPDATE UserRecord SET FirstName= @FirstName WHERE UserID= @UserID");
cmd.Parameters.Add("@FirstName", SqlDbType.VarChar, 50).Value = txtFirstName.Text;
cmd.Parameters.Add("@UserID", SqlDbType.Integer).Value = UserID;

Bewerken: Omdat er geen injectie was, verwijderde ik het gedeelte van het antwoord dat daarmee te maken had. Ik heb het standaard geparametriseerde vraagvoorbeeld verlaten, omdat dat nog steeds nuttig kan zijn voor iemand anders die de vraag leest.
  --Joel


8
2017-10-09 20:05



Hoe zit het met het gebruik Microsoft Anti-Cross Site Scripting Library?


7
2017-11-10 12:53



Het lijkt erop dat u gebruikers hebt die inhoud indienen, maar u kunt ze niet volledig vertrouwen en toch wilt u de inhoud die ze leveren nog steeds weergeven als superveilige HTML. Hier zijn drie technieken: HTML codeert alles, HTML-codering en / of verwijdert alleen de slechte delen, of gebruikt een DSL die is gecompileerd naar HTML waarmee u vertrouwd bent.

  1. Moet het "John Doe" worden? ik zou HTML-codering die reeks en laat de gebruiker, "John Doe" (als dat inderdaad zijn echte naam is ...), de domme ogende naam hebben <script src='bobs.js'>John Doe</script>. Hij had zijn naam in scripttags of tags niet moeten hebben verpakt. Dit is de aanpak die ik in alle gevallen gebruik, tenzij er echt een goede businesscase is voor een van de andere technieken.

  2. Accepteer HTML van de gebruiker en zuiver deze vervolgens (op uitvoer) met behulp van een whitelist-benadering zoals de ontsmettingsmethode @Bryant genoemd. Om dit goed te krijgen, is het (extreem) moeilijk en ik verbind het om dit tot een grotere geest te brengen. Merk op dat sommige ontsmettingsmiddelen HTML kwaad zullen coderen waar anderen de beledigende delen volledig zouden hebben verwijderd.

  3. Een andere benadering is om een ​​DSL te gebruiken die "compileert" naar HTML. Zorg ervoor dat witte hoed uw DSL-compiler omdat sommige (zoals MarkdownSharp) zal willekeurige HTML zoals toestaan <script> tags en slechte attributen door ongecodeerd (wat trouwens volkomen redelijk is maar misschien niet wat is u nodig hebben of verwachten). Als dat het geval is, moet u techniek # 2 gebruiken en zuiveren wat uw compiler uitvoert.

Slotopmerkingen:


4
2017-10-04 18:16



Je zoekt RegEx klasse en voor patroon als dit <(.|\n)*?>.

Jij kan vind een lot van examles op google.


-3
2017-10-09 19:58