¿Cómo evitar que los usuarios descarguen información de nuestro motor de búsqueda?

2

Hemos desarrollado un motor de búsqueda (búsqueda simple, no es necesario iniciar sesión) donde los usuarios pueden buscar detalles en la base de datos ( Apache Lucene ) ingresando su nombre (et al.), luego haciendo clic en el botón de búsqueda. La búsqueda invoca una solicitud HTTP GET asíncrona (una llamada AJAX en el mismo dominio) al servidor, que a su vez llama al motor de búsqueda. La respuesta es un objeto JSON.

He deshabilitado la política "Permitir acceso de origen cruzado" en el servidor. Parece que un atacante está golpeando continuamente el servidor de búsqueda mediante programación para descargar los datos. Lo sabemos porque la cantidad de visitas en el servidor de búsqueda es mucho mayor que la que se muestra en Google Analytics para la página de índice.

Otros desarrolladores han sugerido lo siguiente:

  1. Crea una sesión para la búsqueda.
  2. Coloque captcha en la página de índice y verifíquelo en el servidor.
  3. Sugieren que alguien aún puede realizar solicitudes GET programáticamente con parámetros y, por lo tanto, realizar una búsqueda, explicada por la enorme diferencia entre las visitas de página y las visitas a la página de índice.

Esto me confunde:

  1. ¿Se requiere realmente captcha para una aplicación que solo obtiene información, además de empeorar la facilidad de uso?
  2. Si he desactivado "acceso de origen cruzado" , ¿cómo puede alguien invocar llamadas al servidor mediante programación?

¿Hay mejores maneras de abordar esto (especialmente el captcha)?

    
pregunta krammer 15.04.2014 - 09:02
fuente

4 respuestas

3

Si el usuario invoca más de x cantidad de consultas por x cantidad de tiempo que parece imposible a través de un humano, entonces querrás generar un captcha para evitar bots.

Si el usuario invoca una cantidad tonta de solicitudes, simplemente prohíbe su IP por x cantidad de tiempo, ya que está claro que están utilizando algún tipo de botting.

Podrías generar una clave cada vez que el usuario realice búsquedas (esto evitará los elementos básicos, pero los robots complejos lo pueden evitar, ya que leerán la clave y los introducirán en los parámetros). Si les falta la clave, entonces muestra un error.

Entonces, supongamos que tienes Default.aspx y Search.aspx establecería el conjunto de claves en los datos del formulario como campo oculto. Por lo tanto, el valor predeterminado lo dirigirá a Search.aspx con una clave. Si va directamente a Search.aspx no tendrá la clave, por lo que no podrá buscar. Una vez que presionas el botón "Buscar", se lo pasará al servidor y simplemente validarás esa clave. Así que tienen un campo oculto como:

<input id="hifKey" type="hidden" runat="server" value="{getfromserver}" />

Esta clave solo se validaría para una búsqueda, después de validar y utilizar generar una nueva clave.

Esto evitaría los robots básicos, pero tenga en cuenta que todavía se puede evitar, ya que todo lo que necesita hacer es crear una aplicación .NET y usar HttpWebRequest y leer los datos de HttpWebResponse en Default.aspx para obtener una clave y luego buscar Search.aspx y sigue leyendo la siguiente clave de <input id="hifKey" type="hidden" runat="server" value="{getfromserver}" />

    
respondido por el Paul 15.04.2014 - 10:20
fuente
2

Como mencionó Paul, el uso de una clave evitará que los robots básicos rastreen su sitio web, pero los scripts más avanzados lo omitirán fácilmente. También tenga en cuenta que los bots modernos son capaces de ejecutar Javascript como lo haría un usuario real, y eso incluye el código JS de Google Analytics.

Un equilibrio razonable en términos de seguridad frente a la experiencia del usuario, sería configurar cuotas y límites para las búsquedas, como lo hace Google, y presentar un CAPTCHA solo si se excede este límite.

Tenga en cuenta que algunos sistemas CAPTCHA pueden resolverse automáticamente mediante scripts utilizando Reconocimiento óptico de caracteres , por lo que desearía para tener en cuenta esto al elegir una implementación.

    
respondido por el ack__ 15.04.2014 - 12:06
fuente
0

La desactivación de Permitir el acceso de origen cruzado solo evita las solicitudes HTTP entre sitios realizadas por JavaScript desde otro sitio web en el que un usuario arbitrario está navegando.
Los bots 'reales', que no están restringidos dentro de un entorno de JavaScript, por ejemplo, no se ven afectados por esta opción.

Ahora tiene que diferenciar entre las solicitudes iniciadas por los usuarios y aquellas solicitudes que solo son falsificadas por bots. Hay varias opciones para hacerlo:

  • mecanismos de inicio de sesión de usuario
    Exija a sus usuarios tener cuentas dedicadas en su sistema. Los problemas ocurren si las cuentas de usuario son robadas o secuestradas.

  • teclas / token como Paul ha mencionado fuente
    Esto es muy fácil de eludir ya que los bots solo necesitan reproducir lo que los usuarios normales estarían haciendo.

  • cuotas de uso limitado
    limita el acceso a las solicitudes x dentro de un intervalo de tiempo establecido para una dirección IP específica. Desafortunadamente, los bots distribuidos con diferentes direcciones IP también pueden superar el límite. Puede combinar esta idea con el enfoque del sistema del usuario para resolver el problema con bots distribuidos.

respondido por el ComFreek 15.04.2014 - 14:44
fuente
0
  

Lo sabemos porque la cantidad de visitas en el servidor de búsqueda es mucho mayor que la que muestra Google Analytics para la página de índice.

Su premisa es defectuosa (puede ser correcta, pero todavía es defectuosa). GA solo le muestra quién ha cooperado con GA. Si el javascript de un usuario está deshabilitado (no parece aplicarse en su caso), GA está bloqueado, etc., la solicitud no se mostrará en su análisis.

Es necesario que examine sus registros en busca de una actividad similar a un bot: secuencias alfanuméricas, palabras clave que es poco probable que los humanos escriban, etc. y luego bloqueen ese rango de IP. Sin embargo, tenga en cuenta que cualquier grupo que use un proceso de proxy o NAT puede parecerse fácilmente a un bot si lo único que examina es la frecuencia. Las grandes empresas y los ISP más pequeños (como los proveedores de VPN) entrarán en esta categoría.

También puedes ser malo: en lugar de bloquear el bot, crea un tarpit (respuestas muy lentas) o una bomba de resultados (resultados comprimidos pequeños que se expanden a 50Pb).

    
respondido por el paul 15.04.2014 - 15:41
fuente

Lea otras preguntas en las etiquetas