La historia de mis desventuras

Palabras más, palabras menos sobre desarrollo de software.

Error: Acceso a carpeta ‘/Reports’ en aplicación ASP.NET requiere autenticación

Posted by Jhonny López Ramírez en 13 enero 2013

Caso

Se publica una aplicación ASP.NET en un servidor IIS. Se configura para la aplicación el acceso de usuario vía Forms Authentication. El acceso a todas las secciones del sitio web obedece correctamente a las reglas de acceso, es decir, si es requerida la autenticación para acceder a un recurso el usuario previamente deberá proveer sus credenciales de acceso. Si la aplicación cuenta con una carpeta ‘/Reports’ el acceso a esta solicita credenciales de acceso no mediante la página de Login configurada sino mediante el formulario de autenticación estándar del navegador.

Causa

En el servidor que hospeda la aplicación está simultáneamente instalado Microsoft Reporting Services. Este está configurado para escuchar las solicitudes en el puerto 80 por defecto y su URL de acceso está establecida como http://localhost:80/Reports. Esta configuración causará que se intente ejecutar Reporting Services cada vez que se acceda a la carpeta ‘/Reports’ de nuestra aplicación con toda la parafernalia de autenticación que SSRS tenga definida, aunque nuestra aplicación no esté haciendo uso de SSRS para la ejecución y visualización de los reportes.

Solución

En caso de no hacer uso de Microsoft SQL Server Reporting Services, deshabilite la ejecución del Servicio accediendo a la consola de servicios (Inicio – Ejecutar – Escriba services.msc y presione Entrar).

Solución Alternativa 1

En las situaciones en las que no se pueda deshabilitar SSRS en el servidor, o que al hacerlo se presente un error 503 al momento de ejecutar la carpeta ‘/Reports’ de nuestra aplicación proceda de acuerdo a la solución alternativa: mediante la aplicación Reporting Services Configuration Manager (disponible en Inicio –> Microsoft Sql Server <versión> –> Herramientas de Configuración –> Reporting Services Configuration Manager) actualice la URL de acceso a SSRS como se muestra en la siguiente imagen:

image

Figura 1: Se ha modificado la URL de acceso de ‘Reports’ (original) a ‘SSreports’.

Solución Alternativa 2

En caso de no poder modificar la URL de acceso de SSRS, modifique el nombre de la carpeta ‘Reports’ de su aplicación o modifique el puerto de acceso bien sea de SSRS o de su aplicación.

Fuente

https://www.interworks.com/blogs/banderton/2010/01/05/mysterious-http-authentication-required-reports

Posted in Desarrollo de software | Etiquetado: , , , | Leave a Comment »

MembershipProvider y .Net Framework 4.0

Posted by Jhonny López Ramírez en 24 enero 2011

dotnet4logo
Caso

Decides implementar un proveedor de membresía (o pertenencia) propio para resolver la autenticación y autorización de tus sitios web por medio de información almacenada en una base de datos de terceros (Oracle, MySql, etc.) o de servicios que están publicados a través de WCF. Adicionalmente, tendrás varios sitios web que usarán esta autenticación así que decides crear un proyecto de tipo biblioteca de clases (Class Library) con Visual Studio 2010, es decir, .Net Framework 4.0.

Como siempre has obrado en estos casos, sabes que debes escribir un proveedor de membresía personalizado que herede de la clase MembershipProvider; antes de eso debes referenciar la dll System.Web que contiene el espacio de nombres System.Web.Security. Escribes un código similar a este:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Security;
using System.Web.Security;
using System.Configuration.Provider;
using System.Configuration;
using System.Web.Configuration;

namespace MyNamespace
{
    public class MyMembershipProvider : MembershipProvider

Te das cuenta que ni el intellisense ni una compilación logran reconocer a MembershipProvider como clase dentro del espacio de nombres System.Web.Security. Luego, en un proyecto web te das cuenta que MembershipProvider sigue estando en dicho espacio de nombres, lo cual aumenta la confusión.

Causa

En .Net Framework 4.0, la clase MembershipProvider, clase abstracta de la que deben heredar todos los proveedores de membresía ASP.NET personalizados, ha sido movida al ensamblado System.Web.ApplicationServices. Por defecto, los proyectos web en Visual Studio referencian dicho ensamblado, las bibliotecas de clases (Class Library) no.

Solución

Se debe referenciar en el proyecto de tipo biblioteca de clases (Class Library) el ensamblado System.Web.ApplicationServices. Después de esto se podrá hacer uso de la clase MembershipProvider del espacio de nombres System.Web.Security.

Posted in Desarrollo de software | Etiquetado: , , | 8 Comments »

Liberado Prism 4.0

Posted by Jhonny López Ramírez en 16 noviembre 2010

Recientemente fue liberada la versión 4.0 de Prism por parte de Microsoft Patterns & Practices.

Gg406140.pnp-logo(en-us,PandP.10).png

¿Qué es Prism 4.0?

Se trata de un conjunto de guías y bibliotecas destinadas al diseño y la construcción de aplicaciones de escritorio (WPF) o Web (Silverlight) ricas en experiencia de usuario, flexibles y fáciles de mantener. Parte de la implementación de patrones de diseño que se consideran claves en el desarrollo de este tipo de aplicaciones: una clara separación de conceptos y un escaso acoplamiento entre ellos.

Más allá del lanzamiento como tal, cabe destacar el compromiso que Microsoft y los miembros más activos de su comunidad tienen con Silverlight, plataforma cuyo futuro ha sido abiertamente cuestionado por la llegada de la próxima revisión del estándar HTML5. Aquí vuelve a dejarse en claro que Microsoft apuesta por Silverlight como ecosistema de desarrollo no solo para contenidos multimedia Premium sin también para aplicaciones de línea de negocio que requieren una rica experiencia de usuario en la web.

Leer el resto de esta entrada »

Posted in Desarrollo de software | Etiquetado: , , | 1 Comment »

Solución temporal a la reciente vulnerabilidad Zero-Day de ASP.NET

Posted by Jhonny López Ramírez en 18 septiembre 2010

Actualizado: La solución a esta vulnerabilidad ya ha sido liberada a través de Windows Update.

Recientemente se publicó una vulnerabilidad grave en las aplicaciones web desarrolladas con ASP.NET (MVC y WebForms). Dicha vulnerabilidad se encuentra en el API de criptografía de ASP.NET y puede ser explotada mediante ataques recurrentes enviando Requests erróneos al servidor que luego este, en los mensajes de error que devuelve, descifra parcialmente; si se envía una cantidad suficiente de mensajes y se analiza los resultados en los mensajes de error se pueden descubrir las claves de encriptación del sitio web y comprometer su seguridad al descargar, por ejemplo, el web.config del sitio, que puede contener información delicada.

Scott Guthrie, en su blog, ha publicado más información sobre la vulnerabilidad y ha ofrecido una solución temporal para evitar que los sitios actualmente publicados en ASP.NET sufran por esta vulnerabilidad. Me permito traducir dicha solución, la cual consiste en hacer uso de la cláusula customErrors del archivo de configuración, activándola y redirigiendo en caso de cualquier error a una única página, evitando así que se envíe, de vuelta, información importante al atacante.

En soluciones ASP.NET v1.0 a v3.5 la solución se vería así en el web.config:

<customErrors mode =On defaultRedirect=~/error.html />

Nota: La sección customErrors va dentro de la sección <system.web>.

Después de modificar dicha sección se agregaría una página error.html en el directorio raíz del sitio con un mensaje sencillo advirtiendo de un error y sin ofrecer detalles del mismo.

En soluciones ASP.NET v3.5 SP1 o superior la solución se vería así en el web.config:

<customErrors mode ="On" redirectMode="ResponseRewrite" defaultRedirect="~/error.aspx" />
Nota: La sección customErrors va dentro de la sección <system.web>.
Después de modificar dicha sección se agregaría una página error.aspx en el directorio raíz del sitio con un mensaje sencillo advirtiendo de un error y sin ofrecer detalles del mismo. 
Me permito agregar algunos consejos de seguridad en aplicaciones web ASP.NET:
  • Evitar almacenar información delicada en archivos de configuración del sitio si ésta no está encriptada.
  • Evitar, en lo posible, tener los archivos de configuración en el directorio raíz del sitio, para evitar que se prediga que están allí. Esto se puede modificar gracias a la cláusula configSource. Sin embargo, el archivo web.config que se propone en esta solución sí debe estar en el directorio raíz de la aplicación (en caso de que sólo esté esta solución en el web.config del directorio raíz, no olvidar encerrar el texto propuesto entre las etiquetas system.web).
  • Activar siempre la cláusula customErrors y personalizarla (por ahora como se propone en esta solución) para mostrar mensajes de error pre-procesados. Ya saben que una YSoD ofrece mucha información al usuario.
Finalmente, ScottGu ofrece una herramienta que nos permitirá descubrir si nuestros sitios web permitirían el ataque. El uso de esta herramienta, una vez descargada, se muestra en esta imagen:
command

Este script mostrará los sitios que carecen de la directiva customErrors o que la tienen configurada de forma tal que se permita el ataque.

Posted in Desarrollo de software | Etiquetado: , | Leave a Comment »

SQL Server 2008 Management Studio y VS2008 SP1

Posted by Jhonny López Ramírez en 29 agosto 2010

Yo había podido sobrevivir hasta ahora con SQL Server 2005 Express (y su Management Studio) en mis labores de desarrollo. Claro, había intentado instalar ya SQL Server 2008 Express pero siempre encontraba complejo el instalador. Recientemente me vi forzado a actualizarme dado que estaba ansioso por probar Visual Studio LightSwitch (estoy preparando una entrada con mis experiencias e impresiones sobre VSLS, pero ese no es el tema ahora). Entonces inicié de nuevo el proceso de instalación. Después de solucionar un par de conflictos en la instalación del motor de SQL Server 2008 Express intenté instalar el Management Studio para esta versión.

Pero me encontré con un error, bastante extraño por cierto. Al momento de ejecutar las reglas de instalación me topé con que no se superaba esta:

"Versiones anteriores de Microsoft Visual Studio 2008"

En inglés:

"Previous releases of Microsoft Visual Studio 2008"

Esta regla no se cumple cuando tienes Microsoft Visual Studio 2008 sin Service Pack alguno instalado. Pero yo estaba seguro de tenerlo instalado (lo había requerido para aspectos como Entity Framework), tanto que el mismo Acerca de me lo confirmaba:

image

Efectivamente, la versión 9.0.30729.1 SP se corresponde con el Service Pack 1 de VS2008. Pero pese a eso no se superaba la regla. Estuve consultando este error un par de horas hasta que me encontré con una solución interesante:

Se trata de ejecutar simplemente el instalador del Management Studio saltando la regla de verificación de versiones anteriores de Visual Studio.

Para hacerlo entonces:

  1. Ejecute la consola de Windows con privilegios de Administrador.
  2. Diríjase a través de la consola a la ruta en donde se encuentra el instalador del Management Studio.
  3. Ejecute la siguiente sentencia en la consola:

SQLManagementStudio_x64_ENU.exe /ACTION=Install /SkipRules=VSShellInstalledRule

En mi caso el instalador se llama SQLManagementStudio_x64_ENU.exe. Como verán, la clave se encuentra en el argumento SkipRules. Esto obligará a que el instalador del Management Studio no verifique esta regla:

image

Después de esto Management Studio se instalará correctamente. Cuidado, no se trata de abusar de este parámetro para saltar otras reglas. La idea es que la instalación sea lo más acorde a lo requerido posible. Recomiendo esta solución sólo cuando estén seguros de que, como en mi caso, tienen instalado el Service Pack 1 de Visual Studio 2008, para evitar complicaciones posteriores.

Posted in Tecnología | Etiquetado: | 12 Comments »

Corrección del rumbo

Posted by Jhonny López Ramírez en 28 junio 2010

Microsoft se convirtió, desde mediados de los noventas, en el objeto de odio y crítica por parte de un gran conglomerado de la industria del software y la tecnología. En algunos casos con razón, dadas sus desmedidas acciones contra la competencia. Y no sólo ese odio se reflejó en opiniones sobre su actuar en el mercado sino también en las difamaciones sobre la mayoría de sus productos. Entonces Windows se convirtió en uno de los peores sistemas operativos del mercado y varios de sus productos padecieron de la inquina, justificada a veces, de los usuarios especializados.

Y sí, Windows es inseguro. Internet Explorer es pedante y lento. Office es cerrado. Y podríamos seguir. Y es que Microsoft (como algunas otras empresas del sector) era capaz de vendernos una versión Beta de un producto al precio de su versión comercial, tanto así que Windows Millenium fue la beta de XP, Vista la de Seven, en fin.

También es cierto que Windows no es tanto inseguro como atacado (aunque esto parezca un juego de palabras) y apuesto a que otros sistemas operativos, al verse bajo los reflectores del éxito, serían igual de vulnerables. Y también es cierto que cuando a los usuarios se nos intentó vender mayor seguridad nos mostramos reacios (UAC, por ejemplo); claro, tener escoltas no debe ser del todo cómodo.

Sin embargo, de un tiempo para acá las cosas en Microsoft han cambiado un poco su matiz. De sacar vilipendiados productos ha pasado a hacer un buen trabajo y algunos de sus peores terrenos ahora son, digamos, lo bastante exitosos para hacer una competencia tanto para usuarios avanzados como usuarios neófitos. Claro que, es cierto, es muy probable que se hayan perdido espacios difíciles de recuperar.

Windows 7

Seguro, dinámico, bonito, funcional, el último sistema operativo de la marca Windows se ha convertido en una excelente credencial para mostrar puesto que ha acoplado la segura base de Windows Vista (no todo fue mal allí) con menores exigencias en términos de Hardware, que es lo que actualmente se espera por parte de los sistemas operativos de escritorio. Sus récords en ventas demuestran que pronto estará por encima de los demás del mercado (sólo le falta superar a Windows XP) y representa una oportunidad perdida para la competencia que pudo, dado el fiasco de Windows Vista, apropiarse de una tajada mayor.

Office 2010

La suite de productividad de Microsoft liberada este año es también otra evidencia del positivo rumbo que toma la empresa. Y no sólo porque sus funcionalidades y desempeño sean grandiosos sino porque además se pone al corriente de las tendencias en la industria: mucho más orientado al consumo de servicios en la nube que sus predecesores (y que sus competidores) y con aspectos que se acercan a ofrecer reales alternativas (incluso gratuitas) al usuario. Además han acoplado los ciclos de desarrollo que benefician tanto al consumidor como el productor al punto que hemos podido disfrutar de versiones previas a la comercial de manera gratuita; escuchan al usuario.

Pero no sólo en sus productos estrella se nota la nueva disposición de Microsoft a mejorar: podemos citar otros ejemplos; Internet Explorer en la versión 9 (que se encuentra en desarrollo y se ha ido mostrando a través de previas) será uno de los primeros navegadores (si no el primero) en integrar aceleración por hardware y el estándar HTML5 además de que se acerca a satisfacer benchmarks como los de Sun Spider (para JavaScript) o los tests de Acid (para css y html). O Microsoft Security Essentials, gratuito y que está al nivel de los mejores antivirus (tanto los de pago como los de uso libre) en detección de amenazas para el usuario. O la nueva versión de Windows Live: mucho más social, con mayor presencia en la web y además gratuita. Y también Visual Studio 2010, Silverligth 4, Expression 4, y todo el ecosistema de desarrollo de aplicaciones que son, francamente, una mejora invaluable en la experiencia de uso para los desarrolladores de software. Esperemos a ver qué trae Windows Phone 7.

Podemos concluir diciendo que esa corrección del rumbo de la que hablo se manifiesta en 3 frentes: seguridad, mayor presencia en la web y una mayor disposición a poner al servicio de los consumidores herramientas gratuitas (e incluso algunas veces open source).

Dejo aquí algunos enlaces interesantes para sustentar mi opinión.

Windows 7 y su ascenso en la cuota de mercado.

Office 2010.

Internet Explorer 9.

Microsoft Security Essentials.

Posted in Tecnología | Etiquetado: | 8 Comments »

La informática del futuro – Reflexión

Posted by Jhonny López Ramírez en 6 mayo 2010

Recuerdo la percepción que tenía en mi niñez de lo que sería el futuro. Un poco inspirado por las películas que veía y en las que mostraban lo que sería el mundo a estas alturas. Computadoras que sostenían conversaciones fluidas con seres humanos, robots con comportamientos similares a los de las personas, el auto fantástico y una serie de gadgets haciendo una y otra cosa aquí y allá. Cuanto tuviera 26 años, pensaba, ya debería tener un carro que volara. Hoy tengo esa edad y ni los carros vuelan ni yo tengo uno que se arrastre siquiera; no es que esté triste por ambas cosas pero creo que están tardando en suceder.

Ahora que ya estoy en lo que, para entonces, era el futuro veo que quedan muchas cosas por hacer. Que la innovación aunque presente, muy presente, en el presente dista un poco de lo que se prometía en la ciencia ficción de ochentas y noventas. Todo esto en lugar de decepcionarme me parece excitante pues aún quedan caminos por recorrer y me siento joven y dispuesto a lo que venga. Quiero participar de ello, de hacer el futuro, de construir aplicaciones y sistemas y robots, etc., que hagan nuestra vida muchísimo más amigable. En ese sentido apuntan los grandes en la informática y otras áreas y quiero estar en primera plana, con las botas puestas, “cuando estalle la guerra estaré en la trinchera contigo”.

Todo esto viene a cuento debido a varias cosas, entre ellas que viendo a lo que apuntan elementos innovadores como las pantallas táctiles, el reconocimiento de rasgos y gestos humanos, lo que se rumora que será Windows 8, lo que será el Proyecto Natal, en fin, frente a todo eso he tenido momentos de escepticismo. No porque no crea que son geniales, no. Simplemente porque día a día te vas internando en tu trabajo y lo que haces puede tornarse repetitivo y ves el software corporativo tan distante de ello, como anclado aún al ratón y al teclado, a las grillas, a las listas desplegables, en fin. Y todo eso sientes que pasará de largo frente a lo que haces a diario: software para el trabajo. Luego he leído una interesante entrada en el blog de Jaimir Guerrero y me he sentido repentinamente viejo puesto que asumía posiciones lejos de lo que yo mismo en la niñez contemplaba como emocionante, como el futuro.

Así que he decidido sacudirme las telarañas y prometerme que seré parte de dicha evolución, que estaré en el equipo de los que transformen el mundo y que hagan del software corporativo (y el software en general) una realidad que supere la ficción. Estoy joven (de nuevo) y dispuesto.

Posted in Desarrollo de software | Etiquetado: | 1 Comment »

Breve Autocomplete Helper con ASP.NET MVC y jQuery

Posted by Jhonny López Ramírez en 16 marzo 2010

Han pasado ya varios días desde la última vez que escribí algo en el blog. Escaso tiempo. Vengo hoy con un pequeño Helper construido para hacer las veces de Autocomplete en ASP.NET MVC. Se trata de un ejemplo sencillo basado en un práctico jQuery Autocomplete (que pueden descargarse de aquí).

Una vez he descargado el paquete paso a descomprimirlo y a pegar los archivos claves en las rutas correspondientes, como muestro en la siguiente imagen:

2

Lo siguiente que haré será crear el HtmlHelper para automatizar el proceso de escritura de la función que hará la gracia. Para hacerlo tengo que disponer de una clase con los modificadores de acceso public y static y dentro un método de extensión a la clase HtmlHelper. Pongo aquí el código:

using System.Text;

using System.Web.Mvc;

 

namespace AutoCompleter.Helpers

{

    public static class MyHelpers

    {

        public static string AutoCompleter(this HtmlHelper helper, string name, string controller, string action, string fieldName, bool mustMatch)

        {

            StringBuilder html = new StringBuilder("<script type=\"text/javascript\">");

 

            html.Append("$(document).ready( function() {");

            html.AppendLine("$('#" + name + "').autocomplete('/" + controller + "/" + action + "/', {");

            html.AppendLine("dataType: 'json',");

            html.AppendLine("parse: function(data) {");

            html.AppendLine("var rows = new Array();");

            html.AppendLine("for(var i=0; i<data.length; i++){");

            html.AppendLine("rows[i] = { data:data[i], value:data[i]." + fieldName + ", result:data[i]." + fieldName + " };");

            html.AppendLine("} return rows;},");

            html.AppendLine("formatItem: function(row, i, n) {");

            html.AppendLine("return row." + fieldName + ";},");

            html.AppendLine(" width: 300, mustMatch: " + mustMatch.ToString().ToLower() + " , });});</script>");

 

            return html.ToString();

 

        }

    }

}

 

Leer el resto de esta entrada »

Posted in Desarrollo de software | Etiquetado: , | Leave a Comment »

Despliegue de aplicaciones Web con Visual Studio 2010 – MSDeploy

Posted by Jhonny López Ramírez en 21 febrero 2010

Una de las mejoras importantes que incorpora Visual Studio 2010 está relacionada con el despliegue de aplicaciones web. Es importante desde múltiples perspectivas pero yo citaré una que proviene de mi experiencia. Como desarrolladores algunas veces nos abstraemos del trabajo de la configuración e instalación de las aplicaciones que desarrollamos, pero en diversos escenarios ocurre que los roles no están tan definidos y tenemos que abarcar todo el ciclo de desarrollo y distribución de nuestras producciones y es allí donde a veces tenemos dolores de cabeza por horas de errores que casi no comprendemos.

Puesta esta situación vamos a mostrar escuetamente una de las nuevas técnicas de despliegue de aplicaciones que vienen empaquetadas en Visual Studio 2010: MSDeploy. Para ello he creado una pequeña aplicación Dynamic Data que no interesará mucho para los propósitos de esta entrada, salvo como elemento de laboratorio.

Trabajando entonces en nuestra aplicación ASP.NET vamos a configurar un perfil de despliegue para la misma basado en MSDeploy. Para hacerlo vamos a ir al menú Build y seleccionaremos de allí la opción Publish <nombre del proyecto>. O podremos dirigirnos directamente al menú Publish de nuestra barra de herramientas:

1

Seleccionaremos la opción Create Publish Settings – <New> y aparecerá el siguiente cuadro de diálogo:

2

En primer lugar tendremos el nombre del perfil de publicación y adicionalmente las siguientes opciones:

  • Publish method: Podremos escoger entre Web Deploy, FTP, File System y FPSE. Para este caso usaremos Web Deploy.
  • Service URL: Hace referencia a la ruta en la que se publicará el archivo de despliegue de la aplicación en el servidor de aplicaciones. Para este ejemplo he puesto http://localhost/DDEWA/MsDeploy.axd (previa configuración de dicha ruta en mi IIS).
  • Site/application: Se refiere al nombre del sitio en el Internet Information Services. Incluso puede especificarse una estructura de subdirectorios en este parámetro. En mi caso he puesto DDEWA/Test.

Podemos también marcar la aplicación como IIS en el destino y especificar que no se borrarán archivos adicionales en las carpetas publicadas una vez hagamos re-publicación. También, si se ha configurado acceso restringido a las carpetas virtuales de publicación en el servidor podemos especificar las credenciales del usuario autorizado. Usaremos el botón Save de este cuadro de diálogo para almacenar este perfil.

Leer el resto de esta entrada »

Posted in Desarrollo de software | Etiquetado: , , | 17 Comments »

“Hola mundo”, en vivo desde Visual Studio 2010 RC1

Posted by Jhonny López Ramírez en 14 febrero 2010

Hoy por fin tuve algo de tiempo libre para instalar el Release Candidate 1 de Visual Studio 2010. Esta entrada es meramente documental y no supone muchos detalles técnicos. Simplemente emborrono cuartillas.

Impresiones sobre la instalación

Es probable que sea una mera impresión, pero fue más rápida la instalación de VS2010 que la de sus antecesores. No hice una métrica seria al respecto puesto que hacía otras cosas al tiempo pero me pareció bastante más rápido el proceso.

 

Requirió reiniciar el equipo después de la instalación del Framework (4.0 RC1) y experimenté un pequeño contratiempo después de hacerlo: había descargado el ISO para la instalación y lo monté en una unidad virtual; al reiniciar el equipo no se montó automáticamente el ISO en la unidad virtual, como era de esperarse, haciendo fallar al instalador que continuaba su proceso. Afortunadamente el mensaje de error ofrecía la opción Reintentar y después de montar de nuevo la imagen en la unidad continué con el proceso.

ErrorUnidad

 

Leer el resto de esta entrada »

Posted in Desarrollo de software | Etiquetado: | Leave a Comment »