Recordad que para pedir soporte alguno, debéis facilitar los datos de soporte oportunos por favor, mirad aquí y leer las Normas generales del foro, esto nos servirá de ayuda para dar el mejor soporte..

Gracias.

La Administración de phpBB España.

base64_decode() has been disabled for security reasons

Foros donde podréis dejar vuestras dudas sobre phpBB 3.0.x
Cerrado

0
No hay votos
 
Votos totales: 0

pduthey
Observador/a
Mensajes: 4
Registrado: 20 Jul 2007, 22:20

base64_decode() has been disabled for security reasons

#1

Mensaje por pduthey »

Hola Gente!!

no recuerdo si este es mi primer posteo, por las dudas me presento, soy Pablo de Mar del Plata, Argentina y administro varios sitios con distintos gestores de foros, en este caso:

URL: http://www.mdq4x4.com.ar/foro/
Plantilla(s) usuada(s): subsilver2
MODs instalados: ninguno
Versión de phpBB: 3.0.7-PL1
Servidor: http://www.sectorhosting.com/ (pago)

me encontré con un problema cuando el administrador del servicio de Hosting decidió por seguridad deshabilitar la función de PHP base64_decode(), con esto dejo de andar el PHPBB y el foro no se veía bien ya que al dar errores no cargaba los css, deshabilité los errores y lo veía mejor pero no se reemplazaban las etiquetas PHPBB por su correspondiente función.

Primera solución, buscar en este foro, pero no encontré nada :cry:

Segunda solución, hacer entender al admin del hosting que necesitaba esa función, no hubo caso, todavía estoy esperando... tuvo ataques de troyanos eval(base64_decode... y hasta que no lo solucionen queda deshabilitado.

Tercera solución, reescribir esa función a mano y reemplazarla donde se utilizara, googlee pero no encontré nada hecho en PHP, supongo que es porque ya es una función del lenguaje y nadie se le ocurriría reescribirla, encontré una C y la "adapté" a PHP, tuve que cambiarla bastante, el C estaba muy bien utilizado por lo tanto no era fácil de "traducir", me quedó así:

Código: Seleccionar todo

<?php
//* Funcion Decode Base64 en PHP
function decode64($encStr) {
  $base64s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  $decOut = "" ;
  $i = 0 ;
  for ($i=0; $i < strlen($encStr); $i+=4) {
    $bits = str_pad(decbin(strpos($base64s, $encStr[$i])),6,"0",STR_PAD_LEFT).str_pad(decbin(strpos($base64s, $encStr[$i+1])),6,"0",STR_PAD_LEFT).str_pad(decbin(strpos($base64s, $encStr[$i+2])),6,"0",STR_PAD_LEFT).str_pad(decbin(strpos($base64s, $encStr[$i+3])),6,"0",STR_PAD_LEFT);
    $decOut .= chr(bindec(substr($bits,0,8))).chr(bindec(substr($bits,8,8))).chr(bindec(substr($bits,16,8)));
  }
  if (ord($encStr[$i-2]) == 61) {
    return substr($decOut, 0, strlen($decOut)-2);
  }
  else
    if (ord($encStr[$i-1]) == 61) {
      return substr($decOut, 0, strlen($decOut)-1);
    }
    else {
      return $decOut;
    }
}
?>
Luego para incluirla quise agregarla en algun código de los de funciones pero se complicaba en cual y en algunos casos la función base64_decode() se usaba en los mismos archivos de funciones por lo cual hacer un include me daba error en algunos otros lados al encontrar una doble definición de la función por lo tanto copié la función en cada .php que la necesitaba y por las dudas con un nombre distinto por si ese archivo era incluido en otro, los que toqué fueron hasta ahora

/viewtopic.php
/includes/functions_content.php
/includes/functions_posting.php
/includes/functions_privmsgs.php

con esos hasta ahora me alcanzó no se si deberé agregarla a algun lugar mas si lo encuentro lo haré.

Espero que les sirva para salir del paso. :cerveza:
Pablo Duthey - Mar del Plata - Argentina
Datos de Soporte:
Dirección: http://www.clubmusso.com.ar
Plantilla(s) usuada(s): Icy Phoenix
MODs instalados: ninguno
Version de Icy Phoenix: 1.3.0.53a
Parches Instalados:
Actualización Icy Phoenix (ninguna)
Servidor: http://www.sectorhosting.com (pago)

Avatar de Usuario
leviatan21
Ex Staff
Mensajes: 8279
Registrado: 26 Mar 2008, 20:06
Género:
Edad: 55

Re: base64_decode() has been disabled for security reasons

#2

Mensaje por leviatan21 »

Buen aporte, habrá que buscar la manera de hacerlo un poco mas nativo sin tener que editar tantos archivos...
pduthey escribió:con esos hasta ahora me alcanzó no se si deberé agregarla a algun lugar mas si lo encuentro lo haré.
Aqui te dejo lo que encontré, nombre del archivo y cual es la linea que utiliza ese código, espero te sirva de referencia

Código: Seleccionar todo

raíz/cron.php
echo base64_decode('R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==');

raíz/search.php	
$bbcode_bitfield = $bbcode_bitfield | base64_decode($row['bbcode_bitfield']);

raíz/viewtopic.php
$bbcode_bitfield = $bbcode_bitfield | base64_decode($row['bbcode_bitfield']);

raíz/viewtopic.php
$bbcode_bitfield = $bbcode_bitfield | base64_decode($row['user_sig_bbcode_bitfield']);

raíz/includes/functions.php
list($username, $password) = explode(':', base64_decode(substr($username, 6)), 2);

raíz/includes/functions_content.php
$this->data = base64_decode($bitfield);

raíz/includes/functions_jabber.php
$decoded = base64_decode($xml['challenge'][0]['#']);

raíz/includes/functions_messenger.php
$md5_challenge = base64_decode($this->responses[0]);

raíz/includes/functions_messenger.php
$md5_challenge = base64_decode($this->responses[0]);

raíz/includes/functions_posting.php
$bbcode_bitfield = $bbcode_bitfield | base64_decode($row['bbcode_bitfield']);

raíz/includes/functions_privmsgs.php	
$bbcode_bitfield = $bbcode_bitfield | base64_decode($row['bbcode_bitfield']);

raíz/includes/message_parser.php
$bbcode_bitfield = base64_encode(base64_decode($bbcode_bitfield) | base64_decode($this->bbcode_bitfield));

raíz/includes/message_parser.php		
$bbcode_bitfield = base64_encode(base64_decode($bbcode_bitfield) | base64_decode($this->bbcode_bitfield));		

raíz/includes/message_parser.php
$this->bbcode_bitfield = base64_encode(base64_decode($bbcode_bitfield) | base64_decode($this->bbcode_bitfield));

raíz/includes/message_parser.php
$this->bbcode_bitfield = base64_encode(base64_decode($bbcode_bitfield) | base64_decode($this->bbcode_bitfield));

raíz/includes/captcha/captcha_non_gd.php
$hold_chars[$char] = str_split(base64_decode($this->filtered_pngs[$char]['data']), $raw_width + 1);

raíz/includes/cp/mcp_topic.php	
$bbcode_bitfield = $bbcode_bitfield | base64_decode($row['bbcode_bitfield']);
Y si tienes el Support ToolKit (STK)

Código: Seleccionar todo

raíz/stk/includes/admin/reparse_bbcode.php		
$this->message_parser->bbcode_bitfield = base64_encode(base64_decode($this->poll_parser->bbcode_bitfield) | base64_decode($this->message_parser->bbcode_bitfield));
Normas de phpBB España | Normas de Soporte
No doy soporte por privado : tenga en cuenta que su problema, también puede ser el problema de otro usuario.
Cualquier mensaje privado no solicitado será ignorado :twisted:

"Education is what remains after one has forgotten everything he learned in school" - Albert Einstein

pduthey
Observador/a
Mensajes: 4
Registrado: 20 Jul 2007, 22:20

Re: base64_decode() has been disabled for security reasons

#3

Mensaje por pduthey »

Gracias por la lista de archivos a tocar, de vago no me había puesto a hacer la búsqueda :oops:

Ya lo terminé solucionando poniendo la función en un archivo aparte (./includes/functions_mias.php) y haciendo el include en todos los archivos de la lista, la función la llamé mi_base64_decode() y antes de crearla verifico si ya existe para no tener conflicto con lo cual funciona sin problemas, ademas del include hay que hacer el reemplazo de "base64_decode" por "mi_base64_decode" en cada archivo y ya queda listo :wink:

Así que Problema Solucionado!!

Gracias
Saludos
Pablo

functions_mias.php

Código: Seleccionar todo

<?php
/**
*
* @copyright (c) 2011 Pablo Duthey
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
	exit;
}

/**
* mi_base64_decode()
*/

//* Funcion Decode Base64 en PHP
if (!function_exists('mi_base64_decode')) {
  function mi_base64_decode($encStr) {
    $base64s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    $decOut = "" ;
    $i = 0 ;
    for ($i=0; $i < strlen($encStr); $i+=4) {
      $bits = str_pad(decbin(strpos($base64s, $encStr[$i])),6,"0",STR_PAD_LEFT).str_pad(decbin(strpos($base64s, $encStr[$i+1])),6,"0",STR_PAD_LEFT).str_pad(decbin(strpos($base64s, $encStr[$i+2])),6,"0",STR_PAD_LEFT).str_pad(decbin(strpos($base64s, $encStr[$i+3])),6,"0",STR_PAD_LEFT);
      $decOut .= chr(bindec(substr($bits,0,8))).chr(bindec(substr($bits,8,8))).chr(bindec(substr($bits,16,8)));
    }
    if (ord($encStr[$i-2]) == 61) {
      return substr($decOut, 0, strlen($decOut)-2);
    }
    else
      if (ord($encStr[$i-1]) == 61) {
        return substr($decOut, 0, strlen($decOut)-1);
      }
      else {
        return $decOut;
      }
  }
}
?>
Pablo Duthey - Mar del Plata - Argentina
Datos de Soporte:
Dirección: http://www.clubmusso.com.ar
Plantilla(s) usuada(s): Icy Phoenix
MODs instalados: ninguno
Version de Icy Phoenix: 1.3.0.53a
Parches Instalados:
Actualización Icy Phoenix (ninguna)
Servidor: http://www.sectorhosting.com (pago)

Avatar de Usuario
leviatan21
Ex Staff
Mensajes: 8279
Registrado: 26 Mar 2008, 20:06
Género:
Edad: 55

Re: base64_decode() has been disabled for security reasons

#4

Mensaje por leviatan21 »

pduthey escribió:Ya lo terminé solucionando poniendo la función en un archivo aparte (./includes/functions_mias.php) y haciendo el include en todos los archivos de la lista
Y si en lugar de hacer el include en cada archivo lo haces en el raíz/common.php será aún menos invasivo ;)
Normas de phpBB España | Normas de Soporte
No doy soporte por privado : tenga en cuenta que su problema, también puede ser el problema de otro usuario.
Cualquier mensaje privado no solicitado será ignorado :twisted:

"Education is what remains after one has forgotten everything he learned in school" - Albert Einstein

pduthey
Observador/a
Mensajes: 4
Registrado: 20 Jul 2007, 22:20

Re: base64_decode() has been disabled for security reasons

#5

Mensaje por pduthey »

leviatan21 escribió:
pduthey escribió:Ya lo terminé solucionando poniendo la función en un archivo aparte (./includes/functions_mias.php) y haciendo el include en todos los archivos de la lista
Y si en lugar de hacer el include en cada archivo lo haces en el raíz/common.php será aún menos invasivo ;)
Listo, ya lo cambié, Gracias :ok:
Pablo Duthey - Mar del Plata - Argentina
Datos de Soporte:
Dirección: http://www.clubmusso.com.ar
Plantilla(s) usuada(s): Icy Phoenix
MODs instalados: ninguno
Version de Icy Phoenix: 1.3.0.53a
Parches Instalados:
Actualización Icy Phoenix (ninguna)
Servidor: http://www.sectorhosting.com (pago)

Cerrado

Volver a “Foros de Soporte 3.0.x”