Come gestire gli input HTML nel TextBox

Ho bisogno che l’utente possa inserire tag HTML nel TextBox ASP.NET. Il valore della casella di testo verrà salvato nel database e quindi sarà necessario mostrare su un’altra pagina ciò che ha inserito. Così facendo, imposto il ValidateRequest="false" sulla direttiva Page. Ora il problema è che quando l’utente inserisce qualcosa come:

  window.location = 'http://www.xyz.com';  

Ora i suoi valori vengono salvati nel database, ma quando sto mostrando il suo valore in qualche altra pagina, mi reindirizza a "http://www.xyz.com" che è ovvio visto che il javascript lo cattura. Ma ho bisogno di trovare una soluzione perché ho bisogno di mostrare esattamente quello che ha inserito. Sto pensando a Server.HtmlEncode. Puoi guidarmi in una direzione per il mio requisito

Sempre sempre codifica sempre l’input dall’utente e quindi e solo allora persiste nel tuo database. Puoi farlo facilmente facendo

 Server.HtmlEncode(userinput) 

Ora, quando arriva il momento di mostrare il contenuto all’utente, decodifica l’input dell’utente e lo metti sullo schermo:

 Server.HtmlDecode(userinput) 

Devi codificare tutto l’input prima di restituirlo all’utente e potresti prendere in considerazione l’implementazione di un approccio basato su una whitelist sul tipo di HTML che permetti a un utente di inviare.

Suggerisco un approccio whitelist perché è molto più semplice scrivere regole per consentire p, br, em, strong, a (ad esempio) piuttosto che cercare di identificare ogni tipo di input dannoso e inserirli in blacklist.

Forse prendere in considerazione l’utilizzo di qualcosa come MarkDown (come usato su StackOverflow) invece di consentire l’HTML semplice?

È necessario sfuggire alcuni caratteri durante la generazione dell’HTML: '<' -> < , '>' -> > , '&' -> & . In questo modo viene visualizzato esattamente ciò che l’utente ha inserito, altrimenti il ​​parser HTML potrebbe riconoscere i tag HTML ed eseguirli.

Hai provato a utilizzare HTMLEncode su tutti i tuoi input? Personalmente utilizzo Telerik RadEditor che sfugge ai personaggi prima di inviarli … in questo modo il sistema non presenta eccezioni.

Ecco una domanda SO sulla stessa linea.

Dovresti dare un’occhiata ai tag HTML che non vuoi supportare a causa delle vulnerabilità come quella che hai descritto, ad esempio

  • copione

  • img

  • iframe

  • applet

  • object

  • incorporare

  • forma, pulsante, input

e sostituire il leader “<" di "& lt;".

Sostituisci anche e

Editor HTML come CKEditor consentono di richiedere XHTML ben formato e definire tag da escludere dall’input.