Domanda

Ci sono problemi con quello che sto facendo qui? Questa è la mia prima volta a che fare con qualcosa di simile, e voglio solo per assicurarsi che ho capito tutti i rischi, ecc a metodi diversi.

Sto usando WMD per ottenere l'input dell'utente, e io sono la visualizzazione con un controllo letterale. Dal momento che è modificabile una volta entrati sarò la memorizzazione del codice HTML e non il Markdown,

input = Server.HTMLEncode(stringThatComesFromWMDTextArea)

E quindi eseguire qualcosa di simile a quanto segue per i tag che voglio che gli utenti siano in grado di utilizzare.

// Unescape whitelisted tags.
string output = input.Replace("&lt;b&gt;", "<b>").Replace("&lt;/b&gt;", "</b>")
                     .Replace("&lt;i&gt;", "<i>").Replace("&lt;/i&gt;", "</i>");

Modifica Ecco quello che sto facendo attualmente:

 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("&lt;" + wl + "&gt;", "<" + wl + ">").Replace("&lt;/" + wl + "&gt;", "</" + wl + ">");
     return encodedHTML;
 }
  1. Will quello che sto facendo qui mantenere mi ha protetto da XSS ?
  2. Ci sono altre considerazioni che dovrebbe essere fatto?
  3. C'è una buona lista di normale tag a White list?
È stato utile?

Soluzione

Se i requisiti sono davvero che di base che si può fare queste sostituzioni semplice stringa allora sì, questo è ‘sicuro’ contro XSS. (Tuttavia, è ancora possibile presentare contenuto non ben formato dove <i> e <b> sono mis-annidati o aperto, che potrebbe potenzialmente rovinare pagina il contenuto finisce inserita.)

Ma questo è abbastanza di rado. Per esempio attualmente <a href="..."> o <img src="..." /> non sono ammessi. Se si voleva consentire questi o altri markup con i valori degli attributi in, devi avere un bel po 'più lavoro da fare. Si potrebbe quindi avvicinarsi con regex, ma che ti dà infinite problemi con la nidificazione e la sostituzione dei contenuti già sostituito accidentale, visto che regex non può analizzare HTML, e che.

Per risolvere entrambi i problemi, il solito approccio è quello di utilizzare un [X] parser [HT] ML sull'ingresso, poi a piedi il DOM rimozione di tutti gli elementi, ma noti bene e attributi, poi finalmente ri-serialise a [X] HTML. Il risultato viene poi garantita ben formato e contiene solo il contenuto di sicurezza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top