Peligro de que mi sitio web realice solicitudes web arbitrarias

2

Estoy configurando un pequeño sitio web de alojamiento de códigos, en la vena de github o bitbucket. Me gustaría permitir que los usuarios especifiquen una URL arbitraria desde la cual el servidor de mi sitio clonará inicialmente su repositorio. Estoy usando mercurial, por lo que la clonación básicamente significa negociar un protocolo simple basado en HTTP entre el cliente (mi servidor en este caso) y el host (la URL que el usuario ha proporcionado).

No conozco todos los detalles del protocolo mercurial, pero implica realizar algunas solicitudes GET y POST HTTP y especificar algunos parámetros de consulta en la URL proporcionada por el usuario. Aparte de la URL, el usuario no debe tener ningún control sobre las solicitudes que se envían desde mi sitio a la URL que especifican.

Si tiene éxito, la interacción con la URL proporcionada producirá un conjunto de archivos, que se enviarán desde mi sitio, posiblemente a otros usuarios, pero no directamente, con la excepción de las imágenes. En otras palabras, si se trata de un archivo de imagen, lo serviré, pero de lo contrario solo se podrá ver como texto de escape.

¿Hay alguna implicación de seguridad que deba tener en cuenta con esto? Entiendo que no puedo mostrar HTML, Javascript, Flash, etc. proporcionados por el usuario de forma arbitraria y, a menos que haya un problema con la entrega de imágenes arbitrarias que no conozco, creo que la parte de la porción debería estar bien. Me preocupa más la interacción con direcciones URL arbitrarias que proporcionó un usuario.

    
pregunta brianmearns 10.03.2014 - 17:08
fuente

1 respuesta

2
  

es un problema que sirve imágenes arbitrarias que no conozco

En realidad, hay Gifars que son una imagen GIF y un archivo JAR combinados.

Con respecto a su pregunta original, debe validar la URL para verificar que sea un formato válido para una URL http o https (es decir, no FTP u otro protocolo), y debe verificar que el dominio se resuelva en una externa sitio web (es decir, que un atacante no ha ingresado una IP interna como 192.168.1.1 o que el DNS se resuelve en una IP interna que podría sondear su infraestructura de red interna). Asegúrese de que su solicitud HTTP vaya a la misma IP que la que usa su validación. También debe bloquear el entorno de su servidor tanto como sea posible para que solo los servidores internos necesarios puedan contactarse en su red.

Debe asegurarse de que no se sigan los redireccionamientos HTTP, o si lo están, debe ejecutar la misma validación en cada redireccionamiento de la cadena. También debe verificar que no haya bucles de redireccionamiento que puedan hacer DoS a su sistema, al imponer un conteo máximo de redireccionamientos.

También debe tener en cuenta que los atacantes podrían usar su servicio como proxy. Por ejemplo, enviar ataques de inyección de SQL a otros servidores de Internet que informen la dirección IP de su servicio como la fuente. Debe asegurarse de registrar todas las solicitudes contra la cuenta y la IP del usuario. También puede establecer un límite de velocidad basado en estos datos para evitar que un usuario / IP realice demasiadas solicitudes, en cuyo caso podría validar con un CAPTCHA.

    
respondido por el SilverlightFox 10.03.2014 - 17:43
fuente

Lea otras preguntas en las etiquetas