¿Desea desinfectar me gusta / no está en la aplicación?

2

Tengo una función en mi aplicación donde los usuarios pueden hacer clic en una imagen de "aprobación" y se registra una imagen similar en la base de datos; todo lo que se registra es la ID del usuario y la ID de la publicación que le gustó.

Sé que no se puede confiar en las entradas del usuario: estoy limpiando las entradas del usuario, validando las entradas del usuario (del lado del servidor), escapando las salidas y escapando las consultas de la base de datos.

En este caso, el usuario está haciendo clic en la imagen, pero no hay forma. Sin embargo, los datos se pasan a la base de datos, utilizando JS. Tenga en cuenta que no hay ninguna entrada de usuario entre las etiquetas de secuencia de comandos (la secuencia de comandos similar se encuentra en una página que no se sirve).

Mi plan es validar (en el lado del servidor) que solo se envían números a la base de datos, pero ¿cómo puedo sanear esta entrada de "me gusta" / aprobación para proteger contra XSS ? / p>

Nota: Actualmente estoy leyendo la Hoja de referencia de prevención de XSS de OWASP y las Pautas de codificación segura de Mozilla, que es como empecé a preguntarme sobre esto.

    
pregunta chowwy 18.05.2012 - 02:21
fuente

2 respuestas

5

El saneamiento es trivial, ya que esta variable solo puede tener dos valores. Podrías convertirlo en un intiger, y tener un valor de 1 para un voto positivo y un valor de -1 para un voto negativo, ningún otro valor es válido. Por supuesto, toda la validación basada en seguridad siempre debe hacerse desde el lado del servidor.

Pero esa es la menor de tus preocupaciones de seguridad . La verdadera preocupación es obligar a otros a votar en nombre de un atacante. Esto puede suceder de varias maneras. Un atacante podría hacer un juego de clickjacking en el que cada vez que el usuario hace clic para disparar un cohete a algún tipo de invasor espacial, es de hecho, haga clic en un iframe invisible que está disparando un nuevo voto a su sistema.

Un ataque aún más virulento sería usar Falsificación de solicitudes entre sitios (CSRF) para activar estas solicitudes en masa cuando uno de sus usuarios visita un sitio web de atacantes. La CSRF Prevention Cheat Sheet es un buen recurso.

XSS derrota casi todas las medidas Anti-CSRF, así que asegúrate de que todo el sitio web sea inmune a esto. ataque. El Sammy Worm usó XSS para vencer el token Anti-CSRF de MySpace.

Además, no se olvide de la creación automática de cuentas, asegúrese de que sus usuarios tengan que resolver un fuerte captcha como Recaptcha antes de poder crear una cuenta. La verificación del correo electrónico es trivial de automatizar y no creo que sea una medida de seguridad real. Si tienen demasiados inicios de sesión fallidos, también se les debe indicar con un Capthca.

    
respondido por el rook 18.05.2012 - 03:21
fuente
0

Quizás estoy malinterpretando tu situación, pero como lo imagino, el saneamiento debería ser bastante fácil.

Cuando un usuario sube o baja una publicación, solo debería haber 2 valores permitidos como entradas: el valor hacia arriba o el valor hacia abajo. Para simplificar, solo usaría 1 como arriba y 0 como abajo. Luego, para su saneamiento, solo necesita verificar que el valor sea 1 o 0 (o, si está más relajado, que sea numérico).

En JS, simplemente haz algo como:

if(value !== 1 && value !== 0) {
    return false;
}

Sin embargo, usar JS como tu única línea de defensa contra XSS es una muy mala idea. Si alguien quisiera enviarle datos incorrectos, simplemente podría utilizar cURL para enviarle datos sin pasar por la validación de javascript. Recomiendo encarecidamente hacer la validación del lado del servidor, y solo uso la validación JS como un método para reducir el número de llamadas AJAX inútiles.

    
respondido por el jwegner 18.05.2012 - 02:31
fuente

Lea otras preguntas en las etiquetas