Cross site scripting en ASP.Net

lunes, 28 de diciembre de 2009

Uno de los ataques más comunes en nuestras aplicaciones web (ASP.Net) es el XSS (Cross site scripting), consiste básicamente en inyectar código malicioso a través de los campos de formulario, que posteriomente se ejecuta en los navegadores cliente de forma transparente.

Microsoft proporciona una librería para mitigar este tipo de vulnerabilidades llamada Microsoft Anti-Cross Site Scripting Library(Anti-XSS).

Sobre esta librería la gente de OWASP ha construido otra llamada ESAPI.Net, la cual podemos descargar, junto con una aplicación de ejemplo de utilización, ubicada en Google Code(http://owasp-esapi-dotnet.googlecode.com/svn/trunk).

ESAPI.Net necesita que se descargue por separado la Anti-XSS, y también FxCop.

Más enlaces relacionados:
Anti-Cross Site Scripting Library


- FIN -

FSP: Flyweight Silverlight Pattern - Parte 2

lunes, 14 de diciembre de 2009

La cache de assemblies

Para lograr la cache de assemblies con SL, todas las ddls que componen o compondrán el proyecto se deben seguir los siguentes pasos:

  1. Cada assembly deberá tener un "strong name"
  2. Cada librería(.dll) deberá tener un fichero descriptivo "extmap"
  3. Una vez logrado esto se ha de activar la cache de assemblies en la propiedades del proyecto.

Generando el strong name

Propiedades del proyecto -> Signing


Hay que seleccionar el fichero snk a firmar o sino crear uno nuevo.


Si elegimos crear un fichero de firma, deberiamos indicarle un nombre y es recomendable también colocarle una contraseña.


Generando el fichero descriptivo "extmap"

Antes de generar el fichero descriptivo debemos compilar el proyecto y posteriormente obtener la "Public key token" de la dll resultante con la utilidad sn.exe.

La dll suele estar en C:\directorioProyecto\Bin\Debug\miproyecto.dll

Para obtener la "Public key token" hay que abrir una consola, preferentemente la del visual studio ya que suele contener todos los PATHs correspondientes cargados.


Una vez en la consola hay que colocarnos en el directorio de la dll y utilizar la utilidad sn.exe con el parámetro -T.



Imaginemos que la librería se llama System.Windows.Interactivity y su strong name es 31bf3856ad364c35, asi el fichero que debemos generar debe llamarse System.Windows.Interactivity.extmap.dll con el siguiente contenido:
<?xml version="1.0"?>
<manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <assembly>
    <name>System.Windows.Interactivity</name>
    <version>1.0.0.0</version>
    <publickeytoken>31bf3856ad364c35</publickeytoken>
    <relpath>System.Windows.Interactivity.dll</relpath>
    <extension downloadUri="System.Windows.Interactivity.zip" />
  </assembly>
</manifest>
Este fichero ha de estar dentro de la misma carpeta que la dll.

Activar la cache de assemblies del XAP
Finalmente en el proyecto principal (el shell en el caso de usar CAL) y todos los módulos que lo compondrán, hay que marcar la casilla "Reduce XAP size by using application library caching"



Esto acabará generando tantos ficheros .zip como referencias a librerías hayan con ficheros "extmap" tenga el proyecto, dentro de la carpeta ClientBin del proyecto web donde se aloje el control.

Advertencia : Todas las referencias de todos los módulos que componen la aplicación, han de estar referenciadas en el proyecto del Shell.

Enlaces relacionados:
Cómo: Usar el almacenamiento en caché de biblioteca de aplicaciones


- FIN -

FSP: Flyweight Silverlight Pattern

martes, 24 de noviembre de 2009

Normalmente el objetivo de desarrollar una aplicación RIA, esta es desarrollar una aplicación web, similar a una aplicación de escritorio, tanto en apariencia como en funcionalidad.

Para lograr esta apariencia y esta funcionalidad, las aplicaciones se componen de páginas y se nutren de imagenes, ficheros de recursos, librerías desarrolladas por nosotros y en algunos casos distintos componentes comprados a terceros.

Como ya es sabido, desarrollar una aplicación RIA con Silverlight genera un único fichero XAP, que aunque comprimido, lleva todos los ficheros necesarios dentro, por tanto estamos hablando de ficheros bastante grandes con tiempos de carga elevados. Y esto es buen problema!


FSP (Flyweight Silverlight Pattern)

Es una técnica para construir aplicaciones ligeras, de bajo acoplamiento y esta compuesta por la combinación de la caché de assemblies + CAL.

Por que "flyweight"? Por que se intenta reducir al máximo las dependencias redundantes de todos XAP que componen una aplicación construida sobre CAL.

Silverlight 3, trae consigo la posibilidad de utilizar una cache de assemblies, esto se traduce en que una aplicacion se puede dividir en diferentes librerias las cuales se pueden ir descargando a medida que se van necesitando.

Cómo: Usar el almacenamiento en caché de biblioteca de aplicaciones

Pero solo utilizar la cache de assemblies, a veces, es insuficiente y provoca ciertas carencias, por ello, si a esto sumamos CAL (Composite application library) como base para desarrollar aplicaciones pobremente acopladas; obtendremos unos assemblies bastante más ligeros, especializados y en consecuencia más rápidos de cargar.

En los siguientes post explicaré un poco más como conseguir aplicar FSP.

- FIN -

Documentacion de Silverlight 3 en Castellano

lunes, 9 de noviembre de 2009

Actualmente se puede descargar la documentación de SL3 en Castellano de la siguiente dirección:

Documentación de Microsoft® Silverlight™ 3 sin conexión
Documentación en castellano sobre conceptos de SL3, componentes iniciales que trae, tecnologías que lo componen.

Independientemente de la documentación anteriormente citada, el entorno de desarrollo debería estar compuesto de los siguientes elementos:

Silverlight Toolkit
Incluye código fuente, test unitarios, temas, ejemplos y documentación.

Unit Test Framework for Microsoft Silverlight
Silverlight Unit Test Framework (Microsoft.Silverlight.Testing) es una solución simple y extensible para realizar testing sobre nuestras aplicaciones hechas con SL.
Composite Application Guidance for WPF and Silverlight - February 2009
Es una guia que nos ayuda a diseñar y construir aplicaciones compuestas con WPF a un nivel empresarial (aplicaciones débilmente acopladas).

Microsoft® Silverlight™ 3 SDK
Descarga del SDK de SL3

Microsoft Enterprise Library 4.1 – October 2008 (.Net 3.5 y VS2008)
Es una colección de componentes software reutilizables, diseñados para asistir a los desarrolladores de software en tareas comunes como pueden ser: Caching, Cryptography, Data Access, Exception Handling, Logging, Policy Injection, Security, Validation, y Unity.
Hands-On Labs for Enterprise Library 4.1
Incluye laboratorios de Caching, Cryptography, Data Access, Exception Handling, Interception, Logging, Security, Validation, y Unity.

Guidance Automation Extensions - February 2008 Release
Guidance Automation Toolkit for Visual Studio 2008 - February 2008 Release

Guidance Automation Extensions for Visual Studio 2008 and Visual Studio 2008 Service Pack 1 Update (GAXP1409)
Web Client Software Factory - February 2008

Unity Application Block 1.2 for Silverlight - December 2008
Es un contenedor que nos permite aplicar IoC y DI en nuestras aplicaciones (similar a Spring), facilita la creación de aplicaciones débilmente acopladas, entre otras cosas nos evita crear objetos y nos proporciona unas factorias para hacerlo, permitiendo cambiar las dependencias en tiempo de ejecución.
Unity Application Block 1.2 Documentation for Visual Studio 2008

Using Prism Quick Start Kit for Silverlight 3
Conjunto de plantillas de proyectos para ayudarnos a implantar PRISM para SL.

Microsoft Expression Blend 3 SDK Con las librerias de este SDK podemos enchufar fácilmente comportamiento a los eventos de los objetos según el patron MVVM.

- FIN -

Sirviendo ficheros xml incompletos

martes, 3 de noviembre de 2009

Hoy me ha vuelto a salir un viejo error del cual no recordaba la solución.

Resulta que estoy sirviendo ficheros xml (que se generan dinámicamente) desde una página asp.net; pero en la descarga se me devuelve el fichero incompleto, normalmente se "pierde/o quita" el caracter de cierre del nodo raiz (>).

String sxml = builder.ConstruyeXML(obj);
Response.AddHeader("Content-Disposition", "attachment; filename=fich_" + id + ".xml");
Response.ContentType = "text/xml";
Response.Write(sxml);
Response.Flush();
Response.End();
La solución ha sido añadirle un retorno de carro al final del xml a devolver:
String sxml = builder.ConstruyeXML(obj) + "\r\n";
Es cutre, si!!! y no se si realmente es la forma mas efectiva, lo que si es seguro, es que funciona.

- FIN -

Sys.WebForms.PageRequestManagerServerErrorException 405

martes, 7 de julio de 2009

En mi proyecto actual estamos utilizando UpdatePanels y Web User Controls en una aplicación ASP.NET; y últimamente en mi máquina y alguna otra, han saltado unos popups en IE con un error 405.

Sys.WebForms.PageRequestManagerServerErrorException: An unknown error occurred while processing the request on the server. The status code returned from the server was: 405



La documentacion de Microsoft da diversas explicaciones variopintas, ninguna de ellas sin embargo solventa el problema.

La solución:

En mi caso fue ir al formulario del site.master y quitar el attributo action.

Antes
<form id="formMaster" class="miCss" action="#" runat="server">

Después
<form id="formMaster" class="miCss" runat="server">

Y ya esta, problema solucionado!

Gracias Marc!

- FIN -

Office Web Translation y Altavista

lunes, 6 de julio de 2009

Hace algún tiempo cree un Addin para Office 2007, el cual se encargaba de traducir textos entre diferentes idiomas utilizando los diferentes engines disponibles actualmente en Internet, en la configuarción por defecto viene Google, Altavista y OpenTrad (ingles-castellano-catalan .....otros)

Pero hoy me vengo a dar cuenta que la dirección web de traducción de babelfish ha cambiado y por tanto las traducciones dentro word no las hace.

Para solucionar este problema simplente en la parte de WebEngines se ha de actualizar la dirección de altavista a:

http://babelfish.yahoo.com/translate_txt?ei=UTF-8&doit=done&fr=bf-res&intl=1&tt=urltext&trtext=[#text#]&lp=[#langFrom#]_[#langTo#]&btnTrTxt=Translate

Y solo queda actualizar el valor del campo Tag contaniner a:

<div id="result"><div style="padding:0.6em;">

Esto último es devido a que utilizo técnicas de screen-scrapping para obtener la traducción y mostrarla en los formularios.

Y ya esta!!! problema solucionado.

El Addin para Office se encuentra en :

http://translationdictionar.codeplex.com/

- FIN -

Subversion para VS2005, VS2008 y VS2010

lunes, 22 de junio de 2009

Por fin!!! parece que el add-in para VS llamado ankhsvn ha alcanzado un grado de madurez aceptable (la última vez que lo probé fue hace 3 años).

http://ankhsvn.open.collab.net/servlets/ProjectProcess?pageID=3794

Haré unas cuantas pruebas más usando branch ....

Pero todo esto quiere decir que podre dejar de usar VSS y olvidarme de todos los problemas que lecturas fantasmas que me origina cuando modificamos muchos ficheros o hacemos refactoring sobre los proyectos .Net

- FIN -

Manejo de sessiones en ASP.NET

lunes, 15 de junio de 2009

Un artículo muy bueno que trata todos los aspectos del manejo de sessiones asp.net; sus tipos, configuración, balanceo de carga, granjas de servidores

Exploring Session in ASP.Net

Es sencillamente bueno y conciso.

- FIN -

VS 2010 y .NET 4.0

jueves, 4 de junio de 2009

Entrevista a Eric Nelson, el cual habla sobre VS2010 (la verdad poco), .Net 4.0, la tendencia C# y VB.NET de ir juntos en adelante, introducción a la programación de procesos en paralelo y finalmente conceptos de cloud computing (Azure).



Video original en inglés con transcripción

C# y VB.NET juntos

Visual Studio 2010 and .NET Framework 4 Beta (tiene enlaces de descarga)

- FIN -

Convirtiendo imagenes SVG a otros formatos gráficos con SharpVectorGraphics

lunes, 25 de mayo de 2009

SharpVectorGraphics es un proyecto open source basado en .NET, y tiene como objetivo hacer la vida mas fácil a las aplicaciones que desean usar gráficos SVG (ver, generar o manipular)

SVG es una especificación de gráficos vectoriales usando XML del W3C, permitiendo a las aplicaciones intercambiar gráficos fácilmente usando un formato común, pudiendose renderizar una sola imagen a cualquier tamaño sin perder calidad. Lamentablemente solo firefox ofrece la posibilidad de renderizarlos sin necesidad de ningún plugin adicional, mientras que por ejemplo para IE es necesario instalar un ActiveX como lo es el SVG Viewer de Adobe.

Una de las principales características que ofrece este framework es poder convertir imagenes SVG a otros formatos usando el motor de renderización GDI, a continuación coloco un snippet de esta característica.


private Bitmap SVG2Bitmap(string conteSVG) {
GdiRenderer renderer = new GdiRenderer();
renderer.ClearMap();

SvgWindow window = new SvgWindow(200, 200, renderer);
SvgDocument document = new SvgDocument(window);
renderer.Window = window;
window.Renderer = renderer;
document.LoadXml(conteSVG);
window.Document = document;

ISvgSvgElement svgEl = window.Document.RootElement;
window.InnerWidth = (int)svgEl.Width.BaseVal.Value;
window.InnerHeight = (int)svgEl.Height.BaseVal.Value;

renderer.Render(window.Document as SvgDocument);

Bitmap rasterImage = ((GdiRenderer)window.Renderer).RasterImage;
return rasterImage;
}

..........
Bitmap image = SVG2Bitmap(strConte);
image.Save("c:\\imagenTransformada.gif", ImageFormat.Gif);
..........


Después de hacer muchas pruebas con imagenes SVG complejas, que no todos los visualizadores actuales son capaces de renderizar, creo que este es un proyecto bastante maduro, pese a estar en una version Alfa desde el 2005, además creo que este framework suple la NO traducción del proyecto Batik de Apache para poder ser usado con NFop en lo referente a generar documentos PDF con imagenes SVG incrustadas.

Enlaces relacionados:
SharpVectorGraphics (aka SVG#)
SVG-Wiki

- FIN -

Creando aplicaciones con Prism V2

viernes, 22 de mayo de 2009

PRISM es la guia para crear aplicaciones WPF y Silverlight.

La suma total de tiempo de todos los videos es aproximadamente 1:10 minutos.

Video 1 (Creando el esqueleto)





Get Microsoft Silverlight



Video 2(composición visual)





Get Microsoft Silverlight



Video 3 (Implementando vistas y servicios)





Get Microsoft Silverlight



Video 4 (comunicación asíncrona)





Get Microsoft Silverlight



- FIN -

C# y VB.NET juntos

martes, 19 de mayo de 2009

Al parecer estos dos lenguajes de programación dejaran de andar por separado para empezar a andar juntos; el video dura aproximadamente 33 minutos.






Get Microsoft Silverlight




Después de este video creo que acabare haciendo algún pinito con F# :-)

- FIN -

No se pueden cargar archivos grandes cuando utiliza el control de servidor HtmlInputFile

jueves, 30 de abril de 2009

Normalmente cuando subimos ficheros a las aplicaciones ASP.Net utilizando el control HtmlInputFile, el servidor nos suele dar un fallo despues de haber realizado la subida del fichero.

Eso es por que el tamaño máximo por defecto en el servidor es de 4MB, para cambiar este valor hay que modificar el fichero Machine.config y colocarle el tamaño máximo deseado.



Bien, a lo mejor despues de este punto nos interesa poder consultar el tamaño máximo soportado utilizando código (desde código C# o VB.Net), para ello disponemos de la propiedad MaxRequestLength de la clase HttpRuntimeSection.

Enlaces relacionados:

http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.maxrequestlength.aspx

- FIN -

Como acceder a la session desde un HttpHandler

miércoles, 29 de abril de 2009

Por defecto todo Handler que implementamos en nuestras aplicaciones web no tienen acceso a la session, es decir en el contexto de la petición actual el IIS no carga los datos de la session (valga la redundancia).

Para hacer que la session sea accesible desde los Handlers, además de implementar IHttpHandler, también hay que implementar la interfaz IRequiresSessionState, la cual no tiene definido ningún método.


public class DownloadFideHandler : IHttpHandler,
System.Web.SessionState.IRequiresSessionState {

public void ProcessRequest(HttpContext context) {
...
}
public bool IsReusable{
get { return true; }
}

}



Enlaces relacionados:

http://msdn.microsoft.com/en-us/library/system.web.sessionstate.irequiressessionstate.aspx

- FIN -

Cambio de color de un control silverlight utilizando parámetros

lunes, 27 de abril de 2009

Si se quiere parametrizar los colores de nuestros controles Silverlight2, recibiendo los valores exadecimales por parámetro deberiamos seguir los siguientes pasos:


  1. Pasar el valor del color como parámetro como una cadena de texto

  2. Convertir esta cadena de texto en un color

  3. Asignar el nuevo color al control



Pasar el valor del color como parámetro como una cadena de texto y recogerlo

if (initParams.ContainsKey("ColorFondo")) {
ChangeBackgroudColor(initParams["ColorFondo"]);
}


Asignar el nuevo color al control

private void ChangeBackgroudColor(string colorHexadecimal) {
Color cc = HexStringToColor(colorHexadecimal);
this.contenedor.SetValue(Canvas.BackgroundProperty, new SolidColorBrush(cc));
}


Convertir esta cadena de texto en un color


///
/// Extract only the hex digits from a string.
///

public static string ExtractHexDigits(string input) {
// remove any characters that are not digits (like #)
Regex isHexDigit = new Regex("[abcdefABCDEF\\d]+");
string newnum = "";
foreach (char c in input) {
if (isHexDigit.IsMatch(c.ToString()))
newnum += c.ToString();
}
return newnum;
}


///
/// Convert a hex string to a .NET Color object.
///

/// a hex string: "FFFFFF", "#000000"
public static Color HexStringToColor(string hexColor) {
string hc = ExtractHexDigits(hexColor);
if (hc.Length != 6) {
return Colors.Transparent;
}
string r = hc.Substring(0, 2);
string g = hc.Substring(2, 2);
string b = hc.Substring(4, 2);
Color color;
try {
color = Color.FromArgb(100,
System.Convert.ToByte(r, 16),
System.Convert.ToByte(g, 16),
System.Convert.ToByte(b, 16));
} catch {
// you can choose whether to throw an exception
//throw new ArgumentException("Conversion failed.");
return Colors.Transparent;
}
return color;
}



Enlaces relacionados :

Paso de parámetros de inicialización a aplicaciones Silverlight 2


- FIN -

KOBE

lunes, 20 de abril de 2009

kit de recursos para la planificación, la arquitectura, y la ejecución de aplicaciones Web 2.0 y servicios utilizando la plataforma de Microsoft.

En su página se pueden encontrar una serie de videos introductorios junto con una aplicación de ejemplo.

http://msdn.microsoft.com/es-es/architecture/bb194897(en-us).aspx

- FIN -

Silverlight Shining

viernes, 17 de abril de 2009




- FIN -

Informe 2008

martes, 7 de abril de 2009

El día 1 de Junio del 2008 decidi incorporar google analytics a mis blogs de Java y .Net un poco para ver las visitas y los lugares desde los cuales se realizan.


En el blog .Net :

Los resultados arrojados por este es que IE fue el navegador mas utilizado con un 55%, seguido por firefox y otros de los cuales desconocia su existencia.





Se registraron 877 visitas de 28 paises. Por mi parte solo queda agradecer al Top 10 de paises visitantes que figuran en la siguiente imagen.





En lo que va del 2009 de momento hay registrados 1.054 accesos y 30 paises.


Enlaces relacionados :


Informe 2008 blog Java

- FIN -

Extracción de parametros de una URL

martes, 17 de febrero de 2009

Un problema que de cuando en cuando vuelve, es la extracción de los parametros de una URL cargada con el método GET, desde su propia página (utilizando javascript).

El siguiente método javascript, utilizando expresiones regulares, ayuda en la labor de extraer el valor de un parametro de la url.


function ExtraeParametroGet( parameterName ){
parameterName = parameterName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
var regexS = "[\\?&]"+parameterName +"=([^&#]*)";
var regex = new RegExp( regexS );
var results = regex.exec( window.location.href );
if( results == null )
return "";
else
return results[1];
}



Suponiendo que en la url tenemos es la siguiente :

http://../../../GoogleMaps.aspx?SearchLocation=calle%20barcelona


La forma mas adecuada de obtener la dirección recibida por parametro, desde el javascript de la página GoogleMaps.aspx, seria seria:

var paramValue = ExtraeParametroGet("SearchLocation");


- FIN -

Ejemplo de Cache para ASP.Net

jueves, 12 de febrero de 2009

El siguiente artículo detalla algunos aspectos básicos sobre el uso de la cache en ASP.Net

http://dotnetperls.com/Content/Cache-Examples-ASPNET.aspx

- FIN -

System.Xml.XmlException: Falta el elemento raíz

lunes, 9 de febrero de 2009

Si alguna vez os ha salido un fallo del tipo :

Detalles de la excepción: System.Xml.XmlException: Falta el elemento raíz.

Probablemente esteis cargado un XmlReader con un stream (XmlReader.Create(_fichero);), el cual previamente a sido leido por otra parte del código.


El fallo es muy simple, cuando se ha leido previamente el puntero queda al final del stream, por tanto hay que volver a posicionarlo al principio de este.

_fichero.Seek(0, SeekOrigin.Begin);
(_fichero es un System.IO.Stream)

- FIN -

Formatos de conversion a strings

miércoles, 21 de enero de 2009

Este documento tiene un listado con los diferentes tipos de formatos de salida que podemos aplicar a nuestros objetos.


Enlaces relacionados:
http://john-sheehan.com/blog/wp-content/uploads/msnet-formatting-strings.pdf



- FIN -