Tenemos una aplicación de alta seguridad y queremos permitir que los usuarios ingresen las URL que verán otros usuarios.La mejor manera de manejar la seguridad y evitar XSS con las URL ingresadas por el usuario
Esto introduce un alto riesgo de hacks XSS - un usuario podría ingresar javascript que otro usuario termina ejecutando. Como tenemos datos confidenciales, es esencial que esto nunca suceda.
¿Cuáles son las mejores prácticas al lidiar con esto? ¿Hay alguna lista blanca de seguridad o patrón de escape lo suficientemente bueno?
Cualquier consejos sobre cómo tratar con los cambios de dirección ("este enlace ocurre fuera de nuestro sitio de" mensaje en una página de advertencia antes de seguir el enlace, por ejemplo)
¿Hay un argumento para no apoyar enlaces introducidos por el usuario en absoluto?
Aclaración:
Básicamente nuestros usuarios quieren de entrada:
stackoverflow.com
Y tenerlo salida a otro usuario:
<a href="http://stackoverflow.com">stackoverflow.com</a>
Lo que realmente me preocupa es que lo usen en un hack XSS. Es decir. ingresaron:
alerta ('hacked!');
Así otros usuarios a obtener este enlace:
<a href="alert('hacked!');">stackoverflow.com</a>
Mi ejemplo es sólo para explicar el riesgo - Soy muy consciente de que JavaScript y direcciones URL son cosas diferentes, pero dejándolos entrada de este último se puede ser capaz de ejecutar el primero.
Se sorprenderá de la cantidad de sitios que puede romper con este truco: HTML es aún peor. Si saben manejar enlaces, ¿saben también desinfectar , <img>
y referencias CSS inteligentes?
Estoy trabajando en un entorno de alta seguridad: un solo hack XSS podría ocasionarnos pérdidas muy elevadas. Estoy feliz de poder producir un Regex (o usar una de las excelentes sugerencias hasta ahora) que podría excluir todo lo que podría pensar, pero ¿sería suficiente?
Necesito el segundo comentario de Nick @ - Javascript no es sinónimo de una URL.¿Estás seguro de que no se trata de desinfectar las entradas de los usuarios y evitar que los datos ingresados se ejecuten si realmente se trata de un código? – warren
De hecho, sé que javascript! = Url. Pero la mayoría de los lugares en los que puede obtener una URL puede incluir javascript en línea. – Keith
Puedes secundarlo upmodding it. Mi respuesta es muy relevante. –