2013/09/02

Estructura de una aplicación ASP.NET MVC


Crear una aplicación ASP.NET MVC con Visual Studio

Ya hemos visto los fundamentos de una aplicación web y una introducción al patrón MVC. Llegados a esto punto ya podemos crear nuestra aplicación web con ASP.NET MVC. Para ello, abrimos Visual Studio, y a través del menú seleccionamos “New Project”. En el caso de que no tengamos instalado Visual Studio podemos descargar la versión Express (gratuita) desde el siguiente enlace: http://www.asp.net/mvc
image
Para crear una aplicación ASP.NET MVC basta con seleccionar la opción adecuada dentro de la pantalla de templates para Visual Studio. Seleccionamos ASP.NET MVC Web Applicattion. En el caso de que la opción no figure en al lista, es indicativo de que no hemos instalado ASP.NET MVC. Podemos realizar dicha descarga desde este enlace: http://www.asp.net/mvc
 image
En el siguiente paso debemos seleccionar la plantilla del proyecto. Disponemos de tres plantillas:
  • Empty – Plantilla vacia.
  • Internet Application – Plantilla de propósito general configurada con seguridad basada en formularios (la aplicación pedirá usuario y password al visitante para identificarse). Adecuada para aplicaciones de internet.
  • Intranet Application - Plantilla de propósito general configurada con seguridad basada en Windows, integrada con el directorio activo (la aplicación utiliza el usuario de Windows que esta conectado). Adecuada para entornos de intranet.
En nuestro caso seleccionamos “Internet Application”.
image
Es importante destacar que en la parte inferior de esta pantalla es en la que seleccionamos el motor de renderizado de las vistas «View Engine» - seleccionamos RAZOR. En ASP.NET MVC las vistas son procesadas por un motor de renderizado antes de ser devueltas al cliente. Este motor es RAZOR. En este mismo tutorial veremos en detalle la sintaxis de RAZOR.
Además disponemos de un segundo motor de renderizado – ASPX, que emplea la misma sintaxis utilizada por Web Forms (basado en las marcas <% %>)
También podemos instalar motores adicionales, como el caso de NHAML - http://code.google.com/p/nhaml/, una implementación de .NET del popular motor de renderizado de Ruby On Rails.
En esta pantalla – New ASP.NET MVC 4 Project -, seleccionamos además la casilla para crear un proyecto de «Testing» y el framework que deseamos utilizar para el mismo. Una de las ventajas que obtenemos al utilizar ASP.NET MVC es simplificar el proceso de test de nuestro código, algo importantísimo de cara a la calidad de nuestros desarrollos. Al final de este tutorial incluiremos un anexo sobre test unitario (mientras tanto os invito a la excelente introducción que realizo Ibon Landa en Geeks http://geeks.ms/blogs/ilanda/archive/2009/06/16/pruebas-unitarias-resumiendo.aspx)
Finalmente, pulsamos OK y Visual Studio creará el proyecto.
Al finalizar, debemos tener una solución de Visual Studio con una estructura como la siguiente:
image
Como podemos ver la imagen anterior Visual Studio ha creado una solución con dos proyectos:
  • MvcApplication1, se trata del proyecto web que contiene los archivos de nuestra aplicación web.
  • MvcApplication1.Test, es el proyecto de testing asociado.
A continuación vamos a explicar los diferente archivos y directorios que se han creado en el proyecto MvcApplication1, con el objetivo de entender la organización de ficheros y carpetas de ASP.NET MVC.
Profundizaremos en los diferentes conceptos según avancemos en el tutorial, se muestran aquí de manera introductoria para que nos vayamos familiarizando con la estructura de archivos y carpetas.

Estructura de directorios y archivos.

Cuando creamos una nueva aplicación con ASP.NET MVC se crea por defecto una estructura de directorios, apropiada para la gran mayoría de las aplicaciones. Por supuesto podemos añadir nuevos directorios a esta estructura, aunque por razones de coherencia recomendamos mantener la estructura que propone ASP.NET MVC.

Directorio App_Data.

Este directorio está pensado para ubicar archivos de datos, normalmente bases de datos MSSQL. También es el lugar adecuado para archivos XML o cualquier otra fuente de datos.
Inicialmente está vacio.

Directorio App_Start.

Este directorio, nuevo en ASP.NET MVC 4, contiene los archivos de código que se ejecutan al inicializar la aplicación. Como veremos mas adelante, todo aplicación ASP.NET MVC es una instancia derivada de la clase System.Web.HttpApplication, definida en el archivo global.asax. Esta clase es la encargada de iniciar la aplicación, el directorio App_Start está pensando para ubicar las clases de configuración para el inicio de la aplicación.
La siguiente imagen muestra el contenido del directorio.
image
Por defecto contiene los siguientes archivos(clases):
  • AuthConfig.cs
  • BundleConfig.cs
  • FilterConfig.cs
  • RouteConfig.cs
  • WebApiConfig.cs

Directorio Content.

El directorio Content está pensado para el contenido estático de la aplicación, especialmente útil para archivos css e imágenes asociadas.
image
ASP.NET MVC nos ofrece por defecto una organización en base a “temas”, que nos permita personalizar el aspecto visual de nuestra aplicación de forma fácil y rápida (eso en teoría… elaborar un tema visual puede requerir de mucho trabajo y la colaboración de un diseñador gráfico, algo que recomiendo siempre que sea posible).
También es el lugar apropiado para los archivos .less en el caso de que utilicemos esta tecnología en nuestra aplicación.

Directorio Controllers.

El directorio controllers en el lugar para los controladores, que como hemos visto en el capitulo anterior  los controladores son las clases encargadas de recibir y gestionar las peticiones http de la aplicación.
image
Veremos los controladores en profundidad mas adelante.

Directorio Filters

El directorio Filters es el lugar donde debemos ubicar los filtros. Los filtros son atributos (también llamados decoradores) para los controladores, que nos permiten aplicar un comportamiento previo y posterior a la ejecución de uno o varios métodos de los controladores. Son clases derivadas de System.Web.Mvc.ActionFilterAttribute. A través de este mecanismo podemos añadir fácilmente funcionalidad a nuestros controladores evitando repetir la misma lógica una y otra vez, sobrescribiendo el comportamiento de algunas acciones.
image 
La plantilla incluye un filtro de ejemplo, InitializeSimpleMembership, en el siguiente ejemplo vemos como se utiliza el fitlro para decorar la clase AccountController (también incluida en la plantilla de proyecto)
[Authorize]
[InitializeSimpleMembership]
public class AccountController : Controller
{
    //
    // GET: /Account/Login

}
Veremos los filtros en profundidad mas adelante.

Directorio Images

Este es evidente … El directorio images es lugar para la imágenes de nuestra aplicación.
image
Como observación diremos que en el caso de que las imágenes formen parte del aspecto visual del sitio web, y no del contenido, deberían estar en el directorio content, como parte de un tema.
Por ejemplo, el contenido de una galería fotográfica o de un catalogo de productos debería estas en la carpeta images, mientras que las imágenes de fondo, iconos de los botones, sprites, etc deberían estar en la carpeta content junto con los archivos css. Básicamente, si una imagen se utiliza en un archivo css el lugar adecuado es la carpeta content.

Directorio Models

El directorio models es la ubicación que nos propone ASP.NET MVC para las clases que representan el modelo de la aplicación, los datos que gestiona nuestra aplicación.
image
Nota. En aplicaciones complejas, divididas en capas las clases de modelo suelen incluirse en assemblie aparte.
La siguiente clase muestra un ejemplo muy básico para representar el modelo de nuestra aplicación.
public class FooModel
{
    public Guid Id { get; set; }

    public string Name { get; set; }
}
Una de las grandes ventajas de las que disponemos en ASP.NET es que podemos decorar la clase que representa la modelo con diferentes atributos, que nos van a permitir establecer reglar sobre los datos como por ejemplo las reglas de la validación, si el datos es requerido o no, la longitud máxima y mínima del dato … etc
public class FooModel
{
    [Required]   
    public Guid Id { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 3)]    
    [Display(Name = "Name for FooModel")]
    public string Name { get; set; }
}
Como veremos cuando veamos las vistas, estos atributos son interpretados por la vista para establecer automáticamente las validaciones necesarias en función del los decoradores utilizados en el modelo.

Directorio Scripts

El directorio scripts está pensado para ubicar los archivos de javascript (*.js). El código javascript es ejecutado en el contexto del navegador, es decir, en la parte cliente, y nos permite ejecutar acciones sin necesidad de enviar los datos al servidor.
image
ASP.NET MVC incluye varias librerias de javascript por defecto:
  • jquery.js. Esta popular y súper útil librería nos va a permitir gestionar fácilmente peticiones AJAX, manipular el DOM en cliente, etc … Esta librería se ha convertido en un framework muy popular, y es la base de para la creación de pluggins que nos van a permitir dotar a nuestro sitio web de efecto sorprendentes sin apenas esfuerzo. http://jquery.com/
  • jquery.spin.js. Este pluggin nos permite crear animaciones de indicación de carga de contenidos el circulito que da vueltas para indicarnos que la página esta realizando algún proceso . Es un pluggin de jQuery basado en spin.js. http://fgnass.github.io/spin.js/
  • jquery.validate.js. Este pluggin nos permite realizar validaciones en el lado cliente fácilmente. Esta vinculado al uso de decoradores en el modelo de nuestra aplicación.
  • knockout.js. Esta librería nos permite utilizar el patrón de diseño MVVM (Model View ViewModel), que introdujo Microsoft para el desarrollo con WPF y Silverlight en aplicaciones web con javascript. http://knockoutjs.com/
  • modernizr.js. Esta librería nos permite validar fácilmente si el navegador que esta ejecutando la página web es compatible con HTML5, en en caso de que no sea así proporcional un mecanismo alternativo (polyfill). http://modernizr.com/. Por ejemplo, si nuestro navegador es compatible con HTML5 interpretará sin problema la etiqueta VIDEO, pero en el caso de que estemos navegando con un navegador antiguo deberemos ofrecer al usuario un mecanismo alternativo para el video (un flash por ejemplo). En el siguiente enlace podemos encontrar polyfills para casi todas las características de HTML5: https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills
Nota: El nombre de los archivos puede varias dependiendo de la versión instalada, por ejemplo el archivo jQuery.js se llama jquery-1.7.1.js, ya que corresponde con la versión 1.7.1 de la librería.

Directorio Views

El directorios Views contiene los archivos de vista. Como explicamos en la introducción al patrón MVC los controladores devuelven vistas sobre las que inyectamos el modelo de nuestra aplicación. Estas vistas son interpretadas por el motor de renderización – Razor en nuestro caso. Son archivos similares a aplicaciones de ASP clasico, donde tenemos código HTML estático y determinadas zonas de código que son ejecutadas en el servidor.
image
El siguiente ejemplo muestra el clásico “Hola Mundo”.
@{
    Layout = "~/Views/Shared/_Layout.cshtml";
    ViewBag.Title = "HelloWorld";
}
<h2>HelloWorld</h2>
@*El código se servidor se especifica con el caracter @*@
Podemos asignar un modelo a la vista a través de la siguiente directiva.
@model MvcApplication1.Models.FooModel
Veremos las vistas en profundidad mas adelante.

Directorio Shared

El directorio Shared contiene vistas que van a ser reutilizadas en otras vistas. Veremos como incluir vistas - denominadas parciales – en otra vista cuando veamos Razor, aunque de manera muy breve diremos que se realiza a través del Helper Html, de la siguiente forma:
@Html.Partial("Error") @*Incluye la vista parcial Error.cshtml, del directorio Shared*@
En este caso es muy importante respetar la ubicación de los archivos, ya que cuando desde una vista hagamos la llamada @Html.Partial(“Error”) para incluir la vista de la pantalla de error, el motor buscara en el directorio Shared para encontrar la vista Error.cshtml.
No debemos confundir una vista compartida con los controles .ascx de ASP.NET WebForms. Cuando incluimos vistas compartidas en otra vista, esta son interpretadas por RAZOR sin ejecutarse ningún controlador. Simplemente se renderiza su contenido – no como en los controles ascx donde se ejecuta todo el ciclo de vida del control completo y sus correspondientes eventos.
Es posible utilizar una vistas compartida de un modo muy similar al de un control ascx de ASP.NET WebForms, aunque para este debemos forzar la ejecución del controlador a través de los métodos Action y RenderAction del Helper Html:
@Html.Action("About") @*Ejecuta el método "About" del controlador correspondiente*@

Archivo _ViewStart.cshtml

Este archivo establece el layout por defecto de las páginas. El contenido del archivo es sencillo y únicamente especifica el archivo de layout.
@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}
El layout es un archivo con extension .cshtml que contiene la estructura general de documento, que es reutilizada en el resto de vistas. De este modo evitamos tener que reescribir el código en todas las vistas, reutilizando el código y permitiendo que este sea mucho mas sencillo de mantener.
En cierto modo es similar a las MasterPages de ASP.NET WebForms.

Archivo _Layout.cshtml

El archivo _Layout.cshtml define el  layout de la aplicación, que contiene la estructura general de documento, que es reutilizada en el resto de vistas. El archivo _Layout.cshtml se encuentra dentro del directorio Views/Shared. El contenido del archivo layout por defecto se muestra a continuación:
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>@ViewBag.Title - My ASP.NET MVC Application</title>
        <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
        <meta name="viewport" content="width=device-width" />
        @Styles.Render("~/Content/css")
        @Scripts.Render("~/bundles/modernizr")
        
    </head>
    <body>
        <header>
            <div class="content-wrapper">
                <div class="float-left">
                    <p class="site-title">@Html.ActionLink("your logo here", "Index", "Home")</p>
                </div>
                <div class="float-right">
                    <section id="login">
                        @Html.Partial("_LoginPartial")
                    </section>
                    <nav>
                        <ul id="menu">
                            <li>@Html.ActionLink("Home", "Index", "Home")</li>
                            <li>@Html.ActionLink("About", "About", "Home")</li>
                            <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
                        </ul>
                    </nav>
                </div>
            </div>
        </header>
        <div id="body">
            @RenderSection("featured", required: false)
            <section class="content-wrapper main-content clear-fix">
                @RenderBody()
            </section>
        </div>
        <footer>
            <div class="content-wrapper">
                <div class="float-left">
                    <p>&copy; @DateTime.Now.Year - My ASP.NET MVC Application</p>
                </div>
            </div>
        </footer>

        @Scripts.Render("~/bundles/jquery")
        @RenderSection("scripts", required: false)
    </body>
</html>
Fijemonos en la llamada que hace Razor al método @RenderBody(), es ahí donde se procesará la vista que estemos mostrando.
Podemos tener múltiples archivos de layout dentro de nuestro proyecto.

El archivo web.config

El archivo web.config es el archivo principal de configuración de ASP.NET. Se trata de un archivo XML donde se define la configuración de la aplicación. Veremos poco a poco el contenido de este fichero, aunque vamos a ver aquí algunas características generales que es necesario conocer.
image
Para simplificar el despliegue de las aplicaciones, el archivo de configuración se presenta en diferentes versiones o “sabores”, de forma que podemos modificar el archivo de configuración dependiendo de nuestra configuración de despliegue. Si observamos estos archivos observaremos que contienen transformaciones XML que se aplican sobre el archivo web.config al desplegar la aplicación. De este modo cuando desplegamos la aplicación en modo Debug se aplicarán las transformaciones XML definidas en Web.Debug.config.
El archivo de configuración aplica un mecanismo de jerarquía a nivel de los archivos de configuración, en la que un archivo de mayor profundidad dentro de la jerarquía sobrescribe al de menor, en el contexto del recurso solicitado.
image
Por ejemplo, si dentro de nuestra aplicación tenemos un archivo web.config sobre la raíz del sitio (en gris sobre la imagen), y otro sobre la carpeta Views (en rojo), el archivo de configuración de la carpeta Views prevalece y sobrescribe el valor del archivo de configuración raiz (siempre que el recurso solicitado sea se encuentre el directorio, en este ejemplo Views).
De esta forma podemos por ejemplo establecer en nuestro sitio web “areas” públicas y privadas de manera muy sencilla, tan fácil separar los archivo es directorios e como incluir un archivo de configuración con la seguridad activada sobre el directorio privado, y otro accesible a todo el mundo en el directorio privado. Veremos como hacer esto con Areas de ASP.NET un poquito mas adelante.

El archivo global.asax

Toda aplicación ASP.NET MVC es una instancia de una clase derivada de System.Web.HttpApplication. Esta clase es el punto de entrada de nuestra aplicación – el Main de la aplicación web por decirlo de alguna manera. Como podemos observar, la clase base es la misma que para una aplicación ASP.NET clásica (WebForms) por lo que todos que podemos reutilizar todo lo que ya sabíamos de ASP.NET.
Desde este archivo podemos manejar eventos a nivel de aplicación, sesión, cache, autenticacion,  etc ...
Este archivo varia mucho desde la versión anterior de ASP.NET MVC, aunque el funcionamiento es el mismo. En ASP.NET MVC 4 se ha incluido el directorio App_Start que nos permite organizar como se inicializa la aplicación.
// Por defecto, el namespace corresponde con el nombre del proyecto 
namespace MvcApplication1 
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterAuth();
        }
    }
}
Como podemos ver, el código se encarga de registrar las áreas definidas en el proyecto, cargar la configuración, filtros, etc…, en definitiva, se encarga de configurar la aplicación para que esta pueda ejecutar de manera correcta. Las clases de configuración se encuentran en el directorio App_Start
En el siguiente enlace podemos encontrar la documentación oficial sobre el archivo global.asax http://msdn.microsoft.com/en-us/library/1xaas8a2(v=vs.71).aspx
La lista completa de eventos disponibles es la siguiente:
// Summary:
//     Occurs when ASP.NET acquires the current state (for example, session state)
//     that is associated with the current request.
public event EventHandler AcquireRequestState;
//
// Summary:
//     Occurs when a security module has established the identity of the user.
public event EventHandler AuthenticateRequest;
//
// Summary:
//     Occurs when a security module has verified user authorization.
public event EventHandler AuthorizeRequest;
//
// Summary:
//     Occurs as the first event in the HTTP pipeline chain of execution when ASP.NET
//     responds to a request.
public event EventHandler BeginRequest;
//
// Summary:
//     Occurs when the application is disposed.
public event EventHandler Disposed;
//
// Summary:
//     Occurs as the last event in the HTTP pipeline chain of execution when ASP.NET
//     responds to a request.
public event EventHandler EndRequest;
//
// Summary:
//     Occurs when an unhandled exception is thrown.
public event EventHandler Error;
//
// Summary:
//     Occurs just before ASP.NET performs any logging for the current request.
public event EventHandler LogRequest;
//
// Summary:
//     Occurs when the handler is selected to respond to the request.
public event EventHandler MapRequestHandler;
//
// Summary:
//     Occurs when the request state (for example, session state) that is associated
//     with the current request has been obtained.
public event EventHandler PostAcquireRequestState;
//
// Summary:
//     Occurs when a security module has established the identity of the user.
public event EventHandler PostAuthenticateRequest;
//
// Summary:
//     Occurs when the user for the current request has been authorized.
public event EventHandler PostAuthorizeRequest;
//
// Summary:
//     Occurs when ASP.NET has completed processing all the event handlers for the
//     System.Web.HttpApplication.LogRequest event.
public event EventHandler PostLogRequest;
//
// Summary:
//     Occurs when ASP.NET has mapped the current request to the appropriate event
//     handler.
public event EventHandler PostMapRequestHandler;
//
// Summary:
//     Occurs when ASP.NET has completed executing all request event handlers and
//     the request state data has been stored.
public event EventHandler PostReleaseRequestState;
//
// Summary:
//     Occurs when the ASP.NET event handler (for example, a page or an XML Web
//     service) finishes execution.
public event EventHandler PostRequestHandlerExecute;
//
// Summary:
//     Occurs when ASP.NET bypasses execution of the current event handler and allows
//     a caching module to serve a request from the cache.
public event EventHandler PostResolveRequestCache;
//
// Summary:
//     Occurs when ASP.NET finishes updating caching modules and storing responses
//     that are used to serve subsequent requests from the cache.
public event EventHandler PostUpdateRequestCache;
//
// Summary:
//     Occurs just before ASP.NET starts executing an event handler (for example,
//     a page or an XML Web service).
public event EventHandler PreRequestHandlerExecute;
//
// Summary:
//     Occurs just before ASP.NET sends content to the client.
public event EventHandler PreSendRequestContent;
//
// Summary:
//     Occurs just before ASP.NET sends HTTP headers to the client.
public event EventHandler PreSendRequestHeaders;
//
// Summary:
//     Occurs after ASP.NET finishes executing all request event handlers. This
//     event causes state modules to save the current state data.
public event EventHandler ReleaseRequestState;
//
// Summary:
//     Occurs when the managed objects that are associated with the request have
//     been released.
public event EventHandler RequestCompleted;
//
// Summary:
//     Occurs when ASP.NET finishes an authorization event to let the caching modules
//     serve requests from the cache, bypassing execution of the event handler (for
//     example, a page or an XML Web service).
public event EventHandler ResolveRequestCache;
//
// Summary:
//     Occurs when ASP.NET finishes executing an event handler in order to let caching
//     modules store responses that will be used to serve subsequent requests from
//     the cache.
public event EventHandler UpdateRequestCache;

Home Controller

La clase HomeController es el punto de entrada de la aplicación, la página por defecto.
Cuando creamos un nuevo proyecto ASP.NET MVC se crea también un controlador HomeController situado directamente el folder Controllers
image
El controlador de ejemplo que se incluye en el proyecto por defecto, incluye tres métodos: Index, About y Contact, que disponen de sus correspondiente vistas en el folder Home.
image
El código del HomeController es el siguiente:
namespace MvcApplication1.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";

            return View();
        }

        public ActionResult About()
        {
            ViewBag.Message = "Your app description page.";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }
    }
}
Como podemos ver cada uno de los métodos del controlador devuelve la vista asociada por defecto:
  • Index() devuelve la vista index.cshtml
  • About() devuelve la vista about.cshtml
  • Contact() devuelve la vista contact.cshtml
Veremos los controladores en el siguiente capitulo.

Creación de Áreas.

Como hemos visto, ASP.NET MVC divide los elementos que componen su arquitectura en carpetas con el mismo nombre (Models, Views, Controllers). Esta división es fácil e intuitiva pero puede ser limitada en aplicaciones grandes, donde el número de entidades a manejar sea grande. Para estos casos ASP.NET MVC proporciona un mecanismo muy sencillo que nos permite agrupar contenidos (y sus configuraciones) denominadas Areas.
Un Area no es mas que una carpeta que replica en su interior la estructura anterior de MVC - Model, Views, Controllers y define sus propias rutas de acceso a través de la clase PublicContentAreaRegistration que se crea automáticamente al añadir una nueva área. Tiene la ventaja adicional de tener su propio archivo de configuración de modo que es ideal para diferenciar zonas públicas y privadas por ejemplo.
Podemos crear Areas del siguiente modo:
Sobre el explorador de soluciones de Visual Studio,
image
Visual Studio nos preguntara el nombre del área que queremos crear, en nuestro caso le damos el nombre PublicContent
image
Podemos ver que se ha creado en Visual Studio un directorio Areas, con un subdirectorio PublicContent en el que podemos encontrar la estructura de carpetas de Controllers, Models y Views que ya hemos visto anteriormente.
image
También tenemos un archivo de configuración (que nos permite sobrescribir la configuración raiz a través del mecanismo de jerarquia explicado anteriormente) y un archivo PublicContentAreaRegistration.cs en el que se registra la ruta del área sobre la tabla de rutas de ASP.NET MVC (veremos como funciona este mecanismo mas adelante), de momento diremos que la tabla de ruta establece un mapeo entre las URLs que envía el navegador y el controlador que debe gestionar estas peticiones.

Fuente: http://www.devjoker.com/
Si te ha parecido interesante podrías hacer click en +1, compartirlo en Facebook o Twitter, o dejar un comentario. ¡Gracias!.

Cómo iconizar una aplicación C# en el área de notificación de Windows

Explicaremos en este tutorial cómo ocultar una aplicación, desarrollada en C# (C Sharp) .Net, en el área de notificación de Windows, utilizando el componente no visual NotityIcon. Dicha aplicación quedará iniciada pero no se mostrará en la barra de tareas, en su lugar se mostrará un icono en el área de notificación de Windows:
Cómo iconizar una aplicación C# en el área de notificación de Windows
Para conseguir este efecto seguiremos los siguientes pasos. En primer lugar añadiremos a nuestra aplicación el componente NotifyIcon del Cuadro de herramientas (en el grupo "Controles comunes"):
Cómo iconizar una aplicación C# en el área de notificación de Windows
Antes de configurar el componente NotifyIcon añadiremos un segundo componente MenuStrip que nos permitirá mostrar un menú emergente al pulsar con el botón derecho del ratón sobre el icono del área de notificación para poder interacturar con la aplicación (volver a mostrarla, cerrarla y ejecutar cualquier tarea). Para ello accederemos al "Cuadro de herramientas" y pulsaremos sobre "MenuStrip" del grupo "Menús y barras de herramientas":
Cómo iconizar una aplicación C# en el área de notificación de Windows
Seleccionaremos el componente MenuStrip añadido y estableceremos su propiedad "Name" a "mnuContextual":
Cómo iconizar una aplicación C# en el área de notificación de Windows
Pulsaremos con el botón derecho del ratón sobre el MenuStrip llamado ahora mnuContextual y seleccionaremos "Editar elementos":
Cómo iconizar una aplicación C# en el área de notificación de Windows
Desde aquí añadiremos todos los elementos del menú que queramos para nuestra aplicación. Los típicos para el caso de la aplicación oculta en el área de notificación son, al menos, "Mostrar" y "Cerrar", de forma que al iconizar la aplicación siempre podamos volver a mostrarla. Para añadir estos elementos seleccionaremos el tipo "MenuItem" y pulsaremos "Agregar":
Cómo iconizar una aplicación C# en el área de notificación de Windows
En la propiedad "Name" de cada elemento de menú que añadamos estableceremos su valor adecuado para luego poder identificarlo. Por ejemplo para el menú "Mostrar aplicación" en la propiedad "Name" estableceremos "mnuMostrarAplicacion" y en la propiedad "Text" estableceremos el texto que se mostrará al usuario, por ejemplo "Abrir":
Cómo iconizar una aplicación C# en el área de notificación de Windows
De esta forma añadiremos todos los elementos del menú emergente que queramos que se muestren al pulsar con el botón derecho del ratón sobre el icono de nuestra aplicación:
Cómo iconizar una aplicación C# en el área de notificación de Windows
Ahora estableceremos el código C# para cada elemento de menú, para ello pulsaremos sobre el MenuStrip añadido mnuContextual, en la parte superior el asistente nos mostrará el menú contextual, haremos doble clic con el ratón sobre cada elemento del menú para añadir el código en su evento Click:
Cómo iconizar una aplicación C# en el área de notificación de Windows
Para el caso del elemento "Abrir" que será el que muestre la aplicación oculta en el área de notificación, añadiremos el siguiente código C#:
Cómo iconizar una aplicación C# en el área de notificación de Windows
        private void mnuMostrarAplicacion_Click(object sender, EventArgs e)
        {
            Show();
            WindowState = FormWindowState.Normal;
            Activate();
    iconizarApp.Visible = false;
        }

Básicamente el código C# anterior muestra la aplicación para que vuelva a aparecer en la barra de tareas, establece el valor WindowsState del formulario a "Normal", activa el formulario y oculta el icono del área de notificación.
De la misma forma añadiremos el código para el resto de elementos de menú, por ejemplo si hemos añadido la opción de cerrar la aplicación en el elemento de menú "Cerrar" el código podría ser:

        private void mnuCerrar_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

Una vez creado el menú emergente continuaremos configurando el componente NotifyIcon, para ello pulsaremos sobre él (aparece en la parte inferior del diseñador) y estableceremos las siguientes propiedades:
  • Name: nombre identificativo del componente, por ejemplo iconizarApp.
  • ContextMenuStrip: seleccionaremos el menú contextual añadido anteriormente mnuContextual.
  • Icon: podremos añadir un icono que será el que se muestre en el área de notificación o bien podremos establecer por código C# en tiempo de ejecución el icono de nuestra aplicación (así lo haremos más adelante).
  • Visible: estableceremos esta propiedad a "False" pues no queremos que se muestre el icono una vez ejecutada la aplicación si no cuando el usuario pulse un botón "Minimizar" o bien cuando minimice la aplicación.
Todas las propiedades anteriores se pueden establecer por código y así lo haremos como ejemplo:
Cómo iconizar una aplicación C# en el área de notificación de Windows
Si queremos que al pulsar doble clic con el ratón sobre el icono de nuestra aplicación, en el área de notificación de Windows, se vuelva a mostrar (por ejemplo), deberemos acceder a los eventos del componente "NotifyIcon" seleccionándolo y pulsando en el icono "Eventos" de la ventana de "Propiedades":
Cómo iconizar una aplicación C# en el área de notificación de Windows
En el desplegable del evento DoubleClick seleccionaremos el evento Click del elemento del menú que queramos que se ejecute, en nuestro caso mnuMostrarAplicacion_Click:
Cómo iconizar una aplicación C# en el área de notificación de Windows
Nota: si queremos generar código C# independiente para el evento DoubleClick del NotifyIcon haremos doble clic sobre dicho evento y nos mostrará la ventana de código desde donde podremos generar el código fuente que queramos para este evento.
Una vez configurado el componente "NotifyIcon" añadiremos un botón "Minimizar" a nuestra aplicación (o cualquier otro componente como un menú o desde un evento). Cuando el usuario pulse sobre dicho botón la aplicación desaparecerá de la barra de tareas, también desaparecerá del escritorio y se mostrará un icono el el área de notificación. Para conseguir esto, en el evento "Click" del Button:
Cómo iconizar una aplicación C# en el área de notificación de Windows
Añadiremos el siguiente código:
Cómo iconizar una aplicación C# en el área de notificación de Windows
        private void btMinimizar_Click(object sender, EventArgs e)
        {
            iconizarApp.Icon = this.Icon;
            iconizarApp.ContextMenuStrip = this.mnuContextual;
            iconizarApp.Text = Application.ProductName;
            iconizarApp.Visible = true;
            this.Visible = false;
        }

El código C# anterior asigna el icono del formulario al NotifyIcon para que éste aparezca en el área de notificación, asigna en tiempo de ejecución el menú contextual "mnuContextual" al NotifyIcon (no hace falta hacer esto si lo hemos asignado en el componente gráfico en tiempo de diseño), asigna como texto del NotifyIcon el nombre de la aplicación (texto que se mostrará al pasar el ratón por encima del icono), muestra el icono en el área de notificación y oculta la aplicación del escritorio y de la barra de tareas.
Si además queremos que cuando el usuario minimice el formulario nuestra aplicación se oculte en el área de notificación, en el evento "Resize" del formulario:
Cómo iconizar una aplicación C# en el área de notificación de Windows
Añadiremos el siguiente código C#:
Cómo iconizar una aplicación C# en el área de notificación de Windows
        private void formTwitter_Resize(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Minimized)
            {
                btMinimizar_Click(sender, e);
                iconizarApp.BalloonTipIcon = ToolTipIcon.Info;
                iconizarApp.BalloonTipTitle = Application.ProductName;
                iconizarApp.BalloonTipText = "La aplicación ha quedado ocultada " +
                    "en el área de notificación. Para mostrarla haga " +
                    "doble clic sobre el icono";
                iconizarApp.ShowBalloonTip(8);
            }   
        }
En el código anterior sería suficiente con "btMinimizar_Click(sender, e);" para llamar al procedimiento que oculta nuestra aplicación y muestra el icono en el área de notificación. Pero hemos aprovechado este ejemplo para indicar cómo mostrar un globo informativo en el área de notificación. Indicamos cada línea comentada:

                //Tipo de icono a mostrar el el globo informativo (Info, Error, None, Warning)
                iconizarApp.BalloonTipIcon = ToolTipIcon.Info;
                //Título del balón informativo (el nombre de la aplicación)
                iconizarApp.BalloonTipTitle = Application.ProductName;
                //Texto del balón informativo
                iconizarApp.BalloonTipText = "La aplicación ha quedado ocultada " +
                    "en el área de notificación. Para mostrarla haga " +
                    "doble clic sobre el icono";
                //Tiempo que aparecerá hasta ocultarse automáticamente
                iconizarApp.ShowBalloonTip(8);
Si además queremos realizar alguna acción cuando el usuario hace clic con el ratón sobre el globo informativo, añadiremos el código C# que queramos al evento BallonTipClicked del componente NotifyIcon (iconizarApp):
Cómo iconizar una aplicación C# en el área de notificación de Windows
Por ejemplo, si el usuario pulsa sobre el globo informativo la aplicación se mostrará, para ello añadiremos el siguiente código:
Cómo iconizar una aplicación C# en el área de notificación de Windows
        private void iconizarApp_BalloonTipClicked(object sender, EventArgs e)
        {
            mnuMostrarAplicacion_Click(sender, e);
        }
Ya podremos probar la aplicación, al pulsar el icono "Minimizar" aparecerá el icono de nuestra aplicación en el área de notificación y desaparecerá nuestra aplicación del escritorio y de la barra de tareas:
Cómo iconizar una aplicación C# en el área de notificación de Windows
Al pulsar con el botón derecho del ratón sobre el icono se mostrará el menú emergente:
Cómo iconizar una aplicación C# en el área de notificación de Windows
Y si minimizamos la aplicación:
Cómo iconizar una aplicación C# en el área de notificación de Windows
Nos mostrará el balón informativo y también se iconizará en el área de notificación:
Cómo iconizar una aplicación C# en el área de notificación de Windows

Fuente: http://www.ajpdsoft.com/
Si te ha parecido interesante podrías hacer click en +1, compartirlo en Facebook o Twitter, o dejar un comentario. ¡Gracias!.

2013/09/01

Reducir el tamaño del log de transacciones en SQL server

Una pregunta típica en servidores SQL que usan el modo de restauración FULL o BULK es cómo reducir el tamaño del log de transacciones cuando este crece de forma anormal en SQL server 2008 o superior.

Normalmente el log se reduce sólo cuando hacemos un backup pero hay ocasiones en que esto no es así
y el log crece y crece .
Para evitarlo y reducir de nuevo el log tenemos que ejecutar el siguiente script:
-usamos la base de datos ficticia devjoker2013BD
--Primero hacemos un backup completo de la base de datos para evitar perder la información del log
--en caso de restauración hasta un punto en el tiempo

BACKUP DATABASE devjoker2013BD
TO DISK = 'D:\SQLServerBackups\devjoker2013BD.Bak'
   WITH FORMAT,
      MEDIANAME = 'D_SQLServerBackups',
      NAME = 'Backup completo de devjoker2013BD previo al truncado del log';

GO
--cambiamos el modo del log de base de datos a SIMPLEALTER DATABASE devjoker2013BD
SET RECOVERY SIMPLE;
GO
-- Comprimimos el log a un sólo MB de tamaño
DBCC SHRINKFILE (devjoker2013BD_Log, 1);
GO

-- Volvemos a dejar el log en modo completo (o bulk logged si ese era el caso).
ALTER DATABASE devjoker2013BD
SET RECOVERY FULL;
GO


Nota: para que esta operación funcione al 100% es posible que tengamos que dejar temporalmente
la base de datos en modo monousuario (es decir sin acceso al mismo) 
para garantizar que no haya transacciones pendientes en el momento de hacer el truncado

En ese caso necesitaríamos un código como este:
USE devjoker2013BD;

GO

ALTER DATABASE AdventureWorks2012 SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO ALTER DATABASE AdventureWorks2012 SET READ_ONLY;

--Realizamos el backup y el truncado del logGO
ALTER DATABASE AdventureWorks2012 SET MULTI_USER;

Contrariamente a lo que podamos pensar a corto plazo no notaremos una mejora del rendimiento sino un empeoramiento ya que
tarde o temprano el log volverá a crecer hasta su tamaño optimo que supuestamente será menor que el tamaño anterior pero mayor de
1MB  que es el valor que especificamos anteriormente.
Una vez que el log tenga el tamaño optimo y no sobredimensionado si deberíamos notar una mejora del rendimiento aunque no siempre
será perceptible a simple vista.
Por esto último no deberíamos realizar esta operación como parte de un plan de mantenimiento sino cómo una operación puntual
cuando detectemos que el tamaño del log toma un tamaño exagerado y siempre después de un backup completo para evitar perdida de datos en caso
de tener que restaurar.

Fuente: http://www.devjoker.com/
Si te ha parecido interesante podrías hacer click en +1, compartirlo en Facebook o Twitter, o dejar un comentario. ¡Gracias!.

2013/06/25

Como escapar de PRISM, el sistema de espionaje de E.E.U.U.

k-bigpic

Hace unos días Edward Snowden, ex-técnico de la CIA hizo publico un sistema de espionaje masivo por parte del gobierno de los E.E.U.U., conocido como PRISM, de acuerdo con lo revelado, el gobierno estadounidense tiene acceso a la mayoría de las llamadas o datos de los usuarios de Internet.

prism-slide-4

Gracias a un proyecto llamando PRIMS-Break recopiló y publico herramientas Open Source cuyo objetivo es eliminar el espionaje de E.E.U.U. dentro de los proyectos más destacables que aparecen son:
Entre muchos otros, personalmente podría agregar:
La página oficial del proyecto es:
http://prism-break.org/

Visto en xora.org

2013/06/18

Guía para empezar a usar Tor

- The Onion Router, más conocido como Tor, es una herramienta que busca salvaguardar nuestra identidad en la red.
- En esta breve guía daremos una referencia sobre el uso sencillo de una red que garantiza un buen nivel de privacidad en nuestras conexiones. En esta ocasión queremos ofrecer los pasos más básicos para su empleo.

Navegación segura con Tor: Primeros pasos
Navegación segura con Tor: Primeros pasos

De manera recurrente, el protocolo Tor salta a primera línea de la información generalista casi siempre de manera negativa. Se habla de el uso menos ejemplar de esta red, como si el comportamiento delictivo fuera inherente no de los individuos sino de los instrumentos que emplean, y esto suele servir como excusa para los que pretenden erigirse en guardianes de una seguridad que siempre termina amparando algún negocio o intento de control ciudadano. Frivolizar a propósito de la web profunda y sacar algún ejemplo de pedófilos o narcotraficantes parece ser excusa suficiente para los que recurren al  argumento de la seguridad para justificar la censura o el espionaje.

Sin la  colaboracion de una serie de organizaciones e individuos, que ceden parte de su ancho de banda para encaminar las comunicaciones, esta red no sería posible. Cada vez somos más conscientes de que entidades gubernamentales y empresas acechan nuestras comunicaciones con diversos fines.  Legislaciones como CISPA, podrían significar el  fin de toda clausula de privacidad en empresas cuya razón social esté radicada en Estados Unidos, lo que significa prácticamente su totalidad.

Las inquietudes a propósito de noticias acerca de cómo nuestras comunicaciones pueden ser intervenidas se han visto reflejadas en muchos comentarios de nuestros lectores que apuntaban en la dirección de proteger su privacidad. Partiendo de la idea de ofrecer unas pautas sencillas para añadir una capa extra de protección y anonimato a nuestras comunicaciones hemos pensado en ofrecer esta pequeña guía. En ella emplearemos el paquete que incluye un navegador integrado y todas las herramientas esenciales.

Instalando Tor

La característica que hace más atractivo el uso de Tor es su capacidad de ofrecernos un nivel de anonimato a través de una red bastante grande sin demasiadas complejidades técnicas. La idea es que  cualquier persona sin excesivos conocimientos técnicos  pueda utilizar esta red para que sus comunicaciones se hagan difíciles de rastrear e intervenir. Para conseguir este objetivo inicial Tor ha desarrollado un software específico que funciona de forma integrada y sencilla.

En nuestra referencia, vamos a centrarnos en el paquete más sencillo que se nos ofrece. El paquete integrado  en una versión portable denominada   Tor Browser Bundle   que puede ser empleada en los principales sistemas operativos  Windows, Mac OSX  32 bit o  64 bit y Linux en versiones  32 bit y  64 bit. La principal ventaja que nos ofrece es la posibilidad de ejecutarlo desde cualquier lugar y poder llevarlo en nuestras memorias USB sin tener que prestar especial atención a configuraciones u otros aspectos.

Una vez descargado   Tor Browser Bundle, nos lo descomprimirá en el directorio que prefiramos. Una vez en este, veremos una serie de directorios y un ejecutable, en Windows " Start Tor Browser". Una vez ejecutado nos despliega un panel.

Navegación segura con Tor

Navegación segura con Tor

Vamos a describir el uso del navegador integrado. Este ya trae integradas varias herramientas que emplean una versión portable de Firefox, con el Panel de control Vidalia, HTTPS Everywhere (creado por la EFF) y  NoScript, que permite bloquear JavaScript Java y  Flash. Con ellas tendremos más que suficiente para garantizar unos niveles bastante elevados de seguridad en nuestra navegación sin que esta se vea entorpecida ni ralentizada.

Navegación segura con Tor 2

Navegación segura con Tor 2

Navegación segura con Tor 3

Navegación segura con Tor 3

Uso básico de Tor

Una vez incitado pulsado  Start Tor Browser, nos aparecerá el panel de control Vidalia. Mediante este panel tenemos acceso a los principales componentes de esta herramienta. De forma automática nos conecta a la red Tor y nos carga el navegador  Firefox portable incluido con todas las características que hemos indicado.

En la primera página que nos abre, veremos que se conecta a la web de Tor que comprueba si nuestra versión es correcta y está actualizada y nos muestra la IP que tenemos en este momento a través de su red. Desde este momento podemos navegar sin mayor problema. A pesar de esto debemos tener en cuenta que la mayor parte de  plugins, códecs y scripts que son empleados usualmente se encuentran desabilitados por defecto , por lo que partes generalmente accesorias de las páginas que visitemos a través de esta red pueden no aparecer.

Si nos animamos, podemos variar las configuraciones prefijadas para aumentar los niveles de filtrado o formar parte de la comunidad aceptando ser repetidor de otros. Incluso esta versión de Tor incluye herramientas para conocer qué pasarelas estamos empleando y qué ancho de banda nos ofrecen. Así podemos cambiar de conexión puente y obtener una nueva IP con solo pulsar “ usar nueva identidad”.  También podemos observar cuáles son y desde dónde comparten estos repetidores.

Navegación segura con Tor 4

Navegación segura con Tor 4

Navegación segura con Tor 5

Navegación segura con Tor 5

Las cookies son uno de los aspectos que quizás más tengamos que tener en cuenta. Si en nuestra navegación convencional no las hemos eliminado, la existencia de estos elementos puede revelar nuestra identidad al ser cargadas. Lo más recomendable es que los navegadores instalados estén configurados para eliminarlas. En caso de duda,  aplicaciones de limpieza como CCleaner las eliminarán antes de iniciar nuestra sesión con Tor.

Navegación segura con Tor 6

Navegación segura con Tor 6
Las cinco reglas usando Tor
  1. Usar el navegador Tor. Tener especial cuidado de no salir a la hora de pulsar en ciertos enlaces. Una vez fuera del entorno asegurado por Tor volvemos a estar expuestos.
  2. No habilitar ni instalar  ningún plugin. Por defecto envían y reciben información que puede no estar cifrada. Muchos de estos comprometen nuestra privacidad abiertamente.
  3. Usar las versiones seguras de todas las páginas mediante el protocolo HTTPS. Con ese encabezado deben ir siempre nuestras direcciones y si no lo brindan hay que forzarlas con HTTPS Everywhere que viene instalado en el paquete y utiliza el uso cifrado mediante  HTTPS. Para comprobarlo solo hay que observar en la barra de direcciones que siempre empiecen por    https://
  4. No abrir ningún documento descargado mientras tengamos conexión abierta. Documentos en formato DOC y PDF son muy susceptibles de contener enlaces y vulnerabilidades que pueden conectarnos a internet mediante una ruta no cubierta por Tor. La recomendación más sencilla es la de permanecer desconectados a la hora de abrir este tipo de ficheros.
  5. Tor emplea  conexiones-puente para dificultar el rastreo de IPs. Sin embargo, el uso de Tor sí que puede ser detectado. Cuanto más intermediarios haya entre la conexión de entrada y la de salida, los saltos que da nuestro paquete de datos hasta que llega al servidor final, más difícil será detectarlo. Por ello formar  parte de la red de puentes es una buena idea para facilitar a otros usuarios de la comunidad un acceso como el que queremos para nosotros mismos.
Para ampliar nuestro conocimiento

Aquí solo hemos apuntado las cuestiones más básicas. En internet existen multitud de recursos y lugares donde se nos explica de forma muy detallada el uso de Tor. La propia página del proyecto nos brinda las herramientas mas básicas para su uso. Asimismo, organizaciones activistas como la  Electronic Frontier Foundation o el  proyecto Security in a box nos brindan detallados tutoriales y herramientas complementarias para tener una experiencia más segura y controlada por nosotros mismos a propósito de nuestra navegación.

Existen múltiples herramientas como  Tails, una  distribución completa preparada para usarse como Live CD o con memorias USB e incluso una aplicación Android denominada  Orbot, muy recomendable si empelamos redes wifi  públicas.

Fuente: http://www.eldiario.es/turing/

2013/05/02

SQL Server – Creación de jobs para hacer copias de seguridad


En SQL Server existen 3 tipos de copias de seguridad:

1.- Completo:
Es el tipo de backup por defecto y hace una copia de seguridad completa de la base de datos, incluyendo el log de transacciones.

2.- Diferencial:
Guarda la información de la base de datos que ha cambiado desde el último backup completo. Son más rápidos ya que solo guardan los cambios desde un punto. Sin embargo como veis es recomendable tener al menos un backup completo a la semana.

3.- Log de transacciones:
Guardan las modificaciones de la base de datos, es decir, todas las operaciones que se realizan sobre los datos, inserciones, modificaciones, borrados… Son usados en el proceso de recuperación para restaurar una base de datos por completo en un momento concreto.
Una vez que ya conocemos los tipos de copias de seguridad disponibles, es el momento de elegir una estrategia de copia de seguridad para evitar desastres. SQL Server nos proporciona automatización de tareas a través de jobs. Estos funcionan parecidos a las tareas programadas de Windows. Podemos especificar pasos y controlar cada uno de ellos dependiendo de su resultado. Por supuesto se programan y esa será nuestra baza para crear un job que realice copias de seguridad según nuestro criterio. Para aquellos que no lo sepan los jobs no funcionarán si el servicio SQL Server agent está parado.

- Creación del job de copia de seguridad:
1.- Desde el explorador de base de datos pulsamos botón derecho sobre jobs (Éste cuelga del servicio SQL Server Agent)
SQL_1
2.- En la siguiente pantalla podremos dar el nombre a la tarea que queramos automatizar, así como definir los pasos, la programación de los mismos, configurar alertas y tipos de notificaciones. Seleccionamos pasos:
SQL_2
3.- Hacemos click en nuevo:
SQL_3
4.- Damos nombre al paso que estamos configurando, seleccionamos como tipo Transact-SQL script y copiamos el siguiente código en la ventana comando:
BACKUP DATABASE [DemoDB] TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\DemoDB.bak'
Por supuesto es totalmente personalizable, cambiar el nombre de la base de datos afectada por el backup así como también el path o localización física donde queremos almacenar nuestra copia de seguridad.
SQL_4
5.- Si todo fue como se esperaba tendremos un bonito pop-up indicando que todo ha ido bien. Si por el contrario algo sucedió, deberemos chequear donde está el problema.
SQL_5
Dicho esto, espero que les sea de utilidad.
Fuente: decabo.com

2013/02/15

Los dispositivos USB en la empresa y el posible riesgo de infección de malware

Riesgos del uso de dispositivos usb en la empresa-logo-1
Muchas de Las pymes están pagando un alto precio por la conveniencia y comodidad de utilizar las unidades USB. Hoy vamos a ver los dispositivos USB en la empresa y el posible riesgo de infección de malware. Y es que mientras los ataques maliciosos mediante el e-mail y otras vías, los ciberdelincuentes siguen recurriendo a las unidades USB para expandir y distribuir su malware.
Windows 7 y 8 ofrecen mucha más protección para hacer frente a estas unidades USB infectadas. Aunque Windows XP sigue siendo un sistema operativo muy utilizado en todo el mundo por las pymes, y el malware se aprovecha de la función de “Reproducción automática” para los medios extraíbles para “colar” el malware.

¿Por qué mi empresa puede ser vulnerable a este tipo de infección?

  • Como una manera alternativa para compartir información: y es que para el gerente de una pyme puede ser más fácil confiar en las unidades USB y ahorrarse los recursos y el tiempo necesarios para implementar otras soluciones, tales como trabajar en la nube.
  • La falta de seguridad: las pymes no suelen disponer de personal de TI dedicado ni disponen políticas para hacer frente al uso arriesgado de una memoria USB. Por ejemplo, un empleado se encuentra una unidad en el suelo de la oficina y, con toda su buena intención lo inserta en su equipo de trabajo para ver si puede saber quien es el dueño de la unidad. Alguien con fines maliciosos podría escribir un script en la unidad que una vez insertado se auto-ejecuta y va en busca de tu base de datos de clientes, contactos y de ventas de tu empresa para que cuando tenga la información deseada le sea enviada al ciberdelincuente.
  • Dejar una unidad USB en el puerto insertada: es posible que esta unidad USB este infectada con algún tipo de keylogger que es un tipo de software de vigilancia, considerado software espía que tiene la capacidad de registrar cada pulsación de teclado que realices en un archivo de registro. Así de esta manera con cada pulsación de teclado puede que estés expandiendo los archivos confidenciales de tu empresa y estar distribuyendolos por servidores de medio mundo. Y si tu empresa ha mejorado su sistema operativo, tu empleado podría estar trabajando en casa con Windows XP, así que seguiría siendo vulnerable

Conclusión

Las pequeñas y medianas empresas debéis tener muy en cuenta este asunto ya que es bastante serio y delicado. Yo pienso, que transmitir el malware mediante las unidades USB es más peligroso que las amenazas de correo electrónico o de otro tipo de malware de propagación.

Fuente: http://www.tecnologiapyme.com