2012-07-08 19 views
6

El método MS AntiXSS (v4.2.1) Sanitizer.GetSafeHtmlFragment(string) está eliminando las etiquetas <br> y <br /> de mi entrada. Se supone que pase esto? ¿Hay alguna forma de evitarlo?¿Se supone que Sanitizer.GetSafeHtmlFragment elimina los elementos <br>?

Parece que está eliminando los caracteres \n y \r también, por lo que no puedo llamar al Replace() después de que el sanitizador haya hecho su trabajo.

Respuesta

7

El lanzamiento de la versión 4.2.x estuvo motivado por una vulnerabilidad de seguridad detectada con precisión en el sanitizador de HTML. Más información sobre este hecho:

Sin embargo, parece que además de la fijación de la vulnerabilidad del desinfectante se cambió a ser mucho más agresivo hasta el punto de ser casi inutilizable. Existe un problema informado sobre este hecho en el sitio WPL CodePlex (GetSafeHtmlFragment replacing all html tags).

Si su problema es solo con la etiqueta <br> y desea seguir con el desinfectante AntiXSS, puede implementar una solución fea recurriendo al preprocesamiento de su entrada y luego procesar el resultado del sanitizador.

Algo como esto (código solamente con fines ilustrativos):

static void Main(string[] args) 
{ 
    string input = "<br>Hello<br/>World!"; 

    input = EscapeHtmlBr(input); 
    var result = Sanitizer.GetSafeHtmlFragment(input); 
    result = UnescapeHtmlBr(result); 

    Console.WriteLine(result); 
} 

const string BrMarker = @"|br|"; 

private static string UnescapeHtmlBr(string result) 
{ 
    result = result.Replace(BrMarker, "<br />"); 

    return result; 
} 

private static string EscapeHtmlBr(string input) 
{ 
    input = input.Replace("<br>", BrMarker); 
    input = input.Replace("<br />", BrMarker); 
    input = input.Replace("<br/>", BrMarker); 

    return input; 
} 
+2

Gracias ... que era lo que estaba "esperando" para. Sin embargo, parece que la biblioteca AntiXSS es básicamente inútil ahora. Quería usarlo en un área de texto WYSIWYG ... está limpiando demasiado. ; ( – Chaddeus

+1

Solo para agregar, parece que si desea la funcionalidad menos agresiva, necesitamos usar 'HTMLsantizationLibary.dll' que es parte de AjaxControlToolkit - http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/HTMLEditorExtender/ HTMLEditorExtender.aspx – RemarkLima

Cuestiones relacionadas