SSL heartbeat fix (Ubuntu)

Imagen

 

Con motivo de la reciente vulnerabilidad descubierta en el protocolo SSL, dejo aquí unos sencillos pasos para cubrirnos las espaldas y evitar que nuestro servidor esté expuesto a dicha vulnerabilidad.

  1. Lo primero será comprobar que nuestra versión de SSL está afectada, para ello, basta con ejecutar este comando

    sudo openssl version -a

    Si la versión tiene una fecha de compilación (built on) anterior al 7 de abril de 2014, nuestro servidor puede ser atacado. Sino es así, estamos bien y no hace falta seguir con este pequeño manual.

  2. En caso de estar afectados, podemos solucionarlo con dos sencillos comandos:

    sudo apt-get update

    y actualizamos nuestra versión de SSL

    sudo apt-get upgrade openssl

    Por otra parte, comentar que no es necesario relanzar nuestro servidor web (Apache por ejemplo) ya que el mismo instalador se encarga de hacerlo. Sería también recomendable generar y configurar un nuevo certificado SSL para nuestro servidor, así nos evitamos posibles ataques si nuestro servidor ya fue atacado bajo esta vulnerabilidad.

Configurar nuestro propio nivel de log con Laravel

Una de las cosas que más podemos echar de menos en el fichero app.php de Larvel 4 es una variable donde podamos definir el nivel de log que queremos en nuestra aplicación.

Dado que en este fichero podemos añadir nuestras propias variables de configuración, vamos a crear nuestra propia variable de nivel de logs:

'log_level' => 'warning',

Donde los posibles valores para esta variable será uno de los siguientes [debug, info, notice, warning, error, critical, alert].

Por último, debemos indicarle a Laravel que utilice nuestras preferencias para logs, esto lo definiremos editando el fichero app/start/global, que es donde Laravel registra entre otras cosas la llamada a Logeador. Editamos esta línea:

Log::useDailyFiles(storage_path().'/logs/'.$logFile);

Pasándo ahora como parámetro nuestra variable definida anteriormente:

Log::useDailyFiles(storage_path() . '/logs/' . $logFile, 0, Config::get('app.log_level'));

Y listo, ya tenemos configurado nuestro propio nivel de Log con Laravel 🙂

Comandos propios en artisan y trabajos programados en Laravel

Es normal que en nuestros proyectos nos encontremos con la necesidad de crear ciertas tareas que no responden a ningún evento, sino que deben ser ejecutadas regularmente para el funcionamiento del sistema. Los casos más típicos pueden ser por ejemplo borrar notificaciones leídas por el usuario con ciertos días de antigüedad o el envío de emails a ciertos usuarios.

En cualquier caso, aunque podríamos crearnos un script independiente a Laravel para estas tareas, vamos a ver como utilizar el código desarrollado para nuestra aplicación y ejecutar estas tareas de mantenimiento mediante nuestro propio comando personalizado para trabajar con laravel mediante artisan.

Para esta entrada, vamos a crear un comando de ejemplo llamado maintenance, que por ejemplo borre las notificaciones leídas de los usuarios, con fecha de creación anterior a 3 días desde la fecha actual.

1) Desde el terminal, creamos el comando artisan

php artisan command:make maintenance

2) En la carpeta app/command tendremos un nuevo fichero. Dentro de este fichero, el método fire será el que utilicemos para definir que debe hacer el comando cuando se ejecute desde el terminal. Por ejemplo, para nuestro ejemplo básico podría ser el siguiente:

/**
 * Execute the console command.
 *
 * @return void
 */
 public function fire()
 {
 $this->info('Deleting all readed notifications');
 
 $hour_limit = new DateTime('now');
 $hour_limit->modify('-1 day');
$not = Notification::where('readed', '=', 1)
 ->where('created_at','<', $hour_limit)
 ->delete();
 
 $this->info('Deleting finished');
 }

3) En el fichero app/start/artisan.php, debemos añadir una entrada para que artisan reconozca el comando:

Artisan::add(new maintenance);

4) Podemos probar nuestro comando ejecutando

php artisan command:maintenance

 

5) Por último, añadimos una entrada en el cron del sistema con la siguiente orden

sudo crontab -e

Teniendo el siguiente esquema de configuración del cron del sistema:

cron

 

Añadimos una entrada según las necesidades que tengamos. Por ejemplo, imaginemos que queremos ejecutar el comando maintenance una vez al día, cada día de la semana a las 16:45 horas:

45 16 * * * php /var/www/project/artisan command:maintenance

y eso es todo 🙂

Enlace de la documentación de Laravel recomendado: http://laravel.com/docs/commands

Filtro global XSS para Laravel 4

Para proteger nuestra aplicación desarrollada en Laravel de ataques de XSS y sanear todos los datos de entrada para nuestros formularios de forma transparente a todo nuestro código, podemos utilizar el siguiente método estático en de nuestras clases:

 /*
 *
 * Method to strip tags globally.
 */
public static function globalXssClean()
{
    // Recursive cleaning for array [] inputs, not just strings.
    $sanitized static::arrayStripTags(Input::get());
    Input::merge($sanitized);
}
public static function arrayStripTags($array)
{
    $result array();
    foreach($array as $key=> $value) {
        // Don't allow tags on key either, maybe useful for dynamic forms.
        $keystrip_tags($key);
        // If the value is an array, we will just recurse back into the
        // function to keep stripping the tags out of the array,
        // otherwise we will set the stripped value.
        if(is_array($value)) {
            $result[$key] = static::arrayStripTags($value);
        else{
            // I am using strip_tags(), you may use htmlentities(),
            // also I am doing trim() here, you may remove it, if you wish.
            $result[$key] = trim(strip_tags($value));
        }
    }
    return $result;
}
Y después tan sólo debemos añadir una llamada a nuestro método estático desde el filtro “before” en filters.php:
App::before(function($request)
{
// Our own method to defend XSS attacks globally.
OurClass::globalXssClean();
});

Fuente original