Hola gente!
Les dejo un FIX para todos aquellos que usen la v2.3 que es MUY MUY importante que lo apliquen ya mismo.
Este es un anti-flood para los comentarios....Lo que sucede, es que anda dando vueltas un código, para lanzar cientos y cientos de comentarios en pocos segundos (en webs de spirate).Esto era posible, por que spirate no tenía anti-flood en los comentarios y por que además, el archivo add_comment era el más desprotegido.
Dicho código javascript (maligno, por llamarlo de alguna manera), lo que hace es "simular" que uno fuera y agregase 1 comentario, pero además, con un código para enviar cientos a modo de "bombardeo".
Sin más, aquí les dejo la solución.
Instrucciones
* Deben reemplazar su add_comment.php (se encuentra en el directorio raiz) por el que les dejo aquí...(Adjunto)
* Deben reemplazar su Gallery (se encuentra en /Sources/Gallery.php) por el que les dejo aquí...(Adjunto)
Listo, es todo... y...
-----------------------------------------------------------------------------------------------------------------------------------------
Si quisieran hacerlo manualmente, sería:
Archivo add_comment.php (en la raíz del sitio)
Buscar por
require('Settings.php');
$conexion = mysql_connect($db_server, $db_user, $db_passwd) OR die("Error al procesar lo solicitado");
require("SSI.php");
mysql_select_db($db_name, $conexion) OR die("Error al procesar lo solicitado");
if($context['user']['id']=='')
Reemplazar por:
require('Settings.php');
$conexion = mysql_connect($db_server, $db_user, $db_passwd) OR die("Error al procesar lo solicitado");
require("SSI.php");
mysql_select_db($db_name, $conexion) OR die("Error al procesar lo solicitado");
$ladata = time();
$query2 = mysql_query("SELECT fecha FROM {$db_prefix}comentarios WHERE id_user = {$ID_MEMBER} ORDER BY fecha DESC");
$obj2 = mysql_fetch_object($query2);
$commet_tiempo = $obj2->fecha;
$tiempomax = $ladata - $commet_tiempo;
if($context['user']['id']=='')
Buscar por:
if($context['user']['id']==''){
echo'<b>Solo usuarios registrados pueden comentar</b>';
}
Agregar debajo
else
if($tiempomax < 60) {echo '<span style="color: red;" class="size12"><b>No puedes realizar tantos comentarios en tan poco tiempo</b></span>';}
---
Gallery.php (Sources/Gallery.php)
Buscar la función AddComment2
y reemplazarla por esta:
function AddComment2()
{
global $context, $scripturl, $db_prefix, $ID_MEMBER, $txt, $modSettings;
isAllowedTo('smfgallery_comment');
$comment = htmlspecialchars($_REQUEST['cuerpo_comment']);
$id = (int) $_REQUEST['id'];
if($id == '')
fatal_error($txt['gallery_error_no_pic_selected']);
$dbresult = db_query("SELECT p.allowcomments FROM {$db_prefix}gallery_pic as p WHERE ID_PICTURE = $id LIMIT 1", __FILE__, __LINE__);
$row = mysql_fetch_assoc($dbresult);
mysql_free_result($dbresult);
if($comment == '')
fatal_error($txt['gallery_error_no_comment'],false);
$commentdate = time();
if($_SESSION['last_add_gallery'] > time() - 60)
fatal_error('No puedes realizar tantas acciones en tan poco tiempo.');
db_query("INSERT INTO {$db_prefix}gallery_comment
(ID_MEMBER, comment, date, ID_PICTURE)
VALUES ($ID_MEMBER,'$comment', $commentdate,$id)", __FILE__, __LINE__);
$last = db_insert_id();
$inserted = !empty($last) ? true : false;
if(!$inserted)
fatal_error('Hubo un error al agregar el comentario, intentalo mas tarde');
else
$_SESSION['last_add_gallery'] = time();
if (isset($modSettings['shopVersion']))
db_query("UPDATE {$db_prefix}gallery_pic
SET commenttotal = commenttotal + 1 WHERE ID_PICTURE = $id LIMIT 1", __FILE__, __LINE__);
redirectexit('' . $scripturl . '/?action=imagenes;sa=ver;id=' . $id);
}
Esto lo que hace, es que cada usuario, pueda hacer un comentario cada 1 minuto (es lo normal). Listo, ya con esto, estarían protegidos.
En ambos casos el numero "60" indica la cantidad de segundos...Recomiendo dejarlo en "60"...pero en configurable a gusto de ustedes.
Créditos:
Juans! y Fivezone y J0n4thntub3 Por haber hecho el FIX
y a todo el staff, por ayudar