944 063 154

Blog

Enviar correo con Gmail en PHP usando swift mailer 4

Publicado enDesarrollo y Programación

SwiftMailer es probablemente la mejor librería para enviar correos mediante smtp y sendmail que existe para php. Escrita en 2005 por Fabien Potencier, CEO de Sensio Labs y Lead developer del framework Symfony para php. Inicialmente, SwiftMailer formaba parte de un proyecto académico. Un desarrollo que posibilitaba el envío de correos recurriendo al protocolo SMTP (Simple Mail Transfer Protocol). Desde entonces, la librería ha estado en continua evolución, hasta llegar a convertirse en la biblioteca de complementos que conocemos en la actualidad.

Características de SwiftMailer

Al igual que muchos otros proyectos de código abierto, el desarrollo de SwiftMailer no hubiera sido posible sin la ayuda de la comunidad. SwiftMailer, además, permite enviar correos electrónicos directamente desde tu aplicación en PHP a cualquier servidor SMTP. Por lo que puedes utilizarlo para enviar al servicio de correo de Google: Gmail. Entre sus principales ventajas se encuentran su facilidad de configuración o la potencia de la librería. Usando esta librería, podrás enviar correos multimedia y consumir menos recursos.  En el caso de envío a gmail, además, podrás elegir el protocolo criptográfico: SSL o TLS.

SwiftMailer Gmail: enviando correo con SMTP

El siguiente código nos permite enviar correo usando el servidor smtp de gmail con esta herramienta:


 $transport = Swift_SmtpTransport::newInstance('smtp.gmail.com',
                                               465,
                                               'ssl')
             >setUsername('usuario@gmail.com')
             >setPassword('tu contraseña');

 //Creamos el mailer pasándole el transport con la configuración de gmail
 $mailer = Swift_Mailer::newInstance($transport);

 //Creamos el mensaje
 $message = Swift_Message::newInstance($subject)
             >setFrom(array('tuemail@blackslot.gov' >'Blackslot'))
             >setTo($to_addresses)
             >setBody($body);

 //Enviamos
 $result = $mailer->send($message);

No podíamos terminar este artículo sin mencionar algún que otro plugin; aquellas pequeñas porciones de código que aumentan la funcionalidad de nuestra librería. Plugins para la aplicación de correo Swift Mailer:

  • AntiFlood plugin: la mayoría de los servidores SMTP están limitados en cuanto a cantidad de envío de mensajes. Este complemento permite administrar una gran cantidad de emails manteniéndose dentro de esos límites.
  • Decorator plugin: ¿necesitas enviar el mismo mensaje a múltiples destinatarios con ligeras variaciones en el cuerpo del mensaje? Decorator es la solución para permitir esas sutiles diferencias.
  • Logger plugin: su objetivo es identificar el porqué de que un servidor rechace direcciones o cualquier otro problema derivado del uso. En resumen, ayuda con la depuración en el proceso de envío.
  • Throttler plugin: a veces, el servidor SMTP tiene restricciones que limitan la velocidad en el envío de correos. Throttler consigue ejecutar Swift Mailer a una velocidad limitada.

Y, ¿si existen errores en el envío de emails? Consulta nuestro artículo para saber más acerca de los errores SMTP más habituales.

Generar un archivo CSR en IIS 6.0

Publicado enSistemas TI

La instalación de un certificado de seguridad SSL es fundamental para garantizar la seguridad de un sitio web. Un movimiento que empezó por las tiendas online y los sitios web que solicitaban información sensible al usuario y que ha acabado por extenderse a todo tipo de páginas web. Actualmente existen diferentes tipos de certificados SSL en el mercado, tanto de pago como los gratuitos de Let’s Encrypt, certificados SSL que puedes instalar tú mismo o la empresa en la que lo adquieres. Por ejemplo, en Linube nos encargamos de la instalación y configuración de los certificados SSL que nuestros clientes adquieran en nuestro site.

Si por el motivo que sea tienes que ser tú quien se encargue de la instalación del SSL, ten en cuenta que necesitarás un CSR; es decir, una solicitud para la firma del certificado. En este archivo se encuentran algunos de los datos que serán incluidos en el certificado SSL. El CSR contiene información como el nombre de tu empresa, una dirección asociada a la misma o el dominio para el que se ha generado dicho certificado SSL. Además de esta información, en el CSR se incluye una llave pública que también es necesaria para la instalación del certificado. Si tu servidor web utiliza Windows como sistema operativo, y por tanto es IIS, te mostramos cómo puedes generar el CSR en IIS 6.0.

Generando un CSR en IIS 6.0

Para generar un CSR en IIS 6.0, en primer lugar tenemos que acceder al servidor web de Windows IIS. Una vez allí, debemos acudir a Propiedades del sitio > Seguridad de directorios. Aquí, es necesario hacer click en Certificado del servidor para poder Crear un nuevo certificado. En este momento tendremos que elegir la opción Preparar la petición ahora pero enviarla más tarde y, a continuación, poner un cifrado para el certificado SSL y dejar la longitud en bits de 1024. Después, rellena el resto de los datos que se solicitan en el formulario hasta finalizar.

Es importante que tengas en cuenta que donde se solicita el ‘nombre común’ (common name) deberás poner el nombre completo del dominio para el que se solicita el certificado de seguridad. En nuestro caso, el dominio sería www.linube.com.

Cómo salvar la key privada

Una vez hayas terminado con el punto anterior será necesario que salves la clave privada que permitirá el funcionamiento del certificado SSL. Para ello, ve a MMC y escoge como complemento Certificates. En este punto deberás seleccionar Request > All task y exportar la información que obtenida.

Para mayor información acerca de cómo generar un CSR en IIS 6.0, puedes acudir a la documentación oficial.

Crear un certificado SSL autofirmado en IIS7

Publicado enCertificados SSL

Mediante este sencillo tutorial, te mostramos cómo puedes crear un certificado autofirmado SSL en IIS7. El uso de este tipo de certificado tiene ciertos riesgos y nada tiene que ver con un certificado de seguridad SSL. La principal diferencia entre ambos certificados es que con un autofirmado no se valida la autenticidad del sitio web. De esta forma, todas las conexiones que establezcas serán mucho más seguras ya que toda la información se encontrará encriptada dificultando así el acceso a la misma.

Pero utilizar un certificado autofirmado en IIS también tiene sus ventajas. Por ejemplo, puede ser de gran utilidad en entornos de desarrollo, ya que permite añadir seguridad SSL sin necesidad de pagar por ello. Es decir, no permite garantizar la autenticidad de una web o alojamiento, pero proporciona un canal seguro para las comunicaciones.

Cómo crear un certificado autofirmado en IIS7

Si quieres instalar un certificado SSL autofirmado en tu alojamiento Windows, deberás seguir los siguientes pasos:

  1. Abre el Administrador de IIS y seleccionar el nodo. A continuación, pulsa en abrir Certificados de servidor.
  2. Selecciona la opción Crear un certificado autofirmado. Una vez allí, el sistema te solicitará el nombre al que deseamos poner el certificado. En nuestro caso hemos elegido el hostname de la propia máquina.
  3. Ve al sitio web donde quieres que se instale el certificado. Nosotros hemos optado por Default Web Site. A continuación, ve a Enlaces.
  4. Haz click en Agregar.
  5. Escoge el tipo de HTTPS, ten en cuenta que por defecto el puerto siempre será el 443. Luego, puedes escoger el nombre del certificado.
  6. Cuando hayas aceptado, en el panel de acciones verás que aparece una nueva opción. Esta nueva pestaña te permitirá enlazar al sitio seguro. Recuerda que si quieres que siempre se requiera el acceso a través de HTTPS, deberás ir a Configuración de SSL.
  7. Cuando ya hayas introducido todos los cambios, haz click en Requerir SSL y el certificado autofirmado ya estará listo.

Otras opciones gratuitas

Con la llegada de los certificados gratuitos Let’s Encrypt, un tipo de certificado SSL producto de la comunidad open source, también puedes beneficiarte de la máxima seguridad a coste cero. En este caso también debes tener en cuenta que la emisión del SSL se produce de forma automática, por lo que en función de las características del sitio es probable que lo más recomendado sea un certificado de seguridad de pago.

Como siempre, antes de optar por uno u otro considera las ventajas e inconvenientes de cada uno de ellos y elige el que mejor se adecúe a las necesidades de tu sitio; más que a tu bolsillo.

Obtener el nombre de una máquina HyperV desde la máquina

Publicado enSistemas TI

Las máquinas virtuales son un dispositivo de gran utilidad a la hora de probar un determinado software o de utilizar aplicaciones o servicios nuevos. Esto se debe a que este tipo de máquinas nos permiten asegurarnos de que el sistema operativo permanece intacto en todo momento. Es decir, que a pesar de todos los cambios que se realicen, el sistema seguirá en el mismo estado en que se encontraba cuando la máquina en cuestión fue creada. Y el hecho de que el sistema operativo permanezca inalterado es especialmente importante cuando realizamos pruebas en las máquinas. Igualmente, en el caso de que consideremos que la aplicación pueda ser inestable o pueda causar algún daño.

En este sentido, podríamos decir que una máquina virtual es una especie de banco de pruebas. Un entorno en el que se utiliza hardware real y que tiene la habilidad de comportarse como un equipo tradicional. Así, en 2008 Microsoft creó HyperV, una tecnología que permite virtualizar un sistema operativo de una forma profesional. Eso sí, para ello es necesario tener en cuenta que el hardware tiene que permitirlo; es decir, que sea compatible con esta tecnología.

A pesar de sus múltiples ventajas es probable que algunos usuarios no sepan manejarse con este tipo de tecnología. Una tecnología que ha llegado para simplificarnos las tareas relacionadas con la gestión de servidores, pero que por falta de conocimientos no están al alcance del gran público. Entre las tareas de mayor utilidad que ofrece esta tecnología se encuentra la obtención del nombre de una máquina HyperV. Una labor que si no sabes cómo puedes llevarla a cabo, te lo mostramos con un sencillo fragmento de código.

Obteniendo el nombre de una máquina HyperV

Conocer cuál es el nombre de una máquina hypervirtualizada es mucho más sencillo de lo que pueda parecer. Además, aunque parezca un dato insignificante, es una información de gran utilidad para la gestión de dicha máquina. Para ello, podemos recurrir a un sencillo código de Windows PowerShell, la interfaz de consola creada por Windows para estos fines. Es decir, un script de aspecto similar al siguiente:


$Name = Get-ItemProperty -path "HKLM:SOFTWAREMicrosoftVirtual MachineGuestParameters" -Name VirtualMachineName

$Name.VirtualMachineName

 

Conocer el nombre de la máquina virtual puede resultarnos muy útil para realizar otras tareas relacionadas con un servidor virtual. Además, se trata de una sencilla tarea cuya realización apenas nos llevará unos segundos. Obtener esta información es mucho más sencilo gracias a las posibilidades que ofrece Windows Powershell. Ya que la interfaz de Windows permite la escritura y la unión de comandos, entre la enorme variedad de funcionalidades de esta consola.

Extraer elementos de una lista HTML y exportarlos con PHP

Publicado enDesarrollo y Programación

Puede que en algún momento de nuestras apasionantes vidas como desarrolladores web nos interese extraer el contenido de cada uno de los elementos de una lista HTML. Algo que habitualmente suele ir encabezado por <li>,<option> o similares. También puede que queramos almacenar esa información en un array que nos permita utilizarlos a lo largo de nuestra aplicación en cualquier otro momento.

Una lista HTML no es más que un párrafo en el que se recogen secuencias de artículos estructurados. Es decir, parte del código de la página web ordenado y agrupado según diferentes criterios. El lenguaje de marcado HTML define tres tipos de listas, la lista ordenada, la no ordenada y la lista de definiciones. Pero, para exportar estas listas a un array con PHP, no importa cuál sea el tipo de la lista. Puesto que el método que vamos a emplear a continuación es igualmente válido para cualquiera de los tres tipos de listas.

Cómo exportar una lista HTML

Para pasar la lista en HTML a un array en PHP, hemos escrito la función preg_replace de PHP. Esta función hace precisamente eso, buscar una expresión regular y sustituirla por otra diferente. Además, esta función permite no sólo sustituir funciones, sino también caracteres y cadenas en una cadena de texto. El uso de preg_replace() es de gran utilidad para eliminar espacios en blanco en el código de la web; además de corregir faltas de ortografía como acentos o editar caracteres especiales y saltos de línea. También es de gran utilidad para la creación de URLs amigables que mejoren en posicionamiento SEO de la página web. Vamos, que prácticamente resulta imprescindible tener acceso a esta información.

Para recurrir a la función preg_replace, deberemos ejecutar un código similar al que mostramos a continuación:


function li2Array($html,$elemento="li"){

  $a = array("/<".$elemento.">(.*?)</".$elemento.">/is");
  $b = array("$1 <explode>");

  $html  = preg_replace($a, $b, $html);
  $array = explode("<explode>",$html);

  return $array;

}

Así, una vez enviada la petición, el resultado que devolverá la función será un array con toda la información que contuviera dicha lista en HTML. De esta forma, podremos utilizar esa información en cualquier otra aplicación recurriendo a PHP. Extrayendo la información del HTML evitamos tener que volver a introducirla de forma manual. Además, al ser compatible con PHP podremos utilizar esos datos en cualquier otra herramienta que sea compatible con PHP.

De esta forma cualquier modificación que vaya a realizarse en el código de la web será mucho más sencilla. Asimismo, el código será más limpio y ordenado y será más fácil actualizarlo a las nuevas versiones de PHP.

Y, como siempre, ¡mantente informado sobre PHP y mucho más en el mejor blog sobre programación!

Solución al error HTTP/1.1: 417 en PHP con cURL

Publicado enDesarrollo y Programación

Es habitual que cada vez que desarrollamos con PHP como lenguaje de programación hagamos uso de la librería cURL para poder hacer peticiones de tipo HTTP POST. Y a su vez, en cada uno de estos intentos, también es muy común que se produzcan algunos errores en la conexión. Como ejemplo de ello, podemos encontrarnos algunos errores cuando traremos de mostrar las cabeceras de respuesta. Algo similar a esto: “HTTP/1.1 417 Expectation Failed Connection: close Content-Length: 0. Este error se produce cuando la solicitud de HTTP POST no puede procesarse. Esto, generalmente, se debe a que la sintaxis bien de PHP o bien de cURL, o incluso la sintaxis de ambas, no es correctas.

Cómo solucionar el error HTTP/1.1: 417

Una forma de solucionar este problema es enviar el campo Expect, una extensión que nos permite interactuar con diferentes procesos utilizando para ello PTY, un tipo de programación específica que permite la realización de determinadas tareas. Además, una buena utilización del campo expect favorece una interfaz más visual y sencilla que hará que la programación sea mucho más cómoda. Pero, volviendo al error HTTP/1.1., para que podamos corregirlo tendremos que enviarlo vacío dentro de las cabeceras HTTP de la petición que estamos a punto de realizar. Algo como lo que te mostramos en el siguiente ejemplo:


$ch = curl_init();

//metemos el campo expect en la cabeceras

curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers = array( "Expect:"));

En otras ocaciones, puede producirse un error HTTP/1.1 si se está intentando utilizar una cuenta IUSR como si de un dominio se tratase. Entonces, aparecerá el error ya que el controlador de dominios no puede ser capaz de autenticar la cuenta. Un error que resulta muy evidente ya que la cuenta IUSR no se trata de un dominio; sino que más bien está relacionada con el servidor web. Si este es tu caso tendrás que editar las cuentas que se muestran; así podrás leer el nombre de dominio de forma correcta.

Como siempre, no dudes en pasarte por nuestro blog para consultar las posibles dudas que te surjan en relación a cualquiera de nuestros servicios. Pero también puedes leernos para enterarte de las últimas novedades tecnológicas que van sucediéndose. En este espacio encontrarás información relacionada con el futuro de las aplicaciones móviles: Progressive Web App (PWA), todo lo referente a la tecnología cloud, nuestra especialidad como proveedores de servicios de internet, incluso la nueva versión de HTTP. Y todo lo que aún está por venir y que, a buen seguro, contribuirá a mejorar y revolucionar la informática.

Opciones para un sfWidgetFormChoice en un formulario

Publicado enDesarrollo y Programación

Los desarrolladores familiarizados con Symfony seguro que conocerán la clase sfWidgetFormChoice. Este widget se encarga de estandarizar y agrupar todas las variantes en un mismo lugar. Así, una misma selección puede mostrar diferentes formas, y también permite definitir una representación propia para la elección. La peculiaridad de sfWidgetFormChoice es que delega la responsabilidad de sus contenidos a otros widgets; pero, además, nos permite crear un campo HTML seleccionable de una forma muy cómoda. Entre las diferentes opciones que nos proporciona esta clase se encuentran las clases tipo select, radio, checkbox y list.

class ComprarForm extends sfForm{

  private $opciones = false;

  //configuramos el widget con sus opciones en la clase formulario
  public function configure()
  {

     $this>opciones = array('manzanas',
                              'peras',
                              'limones');

     $this->setWidgets(array(
                              'quiero' => new sfWidgetFormChoice(
                                              array('expanded' => true,
                                                    'choices' => $this-> opciones)),
                       ));

     $this-> setValidators( array( 'quiero' => new sfValidatorChoice(
                                              array( 'required' => true,
                                                     'choices'=>array_keys($this->opciones)
                                                   )),
                         ));
  }

}

//en la acción creamos el formulario
  $this->formulario = new ComprarForm();

//y en la vista generamos el campo tipo <select-> con las opciones configuradas
  $formulario['quiero']->render();

Otra clase de formulario con sfWidgetFormChoice

Hoy nos hemos encontrado con la necesidad de tener que crear diferentes opciones; según la petición que llegue a la acción que se muestra en el formulario. Quizá nos interese que en lugar de que la select se rellene con frutas como en el ejemplo anterior; se rellene con todo tipo de utensilios que nos permitan matar zombies, por ejemplo.

Para conseguir esto podríamos crear otra clase de formulario que contenga un widget con esas opciones y sus respectivos validadores. Pero eso rompería totalmente la regla de oro en el desarrollo web ágil: “Don’t repeat yourself“. Así que, para evitar ensuciar el código, la solución más elegante es sobreescribir el constructor de nuestra clase ComprarForm. De tal forma que se especialice con respecto al de su padre sfForm; y así admita un parámetro extra llamado “tipoDeProducto”.

class ComprarForm extends sfForm{

  private $opciones = false;

  public function __construct($tipoDeProducto='frutas',
                              $defaults = array(),
                              $options = array(),
                            $CSRFSecret = null){

      switch($tipoDeProducto){
        case 'frutas':
          $this-gt;opciones = array('manzanas',
                                   'peras',
                                   'limones');
       &amp;nbsp;break;
        case 'armas':
          $this->opciones = array('sierra eléctrica',
                                   'recortada',
                                   'katana',
                                   'rifle de francotirador');
     break;
      }

      parent::__construct($defaults, $options, $CSRFSecret);

 }

 //configuramos el widget con sus opciones en la clase formulario
 public function configure()
 {

     $this->setWidgets(array(
                              'quiero' =>new sfWidgetFormChoice(
                                                   array('expanded' =>true,
                                                         'choices' => $this->opciones)),
                      ));

    $this->setValidators(array(
                              'quiero' => new sfValidatorChoice(
                                               array('required' => true,
                                                     'choices'=> array_keys($this->opciones)
                                                    )),
                         ));
 }

}

Ahora ya tenemos todo preparado para poder especificar desde la acción qué opciones queremos en el campo select del formulario ComprarForm.

   $this->formulario = new ComprarForm('armas');

Y en la vista sin modificar el código ya nos aparecerán los productos que estamos deseando comprar.

Ten SQL Server al día

Publicado enSistemas TI

Si te estás preguntado sobre si es necesario, o no, mantener SQL Server actualizado, la repuesta es un sí muy rotundo. Como ya hemos comentado en otras ocasiones, mantener los equipos, sistemas operativos y cualquier aplicación es una de las mejores formas de evitar un ciberataque. Aunque no debería ser necesario explicar porqué es conveniente mantener un sistema actualizado, siempre habrá SysAdmins que no compartan la misma opinión. Es más, muchos de ellos se jactan de tener uptimes altísimos en su servidor, confundiéndolos con el SLA del servicio. Cuando ambos conceptos no tienen nada que ver.

Es cierto que actualizar SQL Server puede conllevar el reinicio del servidor, con la consiguiente interrupción del servicio que va asociada al reinicio; de ahí que algunos se nieguen a perder algo de su uptime. Pero, en cualquier caso, las ventajas mentener el sistema actualizado siempre serán más y merecerán la pena. Al igual que con el resto de aplicaciones, actualizar SQL Server es algo imprescindible cada que se publique una nueva versión del sistema de manejo de bases de datos.

Actualizar SQL Server

Antes de actualizar tu versión de SQL Server, ten en cuenta que necesitarás saber cuál es tu compilación de SQL Server. Esto puedes verlo con facilidad a través del SQL Server Management, siempre que lo tengas instalado o se esté ejecutando. Para ello, solo tienes que enviar al sistema la siguiente petición:

SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

Aunque aún no existe una lista oficial que agrupe todas las compilaciones disponibles de SQL Server, en SQLTEAM puedes encontrar esa información. En el foro para administradores de bases de datos encontrarás publicada una lista mantenida por Bill Graciano que os será de ayuda para poder conocer la compilación de SQL Server.

Una vez más recordamos que es importante actualizar todos los elementos. Ya no solo para mejorar la seguridad de la plataforma, el equipo o el servidor; sino también porque las versiones en desuso van quedándose sin soporte. Lo que supone una desprotección total en caso de que se detecte alguna vulnerabilidad en el sistema. Aunque en algunos casos actualizar no sea tan sencillo y se requiera de la adaptación del código o una migración a una nueva versión; es mucho mejor perder unos minutos de uptime del servidor antes que permitir que sea vulnerable a cualquier tipo de ataque informático u otra amenaza que ponga en peligro la seguridad del equipo, servidor o plataforma.

Conexiones remotas en SQL Server 2008 y 2005

Publicado enSistemas TI

En ocasiones nos encontramos con un SQL recién instalado y la necesidad de conectarnos a él desde un equipo remoto. En estos casos, en primer lugar, si el equipo cliente no cuenta con las herramientas necesarias para SQL Server, el sistema de manejo de bases de datos; deberemos empezar por obtenerlo. Puedes descargar la versión gratuita del administrador de SQL Server 2008, o alguna de sus anteriores versiones. Por si no sabes desde dónde puedes obtener SQL Server, aquí te dejamos los enlaces de descarga.

– Para SQL Server 2005: Microsoft Management Studio Express.

– Para SQL Server 2008: Microsoft 2008 Management Studio Express.

Pero, mejor aún, si lo deseas puedes descargar el Kit de Herramientas de SQL Server Express 2005. Este Kit, además del administrador de SQL Server, incluye una herramienta gráfica de administración. Así como Business Intelligence Development Studio, un entorno de creación y edición de informes que usa SQL Server Reporting Services. Si usas SQL 2008, la descarga más recomendada para ti es Microsoft SQL Server 2008 Express with Advanced Services.

Configurando conexiones remotas en SQL Server 2008

En primer lugar, debemos ir a la utilidad Configuración de superficie de SQL Server 2005 (Surface Area Configuration Utility). Una vez allí, tenemos que acudir a Configuración de superficie para servicios y conexiones y, dentro de esa opción, a conexiones remotas. En esta pestaña deberemos seleccionar Conexiones locales y remotas, además de seleccionar la opción Usar TCP/IP y canalizaciones con nombre.

sql server 2008-2005-configuracion

En seguno lugar, tenemos que acceder a SQL Configuration Manager. Una vez allí, tendremos que abrir la carpeta Configuración de red de SQLEXPRESS > Protocolos de SQLEXPRESS y habilitamos las conexiones TCP/IP, además de las canalizaciones con el nombre de protocolo y su estado.

sql server 2008-configuracion-manager

A continuación, y siguiendo dentro del SQL Configuration Manager > Protocolos de SQL Express > TCP/IP deberemos especificar en las propiedades Direcciones IP > IPALL > Puerto TCP . Aquí, deberás indicar el puerto 1433, o el que tú prefieras habilitar para SQL.

sql server 2008-Protocolos TCP/IP

Cuando hayas especificado el nuevo puerto, es necesario crear una excepción en el firewall, algo similar a esto: C:Archivos de programaMicrosoft SQL ServerMSSQL.1MSSQLBinnsqlsrvr.exe. Y seguidamente, no te olvides de abrir los puertos 1434 (UDP) y 1433 (TCP).

Finalmente, deberás reiniciar el servicio de SQL para que los cambios que has introducido se apliquen de forma correcta. Ahora que las conexiones remotas ya se han configurado, estamos listos para probar la conexión desde el equipo cliente. Si todo funciona de forma correcta, la configuración de SQL Server 2008 habrá finalizado y podremos empezar a conectarnos al sistema de manejo de bases de datos de forma remota.

Si te ha resultado de interés, puedes echar un vistazo a los artículos relacionados Hosting SQL o Interfaz SQL.

Bloquear IPs desde el firewall de Windows 2008

Publicado enSistemas TI

Una de las cosas que más me gustan respecto a la seguridad de Windows, son las mejoras introducidas en el firewall de Windows 2008. Entre las nuevas posibilidades que ofrece, si lo comparamos con la versión anterior de Windows, destaca la de poder bloquear IPs atacantes de una forma sencilla. Y es que con esta nueva funcionalidad, bloquear IPs desde el firewall de Windows ya es una realidad. Algo que no resulta nada complicado; ni tampoco necesitarás contar con conocimientos técnicos avanzados para ello.

Estoy seguro de que ningún administrador deja de revisar la pestaña Seguridad en el Visor de Eventos. Esta pestaña, en muchas ocasiones, es de gran ayuda para detectar reiterados intentos de conexión. Con independencia de que estos sean legítimos o no; aunque estos ataques no consigan nada, pueden lograr provocar un ataque DDoS en toda regla. Para evitar este tipo de situaciones, lo más adecuado es filtrarlos a través de un firewall perimetral. Actualmente, y desde la versión Windows 2008, a falta de uno disponemos de dos firewalls. Es decir, además de utilizar el cortafuegos perimetral por defecto del sistema operativo, también podemos filtrar el tráfico desde el propio server.

Cómo bloquear IPs desde el firewall de Windows

1. En primer lugar, tenemos que abrir el firewall de Windows y acudir al asistente. Desde ahí podremos crear nuevas reglas de entrada que permitan filtrar el tráfico.

2. A continuación, y una vez allí, seleccionamos añadir nueva regla de entrada.

3. Seguidamente, en el apartado ‘Tipos de regla’ añadimos una nueva regla personalizada. Esta opción nos permite decidir a qué tráfico, o direcciones IP, queremos impedirle la entrada en el servidor. En cualquiera de las otras tres opciones, la limitación se puede aplicar a programas, puertos o accesos predefinidos.

Bloquear IPs desde el firewall de Windows-Añadir regla de firewall

4. Una vez hayamos especificado la nueva regla, tendremos que acudir a la pestaña de ‘Programa’. Desde ahí será posible aplicar la nueva regla que acabamos de crear a Todos los programas.

Bloquear IPs desde el firewall de Windows-firewall

5. Justo después, en ‘Protocolo y puertos’, deberemos especificar el tipo de protocolo. Nuestra recomendación en este punto es optar por Cualquiera; de forma que se añada mayor seguridad al servidor.

Bloquear IPs desde el firewall de Windows-fw protocolo

6. Ahora tendremos que agregar dirección la IP que queremos bloquear. Aunque lo habitual es limitar el acceso a unas determinadas IPs, también puedes bloquear un rango entero de direcciones con facilidad.

Bloquear IPs desde el firewall de Windows-fw agregar ip a bloquear

7. En la siguiente pestaña, ‘Acción’, deberemos seleccionar la opción: Bloquear la conexión.

Bloquear IPs desde el firewall de Windows-fw bloquear la conexion

8. Llegados a este punto, tendremos que indicar a qué redes aplicamos la regla. Esto lo puedes hacer desde la pestaña de ‘Perfil’.

Bloquear IPs desde el firewall de Windows-fw redes

9. Para ir finalizando con el bloqueo de IPs desde el Firewall de Windows, es necesario ponerle un ‘Nombre’ identificativo. Así, cuando quieras editar la configuración, o consultar qué reglas tienes definidas en el servidor, lo tendrás más sencillo.

Bloquear IPs desde el firewall de Windows-nombre regla

10. Pulsando ‘Finalizar’ en el apartado de ‘Nombre’, ya habremos creado nuestra nueva regla de seguridad.

Bloquear IPs desde el firewall de Windows-2008

Como podemos ver, con Windows 2008 crear reglas en el Firewall es mucho más fácil. Además, la posibilidad de poder activar dos cortafuegos diferentes, pero complementarios, hacen que la seguridad del servidor sea aún mejor.

Ahora que ya sabes cómo bloquear IPs desde el firewall de Windows 2008, puedes crear tantas reglas nuevas como consideres necesarias. De esta forma, además de añadir mayor seguridad, podrás evitar que tu alojamiento pueda ser hackeado.

HTML templates con JQuery

Publicado enDesarrollo y Programación

Es muy habitual que cuando nos iniciamos en el mundo de la programación, nos acostumbremos a hacerlo siguiendo un determinado patrón. En estos casos, cuando nos toca trabajar con otro lenguaje diferente nos sentimos raros. Por ejemplo, si estás habituado a programar en MVC, tener que realizar tareas en otro código puede resultarte incómodo. Pero, además tener que utilizar un código con el que no estás familiarizado puede tener consecuencias en el propio proyecto. Esto puede llevarnos, por ejemplo, a hardcodear el código HTML de una aplicación. Una práctica demasiado común cuando no se conoce bien el código que que, además nada cómodo, dará como resultado un código poco limpio.

En determinados lenguajes de programación es más difícil encontrarse con código hard-codeado o sucio. Por ejemplo, si sueles utilizar JavaScript, estarás mal acostumbrado a ver código limpio. Algo similar al siguiente script:

var html = "
<li class='" + class + "'>" +
           "<input type='text' id='"+ id +"' /></li>
";

Aunque el código en sí no es del todo incorrecto; cuando tenemos que realizar cambios en nuestra aplicación, algo bastante común en nuestro día a día, necesitaremos separar ese código HTML. De esta forma, además de evitar volvernos locos, estaremos haciendo que el código sea más mantenible. Asimismo, será más sencillo cuando queramos dinamizar el código HTML desde JavaScript.

Escribiendo código HTML desde JavaScript

Una solución para limpiar y ordenar nuestro código HTML consiste en escribir el HTML que vamos a reutilizar desde JavaScript. En el proceso, deberemos seguir una serie de patrones que sustituiremos más adelante por los valores que más nos interesen. Para ello, podemos recurrir a diferentes herramientas, como la biblioteca multiplataforma JQuery de JavaScript. En este caso, si quisiéramos hacer una lista, deberíamos rellenar un elemento como el siguiente <ul>. Es decir, deberíamos recurrir a algo parecido al script que mostramos a continuación:




<ul id="list"></ul>



Una vez hayamos indicado en el código HTML que los elementos que introduciremos a continuación forman parte de una lista; deberíamos colocar justo antes de terminar el body el siguiente bloque de código HTML:




<div id="bloque_lista" style="display:none">

  

<li class="|class|">
   <input type=”text” id=”input|row_id|” />
 </li>


</div>



Para rellenar la lista con los elementos que necesitamos listar, bastaría con sustituir los patrones |class| y |row_id| por los valores que necesitemos. En cada uno de ellos iremos especificando los elementos que compondrán nuestra lista.


function addItemToList() {

   var list     = $('#list');
   var class    = "rosa";
   var template = $('#bloque_lista').html();

   template = template.replace(/|class|/gi, class)

   for(var id=1;id<11;id++){

     list.append(template.replace(/|row_id|/gi, id));

   }

}

Recurriendo a este tipo de prácticas, nuestro código HTML estará mucho más ordenado. Así, las modificaciones se podrán realizar de una forma más fácil y rápida; tanto si somos nosotros quienes tenemos que hacerlas, como si es alguien que no está acostumbrado a nuestro código. Porque peor que trabajar con un código que no conoces es no poder hacerlo porque está tan desordenado que es tarea imposible.

Cómo activar o deshabilitar Safe Mode en nuestro panel

Publicado enSistemas TI

El Safe Mode o modo a prueba de fallos, es un modo de acceso usado por algunos sistemas operativos como Microsoft Windows, Mac OS X y otros dispositivos electrónicos. Aunque el nombre de Safe Mode no es correcto, puesto que no asegura al 100% el correcto funcionamiento del sistema operativo; si es una gran aproximación a esa operatividad casi total del SO.

En cuanto al Safe Mode, tenemos que tener en cuenta que un dispositivo que se encuentra en modo seguro tendrá unas funcionalidades reducidas. Es decir, es posible que algunas de sus funciones no estén disponibles en el Safe Mode del sistema operativo. Aún así, el equipo podrá funcionar con normalidad; ya que el sistema operativo en este modo permite aislar problemas ocasionados por componentes que no forman parte del sistema operativo base. Componentes que, por lo tanto, apenas deberían tener influencia en el comportamiento del ordenador.

Algunas aplicaciones o determinados gestores de contenido, como por ejemplo la plataforma WordPress, necesitan que el Safe Mode (Modo Seguro) no esté activo; para poder funcionar de forma correcta en un servidor. Para realizar este cambio requerido por WordPress, podemos recurrir al panel de control Plesk. Como verás a continuación, esto se puede controlar de una forma sencilla, sin necesidad de tocar ninguna línea de código. Así que vamos a ver cómo puedes deshabilitarlo para que tu WordPress funcione correctamente.

Activar o deshabilitar el Safe Mode

1) En primer lugar, deberás iniciar sesión en tu panel de control. Una vez dentro de tu suscripción, accede a los Ajustes de alojamiento.

ajustes de alojamiento web-activar-safe mode

2) Allí, deberás buscar el apartado de soporte para PHP; el lugar en el que puedes activar o desactivar la función php_mode.

activar-deshabilitar-Safe Mode

En este caso nos interesa desactivar el Safe Mode a fin de que WordPress pueda funcionar de la forma más correcta. Pero si en otro momento necesitas, o quieres, reactivarlo solo tendrás que seguir los mismo pasos para que tu CMS vuelva a modo seguro. Como ves, activar o desactivar Safe Mode no tiene ningún misterio. Además de ser algo que puedes hacer tú mismo y que apenas te llevará unos segundos.

Las últimas versiones de WordPress ya no requieren de la desactivación del modo seguro para funcionar; ya que no es necesario con su nueva configuración por defecto. En el caso de que tu versión de WordPress requiera de desactivar el Safe Mode, nuestra recomendación es que actualices tu PHP a una versión más reciente y, sobre todo, segura. Desde 2019, tu WordPress no debería utilizar una versión de PHP inferior a 7.1.

Si prefieres delegar en manos expertas todas las cuestiones relacionadas con la parte técnica de tu WordPress; o del servidor en el que se aloja, puedes contratar nuestro servicio de Adminstración para WordPress. Un nuevo servicio que incluye la actualización de la plataforma, la realización de copias de seguridad y monitorización proactiva. De esta forma, tu web siempre estará segura.

Mientras tanto, puedes mantenerte al día de todas las novedades del sector gracias a nuestro blog. No hay novedad informática que se nos escape.

Cargar extensión de PHP desde código en tiempo de ejecución

Publicado enDesarrollo y Programación

Las extensiones de PHP son una parte muy importante dentro del lenguaje de programación. Una extensión de PHP no es más que un ‘módulo’ que le permite al motor de PHP añadir una determinada funcionalidad. Aunque, por norma general, las extensiones que necesitas en condiciones normales vienen ligadas a la distribución de PHP que estés utilizando; es posible que por las características de proyecto necesites añadir nuevas funcionalidades. Algo que solo puedes hacer cargando esas extensiones.

Como el lenguaje en el que operan, una extensión de PHP suele estar escrita en C; y requerir de DLL para poder compilarlas o cargarlas. En este caso, si quieres cargar una extensión de PHP, puedes hacerlo de dos formas. Por un lado, puedes optar por compilar la extensión que necesites; o, por otro puedes obtenerla cargando el DLL. La opción más recomendada es mediante DLL. Pero, para ello, dicha extensión deberá primero encontrarse como fichero .dll en tu sistema. En el caso de que no la encuentres, tendrás que compilarla.

Aunque las extensiones más habituales suelen venir por defecto con el lenguaje de programación PHP, siempre puedes añadir alguna nueva. Algo que en la mayoría de los casos puedes obtener desde la PECL (Biblioteca de la Comunidad de Extensiones de PHP). Esta biblioteca no es más que un repositorio de extensiones de PHP donde se encuentran las más utilizadas. Y también el lugar en el que puedes desarrollar tus propias extensiones para PHP y compartirlas con la comunidad de desarrolladores.

Cargando una extensión de PHP

Para cargar una extensión en tiempo de ejecución en PHP podemos incluirla dentro del fichero php.ini de configuración. Para ello, deberemos recurrir a la función dl(). Lo habitual es que una extensión de PHP se escriba de la siguiente manera: “php_nombre de la extensión”.dll. Y suele ser igual de habitual que dicha extensión se encuentre junto a “PHP\ext”. En este caso, si quisiéramos cargar una extensión que pueda conectarse a una base de datos MySQL, deberíamos hacer lo siguiente:

if(!extension_loaded("mysql")){
  dl("php_mysql.".PHP_SHLIB_SUFFIX);
}

Aquí, el valor de la constante PHP_SHLIB_SUFFIX almacena la extensión que tendría una librería dependiendo el sistema operativo en el que corra nuestra aplicación.

Recuerda que, tras cargar y activar una nueva extensión de PHP, deberías reiniciar el servidor. Solo mediante un reinicio es posible confirmar que se han aplicado los cambios y comprobar que la nueva extensión cuenta con su propia sección. Es decir, que se ha cargado de una forma correcta.

Si quieres saber mucho más acerca de PHP y otros lenguajes de programación, sigue leyendo nuestro blog tecnológico y no te pierdas los artículos y novedades relacionadas con PHP como el post de cómo instalar extensión php-memcached en Suse Linux.

Ordenar arrays asociativos en otro array con PHP

Publicado enDesarrollo y Programación

Hay algunas veces en las que disponemos de un array que contiene a su vez varios arrays asociativos. Y que, a su vez, estos pueden contener más información. Como por ejemplo los datos obtenidos tras realizar una consulta a la base de datos.

Es posible que dicho array esté cacheado y que, por ello, no queramos atacar a la base de datos para ordenar esos resultados. Es decir, que queramos ordenar la información pero sin tener que modificar nada en la base de datos. En esta situación, nos vendría genial poder ordenar los arrays asociativos que contenga dicho array de alguna forma fuera de la base de datos. Todo ello en base a cada uno de los valores que contenga una de las claves de los mismos.

Todo esto, podemos verlo mucho más claro a través de un ejemplo. Pongamos que tenemos un array que contiene nombres y apellidos y queremos ordenar esa información. Para ello deberemos recurrir a un array como, por ejemplo, el siguiente:


$resultados = array(

array(

      'id' =&gt; 1,
      'nombre' =&gt; 'Enjuto',
      'apellido' =&gt; 'Mojamuto'

     ),

array(

      'id' =&gt; 2,
      'nombre'  =&gt; 'Marlo',
      'apellido'  =&gt; 'Brando'

     )

);

Funciones de PHP

Pra realizar esta misma tarea, en PHP disponemos de múltiples funciones. Entre tantas funciones destaca una: la función usort(). Esta función de PHP sirve para ordenar elementos dentro de una base de datos en base a una función de comparación. Este es un criterio que nosotros mismos podemos especificar según los resultados que nos interese obtener. Por lo que si queremos obtener diferente información, podemos ordenar los datos de la base de datos de maneras distintas.

Por ejemplo, si quisiéramos ordenar los datos contenidos en la base de datos según la clave ID, en orden descendiente; deberíamos ejecutar una función de un aspecto similar a la siguiente:


function comparar($x, $y){

          if ( $x['id'] == $y['id'] )
             return 0;
          else if ( $x['id'] &gt; $y['id'] )
             return -1;
          else
             return 1;

}

Ahora, para que usort() pueda utilizar función, deberemos llamarle e indicarle que haga la acción que queremos. De otra manera, usort() no sabrá qué es lo que tiene que hacer ni de dónde tiene que obtener esa información. Pero facilitarle las cosas a la función usort() bastará con ejecutar un código similar a este:


//si no estamos en un entorno Orientado a Objetos
usort($resultados, array('comparar'));

//si estamos en un entorno Orientado a Objetos
usort($resultados, array('nombreDeClase','comparar'));

Una vez hayas ejecutado el código que te indicamos, tus arrays estarán ordenados. Y, para ello, no habrás tenido que realizar ningún tipo de modificación en el contenido de tu base de datos.

¿Sabes cómo crear consultas select count en PHP? Para ampliar tus conocimientos sobre PHP, sigue de cerca nuestro blog tecnológico.

¿Por qué contratar nuestros servicios?

Publicado enDesarrollo y Programación Sistemas TI

En Linube somos proveedores de dominios y alojamiento web; pero, además, somos expertos en otros dos temas: la gestión de sistemas TI y el desarrollo avanzado de aplicaciones web para nuestros clientes. Nuestro enfoque consiste en crear soluciones conjuntas o específicamente indicadas para cada una de esas áreas. Eso sí, sin salirnos del ámbito de internet, que es donde nos movemos como pez en el agua.

Gestión de infraestructuras TI

En internet es clave disponer de una óptima infraestructura técnica de sistemas. Una infraestructura que no sólo englobe la instalación y configuración del servidor o servidores involucrados en un proyecto; sino que vaya más allá. Por ello, nuestra apuesta es una gestión de sistemas realizada por los técnicos profesionales que conforman nuestro equipo. Expertos encargados de administrar las infraestructuras de cada uno de nuestros clientes; incluso nuestras propias soluciones de Platform as a Service. Teniendo siempre un punto de vista crítico sobre las necesidades reales que pueda tener el proyecto, y ofreciendo un know-how junto a las tecnologías de desarrollo más vanguardistas disponibles en este momento.

Solo así, apostando por la tecnología y el buen hacer, es posible ofrecer a nuestros clientes el mejor servicio. Tanto desde el rendimiento de sus servidores, algo que repercutirá en la experiencia que proporcionen a sus usuarios; como en la seguridad de la información.

Desarrollo avanzado de aplicaciones para internet

Hoy en día, el desarrollo de un proyecto en internet requiere un punto de vista global. Algo que abarque más disciplinas que el diseño y desarrollo de una aplicación web. Además de contar con una buena arquitectura de software, que escale adecuadamente y sea fácilmente mantenible, es igual de importante considerar otros aspectos. En este punto nos enfrentamos con la problemática de conseguirlo haciendo un buen uso de los recursos con los que contamos. Tanto en términos económicos como en tecnológicos y a medio o largo plazo.

En Linube desarrollamos bajo plataformas maduras, como .NET o PHP, ,además de recurrir al uso de diferentes herramientas y frameworks como ASP.NET MVC y Symfony. De esta forma, podemos desarrollar aplicaciones de una forma mucho más ágil, dotadas de una arquitectura sólida, fácilmente escalable pero sin perder su gran nivel de calidad.

Además podemos asegurar un gran nivel de estabilidad y fiabilidad tanto a medio como a largo plazo en cada una de las aplicaciones que desarrollamos. Realizando despliegues sobre nuestra propia infraestructura de sistemas. Este punto es nuestra mayor baza para poder asegurar un servicio completo y de gran calidad. Sin importar lo ambicioso que pueda llegar a ser el proyecto.