Hackeado el repositorio del código fuente de PHP: fuerte alarma para el lenguaje usado por casi el 80% de todos los sitios web

Hackeado el repositorio del código fuente de PHP: fuerte alarma para el lenguaje usado por casi el 80% de todos los sitios web

Este domingo 28 de marzo, hackers lograron acceder al repositorio Git interno del lenguaje de programación PHP y lograron añadir una puerta trasera al código fuente del mismo. Estamos hablando del lenguaje del lado del servidor más usado en toda la web y que se calcula está en uso en el 79.1% de todos los sitios web.

Como explican en las listas de correo de PHP, el ataque insertó dos cambios maliciosos en el repositorio php-src, y aunque aún se desconoce la causa y hay una investigación en marcha, todo apunta a que el servidor oficial git.php.net fue comprometido.

Aunque el ataque fue detectado rápido, es una enorme advertencia

El mecanismo de puerta trasera fue detectado por primera vez por Michael Voříšek, un ingeniero de software de República Checa. Si este código malicioso hubiera llegado a producción, podría permitir a los hackers ejecutar sus propios comandos PHP maliciosos en los servidores de las víctimas.

Algunos expertos creen que es posible que los atacantes querían ser descubiertos, o que se trataba de un cazador de bugs por los “mensajes” que dejó en el código. Lo que pasa es que para poder desencadenar la ejecución del código malicioso, el atacante tenía que enviar una petición HTTP a un servidor vulnerable con un user agent que comenzara con la cadena “zerodium”.

Zerodium es una plataforma famosa de ciberseguridad especializada en la adquisición y venta de exploits zero day. Zerodium ha declarado ya que no tiene nada que ver con esto, por lo que se piensa que quien sea que hackeó el código no buscaba ser nada sutil, pero no se saben sus intenciones.

Además de esto, los atacantes añadieron un mensaje en uno de los parámetros de la función que ejecuta: “REMOVETHIS: sold to zerodium, mid 2017“. Claramente se busca implicar o hacer referencia a la empresa en esto, pero nadie sabe si se vendió algo a Zerodium en 2017 ni mucho menos qué fue.

En los chats de PHP en Stack Overflow hay muchas conjeturas. Algunos creen que podría haber sido un “pobre intento” de hacking de sombrero blanco, mientras que otros incluso apuntan a un “skript-kiddie completamente inepto”.

Mientras la investigación continua y se está realizando una revisión más minuciosa del código fuente de PHP, se ha decidido que el mantenimiento de una infraestructura Git propia es un riesgo de seguridad innecesario y por lo tanto el servidor git.php.net se va a descontinuar.

A partir de ahora los repositorios en GitHub que antes eran solo mirrors, pasarán a ser los principales, por lo que los cambios deberán enviarse directamente a GitHub en lugar de a git.php.net.

El código malicioso que se añadió al código fuente se hizo a través de las cuentas de dos de los miembros del equipo core de PHP, Rasmus Lerdorf and Nikita Popov, pero ya ambos expresaron no estar involucrados. Además, el equipo usa autenticación de doble factor para sus cuentas, por eso creen que se trató de un fallo crucial en el servidor Git principal en lugar de la violación de alguna cuenta individual.

Aunque el incidente fue resuelto rápidamente, en la práctica hubiese afectado a una pequeña porción de los sistemas que usan servidores PHP, puesto que suele ser usual que la mayoría se tarden mucho tiempo en actualizar a la última versión.

Esto es otro problema que viene plagando a la web hace tiempo, el cómo un enorme porcentaje de las webs en Internet usan una versión de PHP que no tiene soporte, y aunque ha mejorado en los últimos años, todavía casi el 40% de todas las webs que usan PHP usan una versión antigua y sin soporte.

Fuente: Genbeta.com

Hackeado el repositorio del código fuente de PHP: fuerte alarma para el lenguaje usado por casi el 80% de todos los sitios web

Ver Imagen ocultando la url con PHP

El día de hoy necesitaba cargar una imagen pero que no se vea su ubicación real, leyendo y leyendo info obviamente de PHP me encontré con la funcion chunk_split() el cual se relaciona con base64_encode, el cual nos permite codificar en base64 la imagen y así mostrarla como si hicieras un simple <img src=”imagen.jpg”>

El código para esta función es:


// Seleccionamos la imagen que queremos codificar, también puedes poner la dirección donde se encuentra la 
imagen $imagen = file_get_contents("path + mi_imagen.jpg");
//Codificamos la imagen en base64 
$imagen_base64 = chunk_split(base64_encode($imagen));
// Para mostrar la imagen codificada sería lo siguiente 
echo '< img src="data:image/jpg;base64,'.$imagen_base64.'" />';

Se vería así:

[view_image64 type=jpg]2016/01/lluvia-1.jpg[/view_image64]

voilà!

Con eso tenemos la imagen, en codificación base64 sin necesidad de mostrar la url real de dicha imagen.

Saludos! 😀

Función Obtener IP en YII Framework Components

Función Obtener IP en YII Framework Components

Hola, hace rato no posteaba nada, he estado con hartas cosas he ahí el motivo, ahora les mostraré una función que utilizo en mis sistemas creados en YII para obtener la IP de quien se logea o realiza alguna acción en el sistemilla.

Es bastante sencilla y solo hay que alojarla en un nuevo archivo que se debe crear en la carpeta components obviamente que esta clase debe ser extención de controladores globales.

En la carpeta Components creado el siguiente archivo llamado Funcion.php (en realidad el nombre que deseen ponerle al archivo), el cual tendría el siguiente contenido.

<?php
class Funcion extends CController
{
  public static function obtenerIP()
  {
     if(!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
     {
        $client_ip = ( !empty($_SERVER['REMOTE_ADDR']) ) ? $_SERVER['REMOTE_ADDR'] : ( ( !empty($_ENV['REMOTE_ADDR']) ) ? $_ENV['REMOTE_ADDR'] : "unknown" );
        $entries = preg_split('/[, ]/', $_SERVER['HTTP_X_FORWARDED_FOR']);
   
        reset($entries);
        while (list(, $entry) = each($entries)) {
           $entry = trim($entry);
           if ( preg_match("/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/", $entry, $ip_list) ) {
              $private_ip = array(
                    '/^0\./', 
                    '/^127\.0\.0\.1/', 
                    '/^192\.168\..*/', 
                    '/^172\.((1[6-9])|(2[0-9])|(3[0-1]))\..*/', 
                    '/^10\..*/');
              $found_ip = preg_replace($private_ip, $client_ip, $ip_list[1]);
              if ($client_ip != $found_ip){
                 $client_ip = $found_ip;
                 break;
              }
           }
        }
     } else { $client_ip = ( !empty($_SERVER['REMOTE_ADDR']) ) ? $_SERVER['REMOTE_ADDR'] : ( ( !empty($_ENV['REMOTE_ADDR']) ) ? $_ENV['REMOTE_ADDR'] : "unknown" ); }
     return $client_ip;
  }
}
?>

Ahora para llamar la función es simple desde el controllador agregas la siguiente línea:

$model->ip = Funcion::ObtenerIP();

Y estaríamos listo.

Saludos! 😀

Listar los archivos de una carpeta en PHP

Listar los archivos de una carpeta en PHP

PHP

Con el script que  muestro a continuación se podrá ver el contenido de una carpeta, todos sus archivos y carpetas que tenga dentro.

Lo que se hace es revisar la carpeta actual, recorrer a través de un while el contenido y verificados si este es un archivo o carpeta, si es carpeta lo dejamos entre corchetes [], así hacemos la diferencia con los archivos, que se encuentran en la carpeta.

Este es script es bastante básico y simple pero nos ayuda a como verificar y obtener el contenido de una carpeta en PHP asi de como recorrerlo.

<?php
$carpeta = opendir("."); // Ruta actual
while ($archivo = readdir($carpeta)) // Leemos la carpeta obteniendo uno a uno los archivos existentes
{
    if (is_dir($archivo)) // Aquí vemos si es o no una carpeta
    {
        echo "[".$archivo . "]<br />"; // Si es una carpeta lo dejamos entre corchetes
    else
    {
        echo $archivo . "<br />";
    }
}
?>

Este script obviamente se puede mejorar agregando una tabla o iconos etc.   Espero en algún momento les sirva.

Saludos 😀

Listar los archivos de una carpeta en PHP

Calcular días entre dos fechas con PHP

PHP

El siguiente código bastante sencillo por lo que se ve, nos sirve para calcular los días entre dos fechas utilizando la función de PHP strtotime:

function DiasTranscurridos($fec_inicio,$fec_termino)
{
       // Las fechas enviadas son formato "2015-12-01"
  $cantidad	= (strtotime($fec_inicio)-strtotime($fec_termino))/86400;
       // Redondeamos el dato hacia abajo
        $cantidad = floor($dias);		
  return $dias;
}

// Ejemplo de uso:
echo DiasTranscurridos('2015-12-01','2015-12-10');
// Resultado : 9

Se ve claramente que para que el código funcione simplemente se debe enviar las dos fechas o parámetros, indicando la fecha inicial y la fecha de término donde queremos calcular la cantidad de días.

Saludos!

😀

Listar los archivos de una carpeta en PHP

Eliminar comentarios html

PHP

Una función que no tiene complejidad y nos sirve para quitar facilmente los comentarios que se utilizan en html por ejemplo <!– vusano –>, solo tenemos que usar la expresión regular preg_replace(), y estaríamos.

function eliminar_comentarios_html($html="") {
    $comentarios = preg_replace('/<!--(.|\s)*?-->/', '', $html);
    return $comentarios;
}

Algún momento nos servirá.

Saludos! 😀