Tengo una entrada, que muestra un valor (Nombre) en un cuadro de la página. En el lado del servidor, la entrada se escapa mediante la siguiente regla (vb.net):
Public Function UnescapeString(strValue As String) As String
If (String.IsNullOrEmpty(strValue)) Then Return strValue
strValue = Replace$(strValue, """", "")
strValue = Replace$(strValue, "'", "")
strValue = Replace$(strValue, "<", "")
strValue = Replace$(strValue, ">", "")
Return strValue
End Function
La salida no está validada en absoluto.
¡¡No puedo creer que la entrada de escape de <>
pueda ser tan segura como me parece !?
¿Hay trucos para inyectar código o es lo más importante para evitar XSS aquí, para cortar o escapar de los signos <>
?
Pregunta 2: Estoy planeando una reescritura de este método como este:
strValue = Replace$(strValue, """", """)
strValue = Replace$(strValue, "<", "<")
strValue = Replace$(strValue, ">", ">")
strValue = Replace$(strValue, "&", "&")
strValue = Replace$(strValue, "'", "'")
strValue = Replace$(strValue, "/", "/")
strValue = System.Web.HttpUtility.HtmlEncode(strValue) <- or only this
Estoy planeando no recortar, pero escapar de los valores correctamente, como en el ejemplo anterior. O simplemente uso HtmlEncode
(última línea) de .NET, que incluso codifica caracteres especiales como diéresis alemanas, así como señales peligrosas como <>"'/
.