Cómo escribir un programa de votación automática
Esta publicación es propiedad de Ocean y los derechos de autor pertenecen a Ocean.
Cómo escribir un programa de votación se puede dividir aproximadamente en estos pasos:
1: Votación manual, analiza cada código de votación que aparece en el medio de cada página para conocer el patrón de votación.
2: Captura la información publicada cuando se envía la página.
3: Programación para simular este proceso manual.
Permítanme tomar como ejemplo el programa de votación automática que acabo de escribir. No daré enlaces URL aquí (confidencial), ni daré datos reales ni capturas de pantalla.
La primera es la votación manual, que es una votación de opciones múltiples. Después de hacer clic en el botón de votación, aparecerá una página web que le pedirá que confirme o se dé por vencido. Se devolverá un mensaje de votación exitosa. Cuando haga clic en el botón de votación aquí, se le indicará que ya votó y no puede volver a votar. Cierre todas las ventanas del navegador, abra nuevas ventanas, vote y siga votando correctamente. Con base en el siguiente comportamiento, se pueden sacar las siguientes conclusiones:
1: La votación requiere dos interacciones con el servidor. La primera interacción envía los resultados de la votación al servidor y la segunda interacción los envía al servidor. para proceder con los resultados.
2: Las sesiones entre estas dos páginas están asociadas, es decir, no se puede votar dos veces en la misma sesión. Cuando cierre su navegador y vuelva a abrir Rani Liu, aún podrá votar exitosamente, ya que esto equivale a abrir una nueva sesión.
Después de entender esto, comencé a capturar la información del encabezado HTTP de las dos interacciones.
La información de la primera interacción es la siguiente (haga clic en el botón de votación):
Los votos que no se puedan repetir podrán quedar registrados en la sesión o en una cookie.
Entonces, para simular este proceso, utilicé la clase WebClient, que es bastante impresionante. La propiedad Encabezados le permite establecer encabezados. La función UploadData puede cargar datos. Y ambas conexiones al mismo WebClient están en la misma Sesión. De esta forma, luego de completar dos interacciones (es decir, una encuesta), se puede actualizar el WebClient, lo que equivale a reabrir una Sesión. ?
El resultado después de la ejecución es básicamente el mismo que la información interceptada durante la votación manual.
Luego puedes ejecutar un bucle infinito
int?i?=?0;
while(true)?
{ ?
¿Intentar?
{?
post();?
i?++;?
Console.WriteLine("Esta es la primera publicación por la que votaste"? +?i?+?" vote");?
}?
catch(Exception?e)?
{?
Console.WriteLine("Se ha producido un error:"? +?e.Message);?
}?
Console.WriteLine("---------------------------------");?
}?
Estoy creando un programa de línea de comandos para detectar errores y evitar detener el programa. Cuando detenga el programa, simplemente salga de la ventana X. Otro beneficio de usar un programa de línea de comandos es que no es necesario realizar múltiples subprocesos, puede realizar múltiples subprocesos (en realidad, múltiples procesos) simplemente ejecutando algunas instancias más del archivo ejecutable.
Entonces, cuando hacemos encuestas (incluidos otros formularios), cómo evitar que las personas voten automáticamente o completen el formulario automáticamente, pero el método de límite de sesión obviamente no es un método efectivo. Las restricciones de IP tampoco son realistas, porque muchos usuarios no tienen direcciones IP, que son asignaciones NAT realizadas por operadores de red. Bloquear una dirección IP equivale a bloquear un lote de máquinas. Por eso generalmente no se usa.
Entonces, ¿cómo puede ser más eficaz? Se pueden utilizar dos métodos:
1: Código de verificación. El código de verificación hace que sea imposible completar el formulario con el programa directamente, porque los códigos de verificación son todos imágenes y el código de verificación de texto no tiene sentido. Image CAPTCHA determina que si se quiere lograr la automatización, se deben reconocer los números y letras del CAPTCHA. Al menos la persona promedio no puede hacer esto, es un problema de reconocimiento de patrones. Por supuesto, tengo amigos que se especializan en reconocimiento de patrones y pueden distinguir escrituras garabateadas en entornos complejos, por lo que nadie puede hacer nada. Pero al igual que Microsoft, algunas imágenes de códigos de verificación son muy complicadas. Además de los muchos subrayados en el fondo, los números y las imágenes también son garabatos, y los ángulos también son diferentes, algunos verticales y otros diagonales, por lo que es muy difícil identificarlos. Con el código de verificación, básicamente puedes garantizar que no serás votado automáticamente.
2. Tiempo límite de IP o número de votos: Limita el número de votos de IP dentro de un período de tiempo o el intervalo entre dos votos. Por ejemplo, una misma dirección IP no puede recibir más de 100 votos en un día. O debería haber al menos 5 minutos entre votaciones, etc. Por lo tanto, incluso si utiliza un programa de votación automatizado, su velocidad se reducirá considerablemente. No funciona como un proceso de votación rápida.
Si estos dos métodos se combinan al mismo tiempo, básicamente será difícil continuar con la votación automática.