¿Cómo puedo controlar las entradas de mi sitio web cuando son ingresadas por los usuarios?

2

Tengo un sitio web de preguntas y respuestas como SO. Tengo algunas limitaciones en algunas de las instalaciones. Por ejemplo, un usuario no puede votar si tiene menos de 20 reputación. O un usuario no puede cerrar una pregunta hasta que gane al menos 200 de reputación.

Ok, bueno, también hay algunas cosas que no tienen ninguna limitación, como escribir una respuesta para las preguntas. En este caso, un usuario malo puede escribir varias respuestas irrelevantes para múltiples preguntas y hace que mi base de datos sea enorme con información inútil.

Entonces, creo que necesito verificar algo antes de insertar una nueva respuesta, ¿Tengo razón? O de todos modos, ¿cómo puedo gestionar las entradas de mi sitio web? Como mencioné, en mi algoritmo actual, un usuario malo (como un spammer o pirata informático) simplemente puede ingresar una gran cantidad de datos inútiles en mi base de datos, y luego tal vez lo entiendo después de 1 día ( lo cual es demasiado tarde) que en este caso, toma algunas veces bloquearlo y eliminar todos sus datos.

En conclusión, me gusta saber, (por ejemplo) , ¿cómo un sitio web como SO se encarga de eso? ¿Necesito una consulta separada antes de insertar una nueva respuesta para verificar? ¿O que?

Nota: uso PHP (para códigos del lado del servidor) y MySQL (para códigos de base de datos) .

    
pregunta Martin AJ 27.08.2016 - 10:30
fuente

1 respuesta

1

Use la limitación de velocidad y solo permita X preguntas publicadas dentro de Y. Eso debería ralentizar a cualquier atacante y permitir que los humanos lidien con el spam (a través de votos negativos o banderas por ejemplo).

Cada vez que el usuario intenta publicar una pregunta, consulte su base de datos para obtener la última pregunta y verifique que la hora actual sea mayor que la hora de publicación de la pregunta + el retraso mínimo requerido entre dos publicaciones (en algunos sitios de Stack Exchange, creo que es 30 minutos).

Dependiendo de sus requisitos de rendimiento, puede des-normalizar un poco su base de datos y mantener el tiempo de la última pregunta directamente en el modelo del usuario, lo que significa que tendrá que actualizar su modelo cada vez que publiquen, pero le ahorrará una consulta de sus preguntas. ya que toda la información que necesitará estará en el modelo de usuario que haya consultado de todos modos (es probable que su marco lo haga por usted como un efecto secundario de comprobar si están conectados).

También puedes usar Redis o Memcached para almacenar en caché los modelos para mejorar aún más el rendimiento.

Finalmente, si solo te preocupa el spam automatizado pero no el spam manual, puedes presentar un captcha en lugar de evitar por completo que publiquen si intentan publicar con demasiada frecuencia.

    
respondido por el André Borie 27.08.2016 - 10:48
fuente

Lea otras preguntas en las etiquetas