Proveedores de Alojamiento (Hosting): myLittleAdmin, una herramienta para SQL Server via Web

Uno de los clientes, tiene alojada su Web en un proveedor de Hosting, el proveedor te da la opción de conectarte directamente desde un SQL Management Studio a la base de datos remotamente.

Pero que pasa si, por alguna razón:

  • No tenemos instalado SQL Management Studio
  • Estamos en la partición Linux y hay un problema que resolver
  • Estamos en algún cliente y sólo tenemos acceso a internet
  • Da mucha lata levantar la virtual con las herramientas “Developer Ranger”

Pero por suerte, si nuestro proveedor soporta myLittleAdmin estamos salvado. Antes de todo, unos screenshots unas pantallas:

1. Modelo de Objetos

2. Crear una tabla

3. Crear un Registro

4. Hacer un “Abrir Tabla” (Open Table)

 

myLittleAdmin, es una herramienta como SQL Management Studio pero vía Web, es como el phpMyAdmin de MySql. Debido al costo de licencia su mayor ventaja se da en los proveedores de hosting. Si hay dos proveedores de hosting de ASP.NET y sólo uno de ellos soporta myLittleAdmin, es altamente recomendable que seleccionen el que soporta myLittleAdmin.

Enlaces myLittleAdmin:

P.D.: No hay beneficio por recomendar esta herramienta, lo cual si sucediera no me enojaría, es sólo que me gusto y a veces prefiero usar esta en lugar del SQL Management Studio.

Saludos,

Reciente vulnerabilidad de ASP.NET y BlogEngine.Net

Vamos a listar las noticias en orden cronológico, para intentar entender la vulnerabilidad:

Y así estamos…

Si no quieren leer todos los enlaces, el resumen de David Salgado sobre la vulnerabilidad:

En resumen… explota una vulnerabilidad relacionada con el algoritmo de cifrado que se utiliza en la autenticación por Forms. Va probando diferentes entradas y detectando la diferencia de respuesta de la aplicación para aprender y finalmente dar con una clave que da acceso.

Y si no queda claro aún, puede ver el video con la demo completa. Y la solución que se tiene ahora, pasa por evitar “responder” a los intentos de usar esta vulnerabilidad. ¿Cómo?. Evitar que los atacantes obtengan información usando los errores personalizados de ASP.NET (customErrors element, web.config).

 

La vulnerabilidad y BlogEngine:

No hay una respuesta oficial de BlogEngine, pero podemos hacer lo siguiente (para dormir tranquilos) hasta tener alguna respuesta oficial. Referencia: The Asp.Net Vulnerability and DotNetBlogEngine.Net.

1. Cambiar el elemento customErrors en el archivo web.config:

   1: <customErrors mode="RemoteOnly" defaultRedirect="~/error404.aspx" />

   2:    <error statusCode="404" redirect="error404.aspx" />

   3: </customErrors>

Por el siguiente:

   1: <customErrors mode="On" redirectMode="ResponseRewrite" 

   2:      defaultRedirect="~/fail.aspx" />

2. Crear la siguiente página ASPX, y subirla a la carpeta root de BlogEngine:

   1: <%@ Page Language="C#" AutoEventWireup="true" %>

   2: <%@ Import Namespace="System.Security.Cryptography" %>

   3: <%@ Import Namespace="System.Threading" %>

   4:  

   5: <script runat="server">

   6:    void Page_Load() {

   7:       byte[] delay = new byte[1];

   8:       RandomNumberGenerator prng = new RNGCryptoServiceProvider();

   9:  

  10:       prng.GetBytes(delay);

  11:       Thread.Sleep((int)delay[0]);

  12:         

  13:       IDisposable disposable = prng as IDisposable;

  14:       if (disposable != null) { disposable.Dispose(); }

  15:     }

  16:   < /script>

  17: <html>

  18: <head runat="server">

  19:     <title>Error</title>

  20: </head>

  21: <body>

  22:     <div>

  23:         An error occurred while processing your request.

  24:     </div>

  25: </body>

  26: </html>

A estar pendientes en estos días, para ver que pasa con esta vulnerabilidad.

 

Saludos,

[Ejemplo] Usando la API Apache Log4Net

Estaba dando mantenimiento a un proyecto que fue desarrollado con Java (Struts), y en el  código vi el uso de la API Apache Logging Services, puntualmente log4j, para registrar información de rastreo en un archivo.

Pero también hay una versión .Net de esta API: Log4net. Existen muchos otras APIs similares, hay para todos los gustos y colores. En esta entada mostraremos como usar la mencionada API:

Después de descargar Log4Net, y extraer el contenido hacemos lo siguiente:

1. Agregamos la referencia a nuestro proyecto (VS2005, VS2008, VS2010):

 

2. Configuramos que tipo de proveedor vamos a usar para guardar la información, puede ser un archivo de texto, SQL Server, Oracle, enviar emails, entre otros. Son dos partes principales: la declaración de la sección, y la definición de la sección misma. Si queremos agregar proveedores usamos el elemento appender:

   1: <?xml version="1.0"?>

   2: <configuration>

   3:   <configSections>

   4:     <section name="log4net" 

   5:              type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />    

   6:   </configSections>

   7:   <log4net>  

   8:     <root>

   9:       <level value="ALL"/>

  10:       <appender-ref ref="AdoNetAppender" />

  11:     </root>

  12:     <appender name="FileAppender" 

  13:          type="log4net.appender.FileAppender">...</appender>

  14:     <appender name="AdoNetAppender" 

  15:         type="log4net.Appender.AdoNetAppender">...</appender>    

  16:   </log4net>  

  17: </configuration>

3. Escribimos el código para guardar los mensajes:

   1: class Program

   2:   {

   3:  

   4:     static void ConfigureLog()

   5:     {

   6:       //Configurar Log, de acuerdo a la archivo app.config

   7:       log4net.Config.XmlConfigurator.Configure();          

   8:     }

   9:  

  10:     static void Main(string[] args)

  11:     {

  12:       //SET UP, Configure Log

  13:       ConfigureLog();

  14:  

  15:       log4net.ILog logger = log4net.LogManager.GetLogger(typeof(Program));

  16:  

  17:       logger.Debug("Here is a debug log.");

  18:       logger.Info("... and an Info log.");

  19:       logger.Warn("... and a warning.");

  20:       logger.Error("... and an error.");

  21:       logger.Fatal("... and a fatal error.");

  22:  

  23:       Console.WriteLine("END --- PRESS ENTER");

  24:       Console.ReadLine();

  25:     }    

  26:   }

4. Log en archivo de texto: , Log en Base de datos:

 

Nota: Para el tipo FileAppender, podemos establecer el patrón de como se guardará la información:

   1: <appender name="FileAppender" type="log4net.appender.FileAppender">

   2:    <param name="File" value="C:tempmiPrimerLog4Net.txt" />

   3:    <param name="AppendToFile" value="true" />

   4:    <layout type="log4net.Layout.PatternLayout">

   5:      <param name="ConversionPattern" value="%d [%t] %-2p %c [%x] - %m%n" />

   6:    </layout>

   7: </appender>

¿Ustedes qué usan para el Logging, alguna API pública o tienen sus propias clases?

Enlaces relacionados:

Saludos,

ScrumPeak (y una chiquita sobre ASP.NET MVC en IIS)

Como no andamos con mucho tiempo, vamos a hacer breves:

ScrumPeak, es una Aplicación Web para el seguimiento de proyectos con la característica que soporta Scrum. Para que tengan una idea de lo que se puede hacer con la web, dejo la siguiente pantalla:

http://sergiot2.com/blogimages/2010/09Sep/07_ScrumPeak.JPG

Por otro lado, la aplicación Web fue desarrollada con ASP.NET MVC, y si están en una versión de Windows que no tiene IIS 7 en modo Integrado, deben seguir algunos pasos adicionales para permitir la ejecución de la Web.

En este caso de ScrumPeak, como no disponemos del código fuente, la mejor opción sería habilitar que el mapeo todas las solicitudes del usuario sean hecho por asp.net, para lo cual, hacemos lo siguiente:

http://sergiot2.com/blogimages/2010/09Sep/07_ASP.NET_MVC_IIS_XP.JPG

Esta opción de habilitar el mapeo en el IIS no es recomendable porque afecta el rendmiento de la aplicación. Asumiendo que el portal será para uso interno, de equipos pequeños y estará en el servidor de desarrollo, no debemos notar esto. En una Aplicación Web para toda la internet, esta decisión no debe ser la primera.

Algunos enlaces relacionados:

 

Saludos,