Usando ASP clásico, ¿es esta la manera correcta de protegerse contra XSS?
var1=untrusteduserinput
Mostrando un texto en el cuerpo
<%=server.htmlencode(var1)%>
Mostrando un enlace en el cuerpo
<a href="http://www.example.com/page.asp?var1=<%=server.urlencode(var1)%>"><%=server.htmlencode(var1)%></a>
Mostrando una imagen
<img src="http://www.example.com/images/<%=server.urlencode(var1)%>"alt="<%=server.htmlencode(var1)%>">
Mostrando un iframe
<iframe src="http://www.example.com/page.asp?var1=<%=server.urlencode(var1)%>"></iframe>
Enmetaetiquetas
<metaname="description" content="<%=server.htmlencode(var1)%>">
En formas
<input type="text" name="var1" value="<%=server.htmlencode(var1)%>">
EDITAR: En el correo electrónico
<a href="mailto:<%=server.urlencode(var1)%>">Email</a>
EDIT 2:
¿Por qué http://
se convierte en %3A%2F%2F
al usar urlencode en un enlace como este? Entonces el enlace no funciona.
<a href=”<%=server.urlencode(var1)%>”><%=server.htmlencode(var1)%></a>
EDIT 3:
Muchas gracias por sus respuestas! Sin embargo, no estoy seguro si entiendo este derecho. XSS es peligroso en la salida, en lo que está impreso en el sitio web para que otros puedan verlo, ¿verdad? Entonces, ¿pensé que ese era el hecho de que el enlace aparece como un enlace seleccionable que lo hace más peligroso? ¿Que alguien inyecte código malicioso que se ejecuta cuando alguien hace clic en el enlace? Y que fue por eso que tuve que usar urlencode en lugar de htmlencode.
Si tengo un enlace que alguien más ingresó en un formulario, ¿cómo puede estar seguro solo con HTMLencode? No sé si es un enlace dentro de mi propio sitio web o si se trata de un sitio web externo. En teoría, se puede ver exactamente como el enlace en mi primer ejemplo donde utilicé urlencode de una variable que era solo una parte del enlace.
Leí en este foro enlace sobre alguien que tiene un problema similar y, a partir de ese post, pensé que es muy peligroso y casi imposible protegerlo. ¿El XSS muestra una URL externa?
También pasé horas buscando en Google una expresión regular de asp clásica que pueda verificar que se trata de un enlace externo sin contenido peligroso pero que no pudo encontrar nada.