Jump to content
  • Sky
  • Blueberry
  • Slate
  • Blackcurrant
  • Watermelon
  • Strawberry
  • Orange
  • Banana
  • Apple
  • Emerald
  • Chocolate
  • Charcoal
Alan

[Fix Risus] Fuente de los BBCode

Recommended Posts

Hola, como verán recientemente hay un usuario que anda molestando con un error en la fuente de los BBcodes. El error consiste básicamente en que dicho BBcode carece de verificación, entonces se podía ingresar algunos carácteres HTML y poner una fuente gigante lo que no permitía navegar por los posts y al cliquear llevaba a una página, no representa un error grave en sí, por lo que no hay que alarmarse ya que sus datos personales y de hosting están seguros. Sin embargo puede ser muy molesto, por lo que es muy recomendado instalar este fix.

 

Instalación automática: Para solucionarlo suban la carpeta INC que subí AQUÍ en la raíz de su sitio y reemplacen los archivos y ya estará solucionado el error. 

Instalación manual: Si han modificado los archivos, pueden optar por instalarlo manualmente:

 

  1. Abran el archivo bbcode.inc.php ubicado en /inc/ext/bbcode.inc.php y busquen (está en la línea 10):
require_once 'JBBCode/validators/ImgValidator.php';

  Y abajo coloquen:

require_once 'JBBCode/validators/FontValidator.php';

Busquen:

 

        $imgValidator = new \JBBCode\validators\ImgValidator();

Y debajo coloquen:

        $fontValidator = new \JBBCode\validators\FontValidator();

Busquen:

            array('tag' => 'font', 'replace' => '<span style="font-family: {option}">{param}</span>', 'option' => true),

Y lo reemplazan por:

            array('tag' => 'font', 'replace' => '<span style="font-family: {option}">{param}</span>', 'option' => true, 'validOption' => $fontValidator),

2.  Crear un archivo con nombre FontValidator.php dentro de /inc/ext/JBBcode/validators/ con el siguiente contenido:

 

<?php

namespace JBBCode\validators;

require_once dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'InputValidator.php';

/**
 * Validador de fuentes para evitar kakeos
 *
 * @author Alan
 * @since Sep 2016
 */

class FontValidator implements \JBBCode\InputValidator {

    /**
     * Retorna true si $input es alfabético
     *
     * @param $input string a validar
     */
    public function validate($input) {
        return !!preg_match('/^[a-z0-9\s]+$/i', $input);
    }

}

Y ya debería funcionar, no digo que esto sea un fix oficial ya que lamentablemente ya no pertenezco al staff :( pero cuando Isidro lo vea podrá decidir que es lo que hace.

 

T9dXaMo.png

 

Saludos!

Edited by Rhuan
  • Like 7

Share this post


Link to post
Share on other sites

esta muy bien que se arreglen estos problemas pero no deberían atacarse entre ustedes mismos... estaban tan confiados que no existía ese problema que usted mismo escribió algo tipo "si bla bla bla entonces que hackee la demo" osea yo me quedé como ¿es en serio? no debe haber ese egocentrismo de creer que todo esta perfecto... yo me asuste cuando escribí un comentario en la demo con el codigo que dejaron y funciono!! entonces si algo tan simple se pasa por alto, que puedo pensar del núcleo?? que es mas complejo... tambien me di cuenta que muchos dejan opiniones muy buenas y se llevan negativos o advertencias solo por no estar de acuerdo con el otro.. solo por expresarse y eso tambien esta muy mal...

Share this post


Link to post
Share on other sites
hace 22 minutos, suggeidy dijo:

esta muy bien que se arreglen estos problemas pero no deberían atacarse entre ustedes mismos... estaban tan confiados que no existía ese problema que usted mismo escribió algo tipo "si bla bla bla entonces que hackee la demo" osea yo me quedé como ¿es en serio? no debe haber ese egocentrismo de creer que todo esta perfecto... yo me asuste cuando escribí un comentario en la demo con el codigo que dejaron y funciono!! entonces si algo tan simple se pasa por alto, que puedo pensar del núcleo?? que es mas complejo... tambien me di cuenta que muchos dejan opiniones muy buenas y se llevan negativos o advertencias solo por no estar de acuerdo con el otro.. solo por expresarse y eso tambien esta muy mal...

 

No es que seamos egocéntricos, pero es la verdad si tanto critican, que hackeen la demo y así sabremos que vulnerabilidad tiene, una web con muchos mods instalados nunca es de confiar, ademas no es que el script sea perfecto, nada lo es perfecto y el problema es que no sabemos de todas las posibles vulnerabilidades que puede llegar a tener el script y por eso se pide que se hackee la demo, para conocer que es lo que se tiene que arreglar, ¿te asustaste porque en la demo funciona el comentario?, que esperabas si hace menos de 50 minutos se publico el fix, ademas que eso no es hackear. 

 

Edited by ayuda031
  • Like 1

Share this post


Link to post
Share on other sites
hace 4 minutos, KillerJohn dijo:

Genio Total! muchas gracias ;)

De nada! Hice una actualización en FontValidator.php, si ya lo instalaste reemplaza el archivo por lo que está en el post

hace 21 minutos, suggeidy dijo:

esta muy bien que se arreglen estos problemas pero no deberían atacarse entre ustedes mismos... estaban tan confiados que no existía ese problema que usted mismo escribió algo tipo "si bla bla bla entonces que hackee la demo" osea yo me quedé como ¿es en serio? no debe haber ese egocentrismo de creer que todo esta perfecto... yo me asuste cuando escribí un comentario en la demo con el codigo que dejaron y funciono!! entonces si algo tan simple se pasa por alto, que puedo pensar del núcleo?? que es mas complejo... tambien me di cuenta que muchos dejan opiniones muy buenas y se llevan negativos o advertencias solo por no estar de acuerdo con el otro.. solo por expresarse y eso tambien esta muy mal...

Hace casi 4 años que no me conectaba, no estoy muy al tanto de las modificaciones que han hecho ni tengo contacto con Isidro tampoco

 

hace 24 minutos, MagicInventor dijo:

ñee me superaste, recién lo acabo de hacer pero con regex... 

 

PD: ctype_alpha no soporta espacios, fuentes con nombres con espacios no van a funcionar.

Ni sabía que había fuentes con espacios, ya lo actualicé gg

hace 4 minutos, ayuda031 dijo:

 

No es que seamos egocéntricos, pero es la verdad si tanto critican, que hackeen la demo y así sabremos que vulnerabilidad tiene, una web con muchos mods instalados nunca es de confiar, ademas no es que el script sea perfecto, nada lo es perfecto y el problema es que no sabemos de todas las posibles vulnerabilidades que puede llegar a tener el script y por eso se pide que se hackee la demo, para conocer que es lo que se tiene que arreglar, ¿te asustaste porque en la demo funciona el comentario?, que esperabas si hace menos de 50 minutos se publico el fix, ademas que eso no es hackear. 

 

Exacto! Además de que cuando yo me fui todavía ni habían implementado ese sistema de JBBCode, recién ahora que descargué el script nuevamente pude ver que le han metido muchas cosas nuevas 

Share this post


Link to post
Share on other sites
hace 19 minutos, ayuda031 dijo:

 

¿te asustaste porque en la demo funciona el comentario?, que esperabas si hace menos de 50 minutos se publico el fix, ademas que eso no es hackear. 

 

yo no he dicho que es hackeo... yo dije que era un bug en mi comentario donde estaba el codigo, vez?? justo a esto me refería con egocentrismo... se creen mucho por saber un poco mas...  yo me registre ayer para aprender!! y ya me dan ganas de irme a otra parte... 

Share this post


Link to post
Share on other sites
hace 2 horas, suggeidy dijo:

esta muy bien que se arreglen estos problemas pero no deberían atacarse entre ustedes mismos... estaban tan confiados que no existía ese problema que usted mismo escribió algo tipo "si bla bla bla entonces que hackee la demo" osea yo me quedé como ¿es en serio? no debe haber ese egocentrismo de creer que todo esta perfecto... yo me asuste cuando escribí un comentario en la demo con el codigo que dejaron y funciono!! entonces si algo tan simple se pasa por alto, que puedo pensar del núcleo?? que es mas complejo... tambien me di cuenta que muchos dejan opiniones muy buenas y se llevan negativos o advertencias solo por no estar de acuerdo con el otro.. solo por expresarse y eso tambien esta muy mal...

Aquí nadie se ataca entre nadie... Es magic el que ataca a todos 

 

yao_ming_meme_by_lecatinga-d4kpe13.jpg

Share this post


Link to post
Share on other sites
hace 1 hora, suggeidy dijo:

yo no he dicho que es hackeo... yo dije que era un bug en mi comentario donde estaba el codigo, vez?? justo a esto me refería con egocentrismo... se creen mucho por saber un poco mas...  yo me registre ayer para aprender!! y ya me dan ganas de irme a otra parte... 

No creemos mas? nunca dije que nos creemos mas, quieren exigirle algo a un script que es gratuito y que sale a flote con la ayuda de la comunidad, solo digo que si el script es vulnerable no lo sabemos hasta que se lo pruebe.

Si quieres irte vete, que le puedo decir a alguien que prefiere tachar de egocéntrico a los demás y no tratar de ver las cosas del lado del otro, yo entiendo que tienes miedo a que alguien venga y hackee tu web, pero ninguna web esta libre de eso, a risus se le hace las actualizaciones de seguridad como es debido pero Isidro no es perfecto y siempre se le puede escapar algo y para eso está la comunidad, para detectar este tipos de errores y solucionarlo, y ahí viene la mano de que si hackeas la demo recién sabremos que problema tiene el script o si realmente el problema es del script, no decimos "hackea la demo" solo porque seamos egocéntricos, sino que se ha dado el caso de gente que daña su web a propósito solo para darle mala fama al script, o webs que se vuelven vulnerables por el exceso de modificaciones que tienen.... 

  • Like 1

Share this post


Link to post
Share on other sites
hace 1 hora, MagicInventor dijo:

Una cosa más también agregale un A-Z al regex porque el editor bbcode las tiene por defecto con letras en mayúsculas.

Tiene una "i" después del delimitador de patrón, eso quiere decir que admite tanto mayúsculas como minúsculas.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Solo_Duvan
      Hola amigos, me percate que los comentarios de los post no se pueden editar, les dejo un pequeño fix por si les molesta este problema.
       
      Vamos a funciones.js ubicado en themes/default/js y buscamos:
       
      var text = textarea.bbcode();  
      Lo reemplazamos con esto:

       
      var text = (type == 'new') ? textarea.bbcode() : textarea.val();  
      Listo, ahora podremos editar comentarios, espero les funciones. Saludos ?
    • By Kmario19
      Hola a todos, soy Kmario19. Tal vez me recuerden de mods como la portada de los posts, o secciones como las de juegos y las comunidades. Esta vez vengo con un fix para aquellos sitios que tengan millones de visitas y la tabla w_visitas esté afectando la carga de un post ya que es la tabla que más registros genera.
       
      Junto a @Rengo estuvimos analizando por qué los posts cargaba tan lento, después de un rato noté que una consulta en particular era la culpable:
       
      db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE `w_visitas` SET `date` = \''.time().'\', ip = \''.$tsCore->getIP().'\' WHERE `for` = \''.(int)$post_id.'\' && `type` = \'2\' && `user` = \''.$tsUser->uid.'\' LIMIT 1'); Esta línea está en c.posts.php en la función getPost. (esta consulta actualiza la fecha de visita del usuario logueado al post)
       
      El problema es que después de que el sitio tenga suficiente tiempo online o muchísimas visitas, esta tabla w_visitas llega a tener millones de registros y cuando una tabla así no está indexada tiende a hacer una consulta "FULL SCAN" por lo que básicamente tiene que recorrer todos los registros para poder finalizar su tarea, y en el caso del sitio de pruebas tiene más de 2 millones de registros.
       
      Entonces, para todos aquellos que quieran evitar este pequeño problema de rendimiento a futuro cuando tengan muchas visitas o si ya se les presenta el caso, la solución es ir a su base de datos y ejecutar la siguiente consulta:
       
      ALTER TABLE `w_visitas` ADD INDEX (`for`, `type`, `user`);  
      Y listo, eso soluciona el problema.
       
      Para que se hagan una idea de los resultados, esta es una consulta antes de agregar el indice:
       

       
      Y esta es la misma consulta después de agregar el índice:
       

       
      Estamos hablando de una absurda reducción de 91150% de acuerdo al tiempo de ejecución de MySQL pero realmente pasamos a un tiempo de carga del sitio de unos 6 segundos aprox. a menos de 1 segundo.
       
      Bueno, es un índice que debería ir por defecto en el .sql con el que se instala el script para evitar ese inconveniente a futuro. Seguramente algunas otras secciones críticas del script con el pasar del tiempo y vayan creciendo necesitarán de estos índices para mejorar los tiempos de consulta de la base de datos.
       
      Bueno no siendo más, me despido. Hasta otra ocasión... espero no tan tardía xD
    • By Miguel92
      Problemas al comentar y/o enviar mensaje 
      después de haber agregado el wysibb
       
      Si actualizaste y te has topado con este problema, bueno te traigo la solución.
       
      [1] SOLUCIONADO: No puedo comentar
      Ir a default/js/funciones.js y buscan
          // NUEVO COMENTARIO     nuevo: function(mostrar_resp, comentarionum){         // EVITAR FLOOD         $('#btnsComment').attr({'disabled':'disabled'});         //         var textarea = $('#body_comm');         var text = textarea.val(); y en la parte que dice .val(); lo cambian por .bbcode();
              var text = textarea.bbcode();  
      [2] SOLUCIONADO: No puedo previsualizar el comentario
      Ir a default/js/funciones.js y buscan
      // VISTA PREVIA DEL COMENTARIO     preview: function(id, type){         var textarea = (type == 'new') ? $('#' + id) : $('#edit-comment-' + id);         var text = textarea.val(); lo mismo que el paso anterior
              var text = (type == 'new') ? textarea.bbcode() : textarea.val(); // 26/09/2019 16/05/2018
      Con la nueva actualización del script phpost_1.3.0.000 tiene este problema, en el momento que lo estaba haciendo me había funcionado de la manera que esta publicado..luego tuve el error de no poder editar el comentario y la solución fue revertir este paso y de esa manera edita y previsualiza
       
       
      SOLUCIONADO: No puedo previsualizar el mensaje
      Ir a default/js/funciones.js y buscan
          // VISTA PREVIA DEL MENSAJE     previewms: function(id, type){         var textarea = (type == 'new') ? $('#' + id) : $('#edit-comment-' + id);         var text = textarea.val(); lo mismo que el paso anterior
              var text = textarea.bbcode();  
      [3] SOLUCIONADO: No puedo enviar mensaje desde "Mensajes"
      Ir a default/js/acciones.js y buscan
          // RESPONDER     responder: function(mp_id){         this.vars['mp_id'] = $('#mp_id').val();         this.vars['mp_body'] = encodeURIComponent($('#respuesta').val()); // Fix: 14/12/2014 - 1.1.000.9 lo mismo que el paso anterior  .val(); lo cambian por .bbcode();
              this.vars['mp_body'] = encodeURIComponent($('#respuesta').bbcode()); // Fix: 14/12/2014 - 1.1.000.9  
      En el caso de encontrar mas lo ire colocando!
    • By Tronlar
      Hola a [email protected],os dejo como hacer funcionar el sistema de captcha en las V5,V6,lo acabo de probar y funciona bien.
       
       
      Ejecutar esta consulta:
      ALTER TABLE `w_configuracion` ADD `pkey` VARCHAR(55) NOT NULL AFTER `offline_message`, ADD `skey` VARCHAR(55) NOT NULL AFTER `pkey`;  
      En c.admin.php --> inc/class/c.admin.php
       
      Buscar:
      'newr' => empty($_POST['newr']) ? 0 : 1);
      Cambiar por:
      'newr' => empty($_POST['newr']) ? 0 : 1, 'pkey' => $tsCore->setSecure($_POST['pkey']), 'skey' => $tsCore->setSecure($_POST['skey']),  
       
      Buscar:
      '\', `offline_message` = \'' . $c['offline_message'] .  
      Añadir al lado:
      '\', `pkey` = \'' . $c['pkey'] . '\', `skey` = \'' . $c['skey'] .
      Tiene que quedar así:
      '\', `offline_message` = \'' . $c['offline_message'] . '\', `pkey` = \'' . $c['pkey'] . '\', `skey` = \'' . $c['skey'] .  
       

      En c.registro.php --> inc/class/c.registro.php
       
      Buscar:
      'user_captacha_challenge' => $_POST['recaptcha_challenge_field'], 'user_captacha_response' => $_POST['recaptcha_response_field'],  
      Cambiar por:
      'user_captcha' => $_POST['g-recaptcha-response'],  
      Buscar:
      'captacha' => 'El código es incorrecto'
      Cambiar por:
      'captcha' => 'Validación incorrecta',  
       
      Buscar:
      // CAPTACHA require(TS_EXTRA . 'recaptchalib.php'); $robot = recaptcha_check_answer(RC_PIK,$_SERVER["REMOTE_ADDR"],$tsData['user_captacha_challenge'],$tsData['user_captacha_response']); if(!$robot->is_valid) return 'recaptcha: El código es incorrecto.';

      Cambiar por:        
      /** reCAPTCHA **/ $recaptcha = 'https://www.google.com/recaptcha/api/siteverify?secret=' . $tsCore->settings['skey'] . '&response=' . $tsData['user_captcha'] . '&remoteip=' . $tsCore->getIP(); // Obtener respuesta $response = file_get_contents($recaptcha); // Extraer resultado $ext1 = explode('"success":', $response); $ext2 = explode(',', $ext1[1]); // Comprobar resultado $valid = trim($ext2[0]); // Devolver respuesta si es incorrecta if ($valid == 'false') { return 'recaptcha: No hemos podido validar tu humanidad'; }  
       
      registro.js --> default/js/registro.js
      registro.js --> V6/js/registro.js
       
      Buscar:
      /* reCAPTCHA */ case 'recaptcha_challenge_field': return true; break; case 'recaptcha_response_field': //Si ya paso por aca y no hubieron cambios, devuelvo el mismo status if(!force_check && this.datos[campo] === value && this.datos['recaptcha_challenge_field'] == $('#RegistroForm .pasoDos #recaptcha_challenge_field').val()) if(this.datos_status[campo]=='empty') return no_empty ? this.show_status(el, this.datos_status[campo], this.datos_text[campo]) : this.hide_status(el, this.datos_status[campo], this.datos_text[campo]); else return this.show_status(el, this.datos_status[campo], this.datos_text[campo]); //Almaceno el dato this.datos[campo] = value; this.datos['recaptcha_challenge_field'] = $('#RegistroForm .pasoDos #recaptcha_challenge_field').val(); //!empty if(empty(value)){ var status = 'empty'; var text = 'El campo es requerido'; if(no_empty) return this.show_status(el, status, text); else return this.hide_status(el, status, text); } return registro.show_status(el, 'ok', 'OK'); break; } },  

      Cambiar por:    
      /* reCAPTCHA */ case 'g-recaptcha-response': this.datos[campo] = value; //!empty if (!value) { return this.show_status($('#RegistroForm .g-recaptcha'), 'empty', 'Demuestra que eres humano'); } return registro.show_status($('#RegistroForm .g-recaptcha'), 'ok', 'OK'); break; } },  
       
      Buscar:
      case 'recaptcha': //reCAPTCHA registro.change_paso(2, true); registro.show_status($('#RegistroForm #recaptcha_response_field'), 'error', h.substring(strpos(h, ':')+2)); break;
         
      Cambiar por:
      case 'recaptcha': //reCAPTCHA registro.change_paso(2, true); registro.show_status($('#RegistroForm .g-recaptcha'), 'error', h.substring(strpos(h, ':') + 2)); break;

      t.registro.tpl --> default/templates/t.registro.tpl
      t.registro.tpl --> V6/templates/t.registro.tpl    
          
       Buscar:
      <div class="form-line"> <label for="recaptcha_response_field">Ingresa el código de la imagen</label> <div id="recaptcha_ajax"> <div id="recaptcha_image"></div> <input type="text" id="recaptcha_response_field" name="recaptcha_response_field" /> </div> <div class="help recaptcha" id="nubex"><span id="puy"></span><span><em></em></span></div> </div>  

      Cambiar por:
      <div class="form-line"> <label>Confirme humanidad:</label> <div class="g-recaptcha" data-sitekey="{$tsConfig.pkey}"></div> <div class="help"><span><em></em></span></div> </div>
         
      Buscar:
      <script type="text/javascript"> // $.getScript("{$tsConfig.js}/registro.js{literal}", function(){ //Seteo el pais seleccionado //registro.datos['pais']='MX'; //registro.datos_status['pais']='ok'; //registro.datos_text['pais']='OK'; // registro.change_paso(1); //Genero el autocomplete de la ciudad /*$('#RegistroForm .pasoDos #ciudad').autocomplete('/registro-geo.php', { minChars: 2, width: 298 }).result(function(event, data, formatted){ registro.datos['ciudad_id'] = (data) ? data[1] : ''; registro.datos['ciudad_text'] = (data) ? data[0].toLowerCase() : ''; if(data) $('#RegistroForm .pasoDos #terminos').focus(); });*/ mydialog.procesando_fin(); }); //Load recaptcha $.getScript("http://www.google.com/recaptcha/api/js/recaptcha_ajax.js", function(){ Recaptcha.create('6LcXvL0SAAAAAPJkBrro96lnXGZ56TBRExEmVM3L', 'recaptcha_ajax', { theme:'custom', lang:'es', tabindex:'13', custom_theme_widget: 'recaptcha_ajax', callback: function(){ $('#recaptcha_response_field').blur(function(){ registro.blur(this); }).focus(function(){ registro.focus(this); }).attr('title', 'Ingrese el código de la imagen'); } }); }); </script>

      Cambiar por:       
      <script type="text/javascript"> // $.getScript("{$tsConfig.js}/registro.js{literal}", function(){ //Seteo el pais seleccionado //registro.datos['pais']='MX'; //registro.datos_status['pais']='ok'; //registro.datos_text['pais']='OK'; // registro.change_paso(1); //Genero el autocomplete de la ciudad /*$('#RegistroForm .pasoDos #ciudad').autocomplete('/registro-geo.php', { minChars: 2, width: 298 }).result(function(event, data, formatted){ registro.datos['ciudad_id'] = (data) ? data[1] : ''; registro.datos['ciudad_text'] = (data) ? data[0].toLowerCase() : ''; if(data) $('#RegistroForm .pasoDos #terminos').focus(); });*/ mydialog.procesando_fin(); }); </script> <script src="https://www.google.com/recaptcha/api.js" async defer></script> <script type="text/javascript"> $.getScript("{$tsConfig.js}/registro.js{literal}", function(){ registro.change_paso(1); mydialog.procesando_fin(); }); </script>

       m.admin_configs.tpl     --> default/templates/admin_mods/m.admin_configs.tpl            
       m.admin_configs.tpl     --> V6/templates/admin_mods/m.admin_configs.tpl    
              
      Buscar:   
      <dl> <dt><label for="ai_xat">Xat ID:</label><br /><span>Por defecto puedes agregar un chat de <a href="http://xat.com">Xat</a> para tu web, solo crea tu grupo he ingresa el nombre.</span></dt> <dd><input type="text" id="ai_xat" name="xat" maxlength="20" value="{$tsConfig.xat_id}" /> </dd> </dl> <hr />  

      Añadir debajo:
      <dl> <dt> <label for="pkey">reCaptcha pública</label> <br /><span>Clave pública de <a href="https://www.google.com/recaptcha/admin">reCatpcha</a>.</span> </dt> <dd> <input type="text" id="pkey" name="pkey" value="{$tsConfig.pkey}" /> </dd> </dl> <dl> <dt> <label for="skey">reCaptcha secreta</label> <br /><span>Clave privada de <a href="https://www.google.com/recaptcha/admin">reCatpcha</a>.</span> </dt> <dd> <input type="text" id="skey" name="skey" value="{$tsConfig.skey}" /> </dd> </dl> <hr />  
       
       
      Y con eso ya la tienen funcionando,saludos.


       
       
       
       
       

              
           
       
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Patrocinador



  • ×