Tutorial: Como prevenir el spam en foros y blogs

Desde
12 Jul 2011
Mensajes
2.437
Como propietarios de sitios, debemos lidiar con un aspecto desagradable el spam. Cada dia cada sitio pequeño o grande es desbordado con decenas, cientos y hasta miles de peticiones o mensajes basura. El spam es tan fuerte que podria ser considerado muy parecido a un ataque DoS. Esto debido a las herramientas creadas y distribuidas por ahi que intentan registrarse a un ritmo de hasta 45 mil veces consecutivamente,y si tardara 1 segundo cada intento eso equivaldria a 12 y media horas de trabajo para el sitio y el servidor donde este alojado, que no genera absolutmente nada solo hace el daño eso sin contar los miles de comentarios enviados por cada minuto.

Pero que podemos hacer si todos queremos tener sitios en donde las personas interactuen como foros y blogs, inevitablemente estamos expuestos a la basura que nos pueda llegar.

¿Que podemos hacer?
- Cerrar los sitios no es la opcion aunque algunos sobre todo la competencia lo hacen precisamente para que colguemos los guantes.
-Plugins para combatir el spam, funcionan a medias y llegan hasta 1/4.
-Servicios como Cloudflare son muy agresivos y podrian afectar tu sitio de otra manera.
-Aun moderando las 24 horas y 7 dias a la semana, no garantiza nada, y estar borrando y borrando no soluciona nada por que lo que queremos es prevenirlo.

¿Pero que hay del acceso seleccionado por area geografica?

Primero creo que deberiamos saber de donde viene el spam.

Todo el spam proviene de seis fuentes.
1.China
2.Vietnam
3.Ukrania
4.India
5.Pakistan


Un tercio de todo el spam viene de china.
Por eso a menos que hables chino y tu sitio sea para chinos, no hay necesidad de atender a esa area geografica, puedes bloquear con seguridad esa parte del mundo para que simplemente no tengan acceso para registrarse o dejar comentarios, aunque puedan ver el sitio en linea no tengan acceso ni a correos de administracion.

Imagina que con solo bloquear china podrias reducir el spam de tu sitio un 33% , haciendo lo mismo con Russia un 9%, Ucrania 9% asi es que con solo 3 paises tendras 50% menos spam.

¿Que pasa con el spam de EE.UU?
Si que pasa con los sitios confirmados que envian correo masivo no deseado desde este pais? La mayoria de ellos son proxies con un vps de bajo costo y la mayoria son chinos tabien. Lo bueno es que los vps utilizados principalmente son de la costa oeste (Dallas, Chicago) aunque tambien de la costa este.

Estos servicios de VPS deberian tener la verguenza de eliminar este tipo de servicos utilizados con ese fin, pero no creo que hagan nada por que les genera dinero si se preguntan cuales son pues aqui dejo la lista.

  • EGI Hosting
  • Krypt Technologies
  • HostNOC
  • OVH
  • Peg Tech Inc
  • Psychz Network
  • Secure Servers (super seguros!)
  • VolumeDrive
  • Wholesale Internet Inc


Por eso debemos buscar con cuidado los servicios de hosting, para no perderte en una sucia y maloliente empresa que pueda tener sus ip en la lista negra, asi que cualquier precio bajo que ofrezcan no vale la pena.

16% del spam podria ser removido con solo eliminar las ip de esos servidores, asi tendriamos ya un 66% del spam prevenido. No mas registros bots, no mas v.i.a.g.r.a a precios bajos.

La parte que parece tutorial comienza aqui.

Para bloquear el spam via PHP.

Necesitas editar la pagina de registro.
-Para VBulletin debes editar el register.php
-Para MyBB edita el member.php
-Para SMF (Simple Machines Forum) este metodo no funcionara, una vez mas lo vulnerable que es el sistema y por que no deberiamos usarlo para hacer copias de taringa.
-Mi favorito para wordpress editar wp-login.php ó wp-register.php segun sea la version aunque no deberias estar usando una version vieja de todos modos.

En la parte superior del archivo PHP pero antes de <&php insertar el codigo siguiente.

codigo php eliminar el spam.png

Insertar CODE, HTML o PHP:
// array of banned IP addresses
$banme = array(
"^1.2.*.*"
);
if(in_array($_SERVER['REMOTE_ADDR'],$banme)) {
// this is for exact matches of IP address in array
header("Location: http://www.yoursite.com/banned.htm");
exit();
} else {
// this is for wild card matches
foreach($banme as $ips) {
if(eregi($ips,$_SERVER['REMOTE_ADDR'])) {
header("Location: http://www.yoursite.com/banned.htm");
exit();
}
}
}


Se obtiene la lista de ip en un minuto. Lo siguiente es crear una pagina de baneo. Que seria la pagina adonde se redirige al visitante no deseado, asi si es una persona real deberia llegar a registrarse manualmente, esto es similar a tener una pagina de error 404

tutorial forobeta prevenir el spam.png

Lista de IP bloqueadas.
Se debe manejar una lista de bloqueo regular. Se debe actualizar segun sea necesario, unas cuantas veces al mes bastaria. Se pueden descargar listas enteras como la de digitalfaq Stop Forum Spam and Blog Spam! - A Free IP Address Block List [DOWNLOAD] - digitalFAQ.com Support Forum completamente gratis, esto lo hace el foro por que realmente odian a los spammers aunque una donacion no estaria de mas.

En la lista hay 3 grupos principales.

/16 en el rango de China
/16 y /24 en el rango de proxies desde EE.UU.
/16 en el rango de otras ciudades como Vietnam, Russia y Ucrania. En este caso India no esta bloqueada en la lista pero se puede incluir buscando mas.

Del codigo anterior reemplazas esta parte con la lista de direcciones ip descargada

Area para reemplazar por lista de ip baneadas.png

Insertar CODE, HTML o PHP:
"^1.2.*.*"
);

Cuando eres nuevo en el tema de las direcciones IP , segundo número (el octeto) es /16 y el tercero es un /24, no Clase-C como algunos gurus del marketing erroneamente les dicen.
 

Emanuel Andrei

Dseda
Programador
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
1 Nov 2013
Mensajes
1.219
-Para SMF (Simple Machines Forum) este metodo no funcionara, una vez mas lo vulnerable que es el sistema y por que no deberiamos usarlo para hacer copias de taringa.

Pues yo aqui no estoy de acuerdo contigo. La seguridad se puede implementar en todo si sabes como se hace. Que si, que no lo puedes implementar mediante php de una manera tan facil como tu lo enseñas, pero algunas maneras si que son faciles, y las puedes hacer.

1. Mediante .htaccess: Añadiendo el rango de ip de los paises en cuestion
Ej:
Insertar CODE, HTML o PHP:
<Limit GET POST> 
order allow,deny
deny from 1.0.1.0/24
deny from 1.0.2.0/23
.........(añadendo el deny from -el ip indeseado-
allow from all
</Limit>

- Lo malo de este metodo es que usan proxy, cambiadores de ip, etc aparte de que con esto puedes bloquear a usuarios deseados (si alguien tiene la mala suerte de tener una ip de china). Pero con este metodo, ya te ahorras algun que otro indeseado.

2. Mediante un mod especialmente echo para esto, que automaticamente dedecta la ip del usuario dejando-lo pasar o no dependiendo de donde se encuentra geograficamente:
Mod: Anti-spam by CleanTalk

- Yo lo uso, y va de maravilla, aparte de ser muy completo en su funcion.

3. Vamos de vuelta al php. Yo creo que haciendo como un landing page (o mas bien solamente modificando de forma corecta el index.php del SMF que contiene la verificacion de si hay o no el index.template.php, lograremos enviar el trafico bueno a nuestro foro dependiendo de si es del pais que nosotros queremos o no)

Ej: Usamos select case:

Insertar CODE, HTML o PHP:
<?php
 
// cambia pagina.php por el archivo correcto de acuerdo al pais
 
if (isset($pais) && ($pais <> '')) {
$dgo_pais = substr($pais,0,5);
} else {
$dgo_pais = substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,5);
}
switch ($dgo_pais) {
 
case "es-mx":
//si el pais es mexico
include("pagina.php");
break;
 
case "es-ar":
//si el pais es argentina
include("pagina.php");
break;
 
case "es-cl":
//si el pais es chile
include("pagina.php");
break;
 
case "es-ve":
//si el pais es venezuela
include("pagina.php");
break;
 
case "pt-br":
//si el pais es brasil
include("pagina.php");
break;
 
case "es-co":
 
//si el pais es colombia
include("pagina.php");
break;
 
case "es-ec":
 
//si el pais es ecuador
include("pagina.php");
break;
 
case "es-uy":
 
//si el pais es uruguay
include("pagina.php");
break;
 
default:
//si es algun otro pais
include("pagina.php");
break;
}
?>

- De forma "elegante", le enseñas al usuario de otros paises que no estan o que esta en esa pagina, una version diferente de tu pagina.php (por ejemplo, si alguien entra desde china, le puedes poner una pagina que muestre al tio del gagnam style bailando).

Y un largo etcetera. Pero no por eso, SMF tiene un sistema vulnerable. :encouragement:
 

AndresTeroso

Gamma
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
2 Sep 2011
Mensajes
401
Y esto no es mejor hacerlo mediante .htaccess ??

por ejemplo con:
Insertar CODE, HTML o PHP:
https://www.countryipblocks.net/country_selection.php
seleccionando la opcion .htaccess Deny

solo tendrian que crear su propia ACL para bloquear por países.
 

Carlos Arreola

Admin
Sigma
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
Verificado por Binance
¡Excelente comerciante!
Suscripción a IA
Desde
6 Abr 2009
Mensajes
12.389
Muy buena redacción y gran aporte, aunque creo que por ser algo extenso hubiera sido más fácil por plataforma. Se agradece y nuevamente, ¡qué buena redacción! :p
 

Emanuel Andrei

Dseda
Programador
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
1 Nov 2013
Mensajes
1.219
Y esto no es mejor hacerlo mediante .htaccess ??

por ejemplo con:
Insertar CODE, HTML o PHP:
https://www.countryipblocks.net/country_selection.php
seleccionando la opcion .htaccess Deny

solo tendrian que crear su propia ACL para bloquear por países.

Tambien. :encouragement:
 
Desde
12 Jul 2011
Mensajes
2.437
Si tambien es muy buen aporte el tuyo aunque yo especifico "bloquear spam via php". Por eso dice no funciona este metodo no es que no se pueda pero buen aporte el que dices y muy buen metodo.
Pues yo aqui no estoy de acuerdo contigo. La seguridad se puede implementar en todo si sabes como se hace. Que si, que no lo puedes implementar mediante php de una manera tan facil como tu lo enseñas, pero algunas maneras si que son faciles, y las puedes hacer.

1. Mediante .htaccess: Añadiendo el rango de ip de los paises en cuestion
Ej:
Insertar CODE, HTML o PHP:
<Limit GET POST> 
order allow,deny
deny from 1.0.1.0/24
deny from 1.0.2.0/23
.........(añadendo el deny from -el ip indeseado-
allow from all
</Limit>

- Lo malo de este metodo es que usan proxy, cambiadores de ip, etc aparte de que con esto puedes bloquear a usuarios deseados (si alguien tiene la mala suerte de tener una ip de china). Pero con este metodo, ya te ahorras algun que otro indeseado.

2. Mediante un mod especialmente echo para esto, que automaticamente dedecta la ip del usuario dejando-lo pasar o no dependiendo de donde se encuentra geograficamente:
Mod: Anti-spam by CleanTalk

- Yo lo uso, y va de maravilla, aparte de ser muy completo en su funcion.

3. Vamos de vuelta al php. Yo creo que haciendo como un landing page (o mas bien solamente modificando de forma corecta el index.php del SMF que contiene la verificacion de si hay o no el index.template.php, lograremos enviar el trafico bueno a nuestro foro dependiendo de si es del pais que nosotros queremos o no)

Ej: Usamos select case:

Insertar CODE, HTML o PHP:
<?php
 
// cambia pagina.php por el archivo correcto de acuerdo al pais
 
if (isset($pais) && ($pais <> '')) {
$dgo_pais = substr($pais,0,5);
} else {
$dgo_pais = substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,5);
}
switch ($dgo_pais) {
 
case "es-mx":
//si el pais es mexico
include("pagina.php");
break;
 
case "es-ar":
//si el pais es argentina
include("pagina.php");
break;
 
case "es-cl":
//si el pais es chile
include("pagina.php");
break;
 
case "es-ve":
//si el pais es venezuela
include("pagina.php");
break;
 
case "pt-br":
//si el pais es brasil
include("pagina.php");
break;
 
case "es-co":
 
//si el pais es colombia
include("pagina.php");
break;
 
case "es-ec":
 
//si el pais es ecuador
include("pagina.php");
break;
 
case "es-uy":
 
//si el pais es uruguay
include("pagina.php");
break;
 
default:
//si es algun otro pais
include("pagina.php");
break;
}
?>

- De forma "elegante", le enseñas al usuario de otros paises que no estan o que esta en esa pagina, una version diferente de tu pagina.php (por ejemplo, si alguien entra desde china, le puedes poner una pagina que muestre al tio del gagnam style bailando).

Y un largo etcetera. Pero no por eso, SMF tiene un sistema vulnerable. :encouragement:
 

WWWW

Pi
Verificación en dos pasos activada
Desde
4 Mar 2013
Mensajes
5.258
Y esto no es mejor hacerlo mediante .htaccess ??

por ejemplo con:
Insertar CODE, HTML o PHP:
https://www.countryipblocks.net/country_selection.php
seleccionando la opcion .htaccess Deny

solo tendrian que crear su propia ACL para bloquear por países.

Gracias por compartir esa pagina amigo, pero tengo una duda, es posible hacer redireciones por país con .htaccess

Ya que yo estaba implementando una función simple en PHP, para detectar un país y enviarlo a su pagina correspondiente.

Como en el caso de google, al entrar te redirige al google de tu país.

Si se pudiera hacer esto en esa pagina con .htaccess, me podrías darme un mano y decirme como hacerlo.

Saludos y gracias por compartir.
 

Emanuel Andrei

Dseda
Programador
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
1 Nov 2013
Mensajes
1.219
Gracias por compartir esa pagina amigo, pero tengo una duda, es posible hacer redireciones por país con .htaccess

Ya que yo estaba implementando una función simple en PHP, para detectar un país y enviarlo a su pagina correspondiente.

Como en el caso de google, al entrar te redirige al google de tu país.

Si se pudiera hacer esto en esa pagina con .htaccess, me podrías darme un mano y decirme como hacerlo.

Saludos y gracias por compartir.

Claro que se puede. Una forma de hacerlo es asi:

Insertar CODE, HTML o PHP:
# ON REDIRECCIÓN POR IDIOMA
RewriteEngine on
RewriteCond %{HTTP:Accept-Language} (en) [NC]
RewriteRule .* http://tu-pagina-web .com/ [R,L]
# OFF REDIRECCIÓN POR IDIOMA

Donde http://tu-pagina-web .com/ es la pagina web hacia donde quieres que los usuarios de habla inglesa ( (en) ) entren. Solamente cambias el idioma y la web hacia donde quieres que tus usuarios acaben. :encouragement:
 
Arriba