it-swarm-es.com

Sitio defensor contra ser abusado por phishing

Digamos que tiene un sitio web y está utilizando un parámetro _ url returnUrl para redirigir al usuario de vuelta a la página donde fue después de iniciar sesión o editar algunos registros en el área de usuario. ¿Hay alguna forma estándar de cómo verificar si el returnUrl se encuentra en el mismo servidor que la aplicación web?

Hasta ahora, me di cuenta de que hay dos formas en que Atacker puede redirigir a los usuarios en otra parte y seguir las medidas para prevenir estos ataques:

  1. El atacante suministra toda la URL en el parámetro (http://evil.com/): aquí es posible verificar si el parámetro contiene http(s):// o ftp://
  2. El navegador agrega automáticamente el protocolo si falta, por lo que el atacante puede proporcionar algo como //evil.com o //numeric_ip_address y redirigirá al usuario fuera del servidor también, aquí aún puede verificar si la URL comienza con el //

¿Hay alguna otra forma de codificar la dirección URL? ¿Puedo estar seguro de que el parámetro no se pueda usar mal si vuelvo a verificar solo dos casos anteriores?

10
bretik

Una forma en que podría acercarse a esto sería cifrar el parámetro, ya que se pasa al usuario con una clave almacenada en el servidor (también para una mejor protección Considerar agregar A [~ ~] HMAC [~ # ~] =). Luego, cuando el usuario envía el formulario, descifrará el parámetro (y verifique el HMAC si se usa) y utilícelo para redirigir al usuario.

He visto los casos en los que la URL es simplemente ofuscada (codificación BASE64, etc.). Eso podría disuadir a los atacantes casuales, pero no confiaría en ello, ya que es probable que un atacante determinado resuelva el esquema utilizado.

6
Rory McCune

Puede agregar el prefijo de su sitio web a la URL para que vayan a:

example.com/login.php?returnurl=profiles/home.php

Y en la página lo haría, volvería a http://example.com/ y agregar la URL de retorno. (http://example.com/returnurlere)

4
James T

Hay Muchas formas para atacar a un usuario/navegador u URLS/REDIRTAS OBSEJEROS. Crazy Way es que hará que tu cerebro se lastime y te deje preguntando por qué funciona eso. (Consulte: http://code.google.com/p/browsersec/ ) En general, al validar la entrada, no intente solucionar los datos, si no es lo que esperaba o no en El formato que necesitas, tirarlo. Recuerde de forma predeterminada denegada, este es solo otro ejemplo de eso.

Como cualquier cosa, cómo implementa esto, depende de sus requisitos. También debe estar al tanto de las fallas de implementación al manejar las redirecciones que también pueden abrir vulnerabilidades adicionales, como la división de respuesta HTTP, la inyección de encabezado, etc.

Por lo general, recomiendo una combinación de Blanqueza de destino y Solicitud de firma (utilizando HMAC , similar a la sugerencia de Rory). Cuando se firma la solicitud de solicitud de preformación, me gusta hacer que el destino sea visible en la URI. Por ejemplo:

http://yoursite.com/login.php?returnurl=welcome.php&hash=yourlonghashhere

Eso le permite al usuario tener un poco de viabilidad en el lugar donde debe ir la solicitud, y también permite que más usuarios más inteligentes noten un phishing u otro ataque por su cuenta.

Cuando se va a ocurrir una redirecta:

  1. Verifique el 'retorno' contra el hash
  2. Verifique que el 'returnurl' esté en blanco
  3. Luego prepara la redirección.

Si falla algún paso del proceso de validación, redirige a una página predeterminada/de inicio o rechace la solicitud.

Aquí hay algunos más recursos:

2
Gerry
  1. Eliminar toda la información innecesaria de la URL (por ejemplo, http://, El nombre del sitio, etc.). Si tiene varias opciones (por ejemplo, cinco sitios), use su índice.
  2. Calcule un hash de lo que queda usando una sal secreta del lado del servidor y prepáralo (o una parte de ella, más corta, mayor será, mayor será el peligro de un ataque de colisión exitoso) a returnUrl
  3. Al recibir el returnUrl, marque el hash es válido. Si no, rechazar.
  4. Agregue de vuelta toda la información que falta y redirige.

Además, algunas redirecciones pueden seguir un patrón común en el que solo necesita enchufar algunos parámetros. En este caso, puede que ni siquiera necesite el hash.

Por ejemplo: en lugar de

returnUrl=http://www.myfifthsite.com/common/webpage/profile?user=lserni

puedes hervir el

returnUrl=5-5-lserni

lo que significa Patrón de redirección del quinto sitio, quinto permitido, este patrón tiene un solo parámetro y su valor es el nombre de usuario:

sitios: ... 5 => ' http://www.myfifthsite.com ' ...

patrones para el sitio # 5 (Por supuesto, la autenticación del curso es NO anulado!): 5 => '/ Common/WebPage/Perfil? Usuario = $ 1' 6 = > '/ Common/WebPage/Mensajes? usuario = $ 1'

Un atacante podría enumerar todos los números de sitio y patrón permitidos, pero solo obtendrían las URL válidas de los sitios que permiten.

Así que, en cierto sentido, de esta manera, no necesita comprobar nada en absoluto. Las URL siempre serán válidas automáticamente (incluso si algunas pueden requerir cookies de autenticación).

0
LSerni