Cree una página de "salida" con ASP clásico para evitar los principales escollos de Cross Site Scripting

StackOverflow https://stackoverflow.com/questions/231204

Pregunta

Estoy trabajando para actualizar una página web ASP clásica utilizada por varios subsitios mantenidos en la empresa para la que trabajo.

El propósito de la página es notificar al usuario que está dejando " nuestro " sitio y yendo a otro sitio. Básicamente es un descargo de responsabilidad, pero debido a limitaciones de recursos y limitaciones de tiempo, no puedo agregar el descargo de responsabilidad a todos los sitios que administramos.

Este es el quid del problema. El código actual extrae una variable de la cadena de consulta para crear el " continue " Enlace en la nueva ventana. Obviamente, esto crea muchos problemas en forma de scripts de sitios cruzados.

¿Cómo abordo esta actualización para eliminar la mayoría (si no todos) de los problemas de secuencias de comandos de sitios cruzados usando vbScript / ASP.

El código que estoy usando está debajo.

<%@ Language = vbScript %>
<% Option Explicit %>

<%
Dim strLink
strLink = Request.QueryString("site")
strLink = Replace(strLink, "<", "&lt")
strLink = Replace(strLink, ">", "&gt;")
strLink = Replace(strLink, chr(34), "")
strLink = Replace(strLink, "script", "", 1, -1, 1)
strLink = Replace(strLink, "onclick", "", 1, -1, 1)
strLink = Replace(strLink, "ondblclick", "", 1, -1, 1)
strLink = Replace(strLink, "onmousedown", "", 1, -1, 1)
strLink = Replace(strLink, "onmouseover", "", 1, -1, 1)
strLink = Replace(strLink, "onmousemove", "", 1, -1, 1)
strLink = Replace(strLink, "onmouseout", "", 1, -1, 1)
strLink = Replace(strLink, "onkeypress", "", 1, -1, 1)
strLink = Replace(strLink, "onkeydown", "", 1, -1, 1)
strLink = Replace(strLink, "onkeyup", "", 1, -1, 1)
strLink = Replace(strLink, "onfocus", "", 1, -1, 1)
strLink = Replace(strLink, "onblur", "", 1, -1, 1)
strLink = Replace(strLink, "&&", "")
strLink = Replace(strLink, "##", "")
strLink = Replace(strLink, "&#", "")
%>

<a href="<%= strLink %>">Continue</a>
¿Fue útil?

Solución

Esto es lo que recomiendo para la desinfección HTML -

La lista blanca HTML es la última versión del " pequeño servicio web Python presentado en App Engine " por mi buen colega DeWitt Clinton.

Hace una cosa, y lo hace bien. Puede pasar el servicio HTML y devolverá una versión desinfectada.

http://html-whitelist.appspot.com/

Otros consejos

Debe implementar un enfoque que siga el concepto de " Modelo de seguridad positivo " ;. Debes analizar el " sitio " variable y asegúrese de que se ajusta explícitamente a lo que está permitido, en lugar de escribir algo que busque lo que debe ser rechazado. Esto hará que su enfoque sea mucho más resistente a los ataques, especialmente los no anticipados.

Sugiero escribir una expresión regular (o preguntar cómo escribir una expresión regular de este tipo en stackoverflow).

Además, aunque el servicio web publicado por Michael es bastante bueno, debe evaluar si es aceptable o no depender de tal cosa.

Puede agregar lógica para continuar la página para asegurarse de que solo sea llamada por una página en uno de sus sitios, ya sea en función de la URL o la dirección IP. También puede pasar un código de tiempo y hash para mayor seguridad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top