2010-06-06 19 views
7

Utilizamos el control Captcha en un formulario de registro que hacemos la validación completa del cliente para todos los campos en JavaScript (JQuery) junto a la validación del servidor.
Probé de muchas maneras, pero todos escribirán el valor de Captcha en JavaScript que se puede acceder por cualquier persona :(
que busco si hay alguna manera de que me permiten validar valor Captcha en el lado del cliente usando jQuery en forma segura o no se puede hacer?¿Puedo leer datos de Captcha desde JavaScript de forma segura?

Respuesta

8

no se puede hacer.

, JavaScript es del lado del cliente, como usted sabe, y cualquier código del lado del cliente tiene que ser tratado como potencialmente comprometido ya que no tiene control sobre él.

En el mejor de los casos, podría recurrir a enviar un hash salado del valor junto con la sal, pero incluso eso en sí mismo podría usarse para probar valores de suposición antes de enviarlo.

Todo lo demás depende de las llamadas al servidor.


Según la petición de comentario, aquí es la idea general:

En primer lugar, en el servidor, calcular una cadena aleatoria para ser utilizado como la sal. Esto debería ser más o menos único en cada solicitud. El propósito de esta cadena es evitar rainbow table attacks.

Ahora, guardando esta cadena por separado, pero también crea otra cadena que es la concatenación de cadena aleatoria y la respuesta de Captcha. De esta nueva cadena combinada generas el hash (por ejemplo, SHA-1) de ella.

using System.Web.Security; 
... 
string hashVal = FormsAuthentication.HashPasswordForStoringInConfigFile(combined, "SHA1"); 

Tanto la cadena aleatoria y el valor hash deben ser colocados en la página de la Javascript para poder leer.

En el lado del cliente, cuando un usuario responde al Captcha, toma la cadena aleatoria y concatenarla con la respuesta (¿entiendes la idea aquí?). Tomando esta cadena, puede usar algo como el SHA-1 JQuery plugin para mezclarlo y compararlo con el hash pre-calculado que envió.

hashVal = $.sha1(combinedString)

Si coincide, es (casi) sin duda la respuesta correcta. Si no es así, entonces es 100% la respuesta incorrecta.

+0

Dan podría darme un ejemplo de 'solución de hash salada'? –

+0

En realidad, puede usar hash para no exponer el valor de captcha, pero aún así habilitar la validación del lado del cliente.Esto es, por supuesto, solo para la interfaz de usuario receptiva, y también debe verificarse en el servidor. – Dykam

+0

Al revelar el valor hash, le permite al atacante hacer varias suposiciones sin enviarlo al servidor. Además, si no puede obtener una estimación correcta, puede actualizar la página. Esto puede permitir que el atacante tenga una tasa de ataque mucho mejor con una tasa de detección más baja. –

1

puede usar ajax para publicar el valor actual en el servidor, que responderá como verdadero o falso. eso te impediría hacer una publicación real y también regalar el valor de catpcha en html.

+0

Lamentablemente, no usaremos ajax para realizar la validación del servidor de forma oculta, por lo que buscaremos alguna otra solución en JQuery. –

+0

Creo que tendré que estar de acuerdo con Dan. sin exponer la respuesta en su script o html, no hay una forma razonable de hacerlo. –

+0

No hay solución solo en JQuery. Solo el acceso al servidor te dará tranquilidad. – Amadan

0

Mi solución)) Cada vez que la página muestra captcha para el usuario, puede generar dinámicamente funciones de JavaScript ofuscadas (creo que es la mejor manera 5 o 10). Por ejemplo, una función (o 3))) puede establecer cookies con hash pregenerado (el servidor lo devuelve) (del valor real del captcha), otras funciones deben realizar un algoritmo del lado del servidor para verificar el valor que ha escrito el usuario. Puedo decir que funciona al 100%, porque es muy difícil de analizar de forma dinámica javascript + configuramos cookies de usuario en el lado del cliente (es muy difícil para Bots averiguar dónde y cómo establecer y verificar las cookies), mediante el uso de JavaScript .

+0

lo siento Saff, pero podría darme más explicaciones sobre su solución –

+0

Tiene hash simple del lado del servidor para capcha: md5 (captcha_srv_side) Tenemos que hacer coincidir este hash con hash en el lado del cliente. La forma más simple es dividir en 2 partes nuestro hash y escribirlo en la cookie del usuario por el lado del servidor ({"v1": "81b ..", "v2": "873f ..."}). Ahora tenemos 2 vars en las cookies de usuario. Podemos escribir código muy complicado usando muchas funciones de javascript, luego ofuscar este código. Cuando el usuario enteres captcha, el script ejecutará la función de evento js, ​​que concat 2 vars (v1, v2), generará md5 de la cadena del usuario, lo escribirá a las cookies y luego combinarlas. Es solo un pequeño ejemplo. Hay muchas variaciones – Saff

Cuestiones relacionadas