Archivo de la categoría: tutoriales-ios

Git Hack Recovery

En esta ocasión quiero compartir con ustedes una pequeña herramienta que desarrolle (y lo sigo haciendo) y que presente en #CPMX5 como parte de las charlas dadas por miembros de la Comunidad Underground de México, la herramienta se llama Git Hack Recovery y a grandes rasgos permite que en el caso de que tu sitio web haya sido comprometido por un atacante, los archivos regresen al último estado de confianza de manera automática, ahora explico un poco más.

1487876_10203003583025374_7182323267010208382_o

Montando el entorno

Para empezar tenemos dos opciones, montar nuestro propio servidor con git o utilizar el servicio de algún tercero que permita crear repositorios privados, para este ejemplo Bitbucket es una buena opción puesto que nos permite crear repositorios ilimitados. (https://bitbucket.org/repo/create)

bitbucket

Después debemos de crear 2 cuentas y agregarlas al repositorio, un administrador del con permisos de lectura y escritura y “esclavo” que solo será capaz de leer los archivos del repositorio pero no subir ni modificar nada. (para agregar usuarios al repositorio debes ir a settings > access management)

bitbucket2

Después para mayor comodidad vamos a utilizar pki authentication por lo que debemos crear nuestras respectivas ssh keys en cada maquina (el servidor de producción y la máquina de desarrollo / administración), tutorial: https://help.github.com/articles/generating-ssh-keys
Recapitulando debemos de tener:

  • Repositorio privado
  • Una cuenta con acceso de escritura y lectura al repositorio
  • Una cuenta con acceso de solo lectura al repositorio

Ahora con las tres cosas que tenemos debemos montar una infraestructura como la siguiente:

git-hack-recovery

Tip: En el caso de que nuestro sitio web utilice urls amigables como wordpress, es recomendable que en nuestro servidor de desarrollo utilicemos virtual-host y agreguemos una entrada con el dominio del sitio web que apunte a 127.0.0.1 en nuestro archivo hosts, esto porque algunas veces CMS como wordpress causan problemas con las urls.

Explicación de los Scripts

Esta primera versión de la herramienta está conformada por 5 scripts que se supone deben de correr en segundo background en el servidor de producción, los he separado en dos grupos para que sean más fácil de explicar.

Scripts de administración
Deben de correr en nuestro “trusted system”

  • auto_commit.sh: Como su nombre lo indica, hace un commit, es util a la hora de que terminamos de agregar algo en localhost y queremos que los cambios sean agregados al repositorio
  • db_checksum_backup.sh: En el caso de que nuestro desarrollo utilice bases de datos con este script podemos crear un backup de las tablas y almacenar el checksum de las mismas en un archivo para que posteriormente sean revisadas

Scripts de producción
Deben de correr en nuestro servidor de producción

  • auto_update.sh: Como su nombre lo indica, el trabajo de este script es revisar si hay nuevos cambios en el servidor Git, si los hay los descargara con el fin de mantener el sitio de producción actualizado
  • deface_recovery.sh: Este script se encarga de detectar cambios en los archivos locales, en el caso de que se elimine, modifique o cree un archivo, el script devolverá todo a como estaba originalmente
  • db_checksum_validator.sh: En el caso de que un atacante haya comprometido nuestra base de datos (agregado, eliminado o modificado información de la misma), este script detectara que hubo una modificación de las tablas utilizando el checksum y las restaurara utilizando la copia que tiene del servidor Git
Tip: Es recomendable que los script de producción corran mediante cronjobs mientras que los de administración sean bajo demanda

Integrar los scripts con un proyecto

Primeramente, en nuestra laptop o la máquina de donde subiremos los cambios (normalmente localhost) clonaremos el repositorio usando la cuenta de administrador, y agregaremos los archivos de nuestro sitio web, blog de wordpress, joomla, desarrollo a la medida o lo que sea, después para integrar Git Hack Recovery es tan fácil como descargar los archivos del siguiente enlace Git Hack Recovery y colocarlos junto con los archivos del sitio web que queremos proteger, el archivo .gitignore ya contiene las entradas para que los scripts de administración sean ignorados al momento de hacer los commits. Una vez tenemos los archivos listos en la maquina “trusted” podemos correr los scripts de administración (en este orden)

$ ./db_checksum_backup.sh host-name db-name db-user db-pass
$ ./auto_commit.sh remote-name branch-name "your-commit-message"

En este punto tanto nuestro sistema “trusted” como nuestro servidor Git estarán sincronizados con los mismos archivos, ahora en el servidor de producción vamos a clonar el repositorio de Git utilizando la cuenta “esclavo”, esto nos asegura que en caso de que alguien vulnere el servidor de producción (que es el que normalmente está expuesto a Internet), solo seguirá teniendo acceso de lectura al repositorio en el servidor Git. En el servidor de producción es donde debemos de correr los 3 scripts que nos faltan como taras cron, para hacerlo podemos abrir el archivo de configuración de cronjobs usando el comando:

# crontab -e

Y agregar las siguientes entradas

*/1 * * * * cd /path/production-repository/; /bin/bash deface_recovery.sh --arguments > /path/deface_recovery.txt</li>
*/1 * * * * cd /path/production-repository/; /bin/bash auto_update.sh --arguments > /path/auto_update.txt</li>
*/1 * * * * cd /path/production-repository/; /bin/bash db_checksum_validator.sh --arguments > /path/db_checksum_validator.txt</li>

Estos scripts se estarán ejecutando cada minuto y guardaran un log en el path que le indiquemos. Listo, esto ha sido un pequeño tutorial de cómo integrar la herramienta, es la versión 1.0 pero cumple con su cometido, estaré trabajando para agregarle funcionalidades extras así como soporte para manejar más motores de bases de datos. Próximamente estaré subido algunos vídeos de donde se aprecie el funcionamiento de la misma.

Git Hack Recovery en acción

Descargar Git Hack Recovery

salu2

50% de descuento para Campus Party 2014!

cover2

Uno de los eventos más importantes de Tecnología y ambiente tecnológico del mundo se celebrará en nuestro país en Zapopan, hablamos de CPMX5 y hoy te mostraremos la oportunidad de como obtener tus entradas con el 50 de descuento.

  • Deben registrarse como campusero en www.campus-party.com.mx.
  • Si ya tienes usuario solo debes hacer login.
  • Una vez hecho login en el panel de usuario deben seleccionar la opción «Comprar entrada». (http://www.campus-party.com.mx/webapp/fichaUsuario/pago)
  • Elegir la opción «Comprar con descuento».
  • En el proceso deben usar el siguiente código de descuento: CD501ihw35hi (copia y pega).
  • Una vez elegido el tipo de entrada se procede al pago de la cantidad vía PayPal.

¡Y listo! solo faltaría esperar a que llegue el día de comienzo de #CPMX5 para disfrutar de una semana de contenidos para los fans de la tecnología y lo que esto implica.

Crear app universal para iPhone y iPad

En este sencillo tutorial aprenderás a crear una app universal desde cero, las apps universales son aquellas que funcionan tanto en iPhone / iPod como en iPad.

Requisitos:

  • Sistema Operativo: Mac OSX 10.7.4
  • IDE: Xcode 4.2.1
  • Conocimientos de Objective-c: básicos, recomiendo leer esta guia de apple para tener nociones básicas sobre conceptos del lenguaje y la estructura de las apps Your First iOS App

Ok, lo primero que tenemos que hacer es abrir Xcode y crear un nuevo proyecto, nos vamos a File > New > New Project (como se muestra en la siguiente imagen)

Nos aparecerá un menú en donde se nos pedirá elegir el tipo de aplicación que deseamos crear, elegimos Empty Application

Aquí el proceso es bastante intuitivo, damos clic en siguiente y nos pedira un nombre para nuestra aplicación, yo le he puesto universal, en la opcion que dice Device Family asegurate de seleccionar Universal y de desmarcar las 3 opciones de abajo ya que en esta tutorial no las necesitamos.

Nos preguntara en que lugar deseamos guardar el proyecto y listo, ahora si podemos comenzar a escribir código :).

Por default tenemos 2 archivo creados, AppDelegate.h y AppDelegate.m, lo primero que tenemos que hacer es abrir AppDelegate.h y añadir una nueva propiedad, un UiViewController, lo hacemos con el siguiente código.

@property (strong, nonatomic) UIViewController * viewController;

Ten en cuenta que el código anterior lo debes de agregar entre @interface y @end quedando como resultado

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) UIViewController * viewController;

@end

Después tenemos que sintetizar los métodos accesores de nuestra propiedad, para ello vamos al AppDelegate.m y agregamos el siguiente código debajo de

@synthesize window = _window;

El resultado final es

@synthesize window = _window;
@synthesize viewController = _viewController;

Una vez hecho lo anterior ahora tenemos que crear una sub clase de UiViewController, para eso podemos dar clic derecho sobre nuestro proyecto y seleccionar New File o también en el menú de arriba nos vamos a File > New File, Xcode nos abrirá una ventana en donde tenemos que elegir del lado izquierdo (en la categoría de IOS
) Cocoa Touch y seleccionar UiViewController subClass tal y como se muestra en la siguiente imagen.

Después en la siguiente pantalla ponemos un nombre a la clase, yo he puesto ScreenViewController, nos aseguramos que sea una sub clase de UIViewController y por ultimo desmarcamos la opción de With XIB for user interface. Mas adelante verán el por que.

Clic en Next después Save y listo. Ahora tenemos 2 nuevos archivos ScreenViewController.h y ScreenViewController.m, estos son los controladores de las vistas (las apps están basadas en MVC), ahora tenemos que crear las View, para eso de igual manera vamos a File > New File; del lado derecho en la categoria de iOS elegimos User Interface y seleccionamos View, como se muestra en la siguiente imagen.

En la siguiente pantalla seleccionamos iPhone en la opción de Device Family, damos clic en Next, y pondremos como nombre de archivo el siguiente ScreenViewController_iPhone (el nombre tiene que ir así por convención), finalmente clic en Create.

Repetimos este ultimo paso pero ahora seleccionando iPad en la opción de Device Family y ponemos como nombre correspondiente al archivo ScreenViewController_iPad. Al final deberías tener los siguientes archivos en tu proyecto.

Ahora tenemos que indicar el controlador de las vistas que acabamos de crear (los archivo XIB), para hacer eso damos clic primero en ScreenViewController_iPhone, seleccionamos en la categoría de los Placeholders el File’s Owner y del lado derecho en el identity inspector nos vamos a la categoría de Custom Class y ponemos como clase ScreenViewController

Después nos vamos al Connection inspector (la ultima opción de los Inspector) y “linkeamos” la view haciendo clic en el circulito de la derecha y arrastrando la línea azul (en la categoría de Outlets) con el view que esta en la categoría de Objects :), si lo hiciste bien debes de tener algo como lo siguiente.

Hacemos exactamente lo mismo pero ahora con el archivo ScreenViewController_iPad

Ahora para poner algo de contenido de ejemplo creamos un Label centrado en cada una de las Views que contenga como texto el nombre del dispositivo desde donde se esta ejecutando la app, Hacemos clic en ScreenViewController_iPhone, elegimos Label de la lista de objetos (esquina inferior derecha) lo arrastramos al centro de la pantalla del dispositivo, damos doble clic y escribimos iPhone, exactamente lo mismo con ScreenViewController_iPad pero escribimos iPad en el objeto Label. Debemos de tener algo como esto.

Listo hemos terminado con estos 2 archivos, ahora tenemos que regresar al AppDelegate.m y agregar una condicional donde se evalué el tipo de dispositivo desde donde estamos ejecutando la app y en base a eso cargar el XIB correspondiente, localizamos la siguiente clase en el archivo

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

Y agregamos las siguientes líneas justo debajo del comentario de // Override … bla bla bla

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        _viewController = [[UIViewController alloc] initWithNibName:@"ScreenViewController_iPhone" bundle:nil];
    } else {
        _viewController = [[UIViewController alloc] initWithNibName:@"ScreenViewController_iPad" bundle:nil];
    }
    self.window.rootViewController = self.viewController;

Al final nuestra función debe de verse así.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        _viewController = [[[UIViewController alloc] initWithNibName:@"ScreenViewController_iPhone" bundle:nil] autorelease];
    } else {
        _viewController = [[[UIViewController alloc] initWithNibName:@"ScreenViewController_iPad" bundle:nil] autorelease];
    }
    self.window.rootViewController = self.viewController;
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

Por ultimo corremos la app ya sea en los simuladores o en dispositivos físicos para ver los resultados :)!

Y listo, espero haya quedado claro una de las tantas técnicas que existen para programar apps universales en iOS, esta vez solo utilizamos un Label que muestra un texto diferente dependiendo de si ejecutamos la aplicación en un iPhone o en un iPad, pero las posibilidades son infinitas y las ideas a desarrollar tan complejas como nosotros queramos :), incluso podrías programar una app que mostrara una interfaz diferente para cada día de la semana :p. Como siempre lo he dicho cualquier duda escríbanla en los comentarios y yo la responderé.

salu2

Puedes encontrar más guías y trucos sobre iPhone 5 en: www.iPhone5ya.com