JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

Detener un Timer de ASP.NET AJAX

Los temporizadores (Timer) de las extensiones de AJAX para ASP.NET son muy útiles. Nos permiten ejecutar una determinada tarea cada cierto tiempo, provocando postbacks de la página  (tanto completos, como parciales) en intervalos regulares. Un único Timer colocado en la página puede conseguir que se refresquen todos los UpdatePanels disponibles o cada uno de manera individual. Lo habitual es colocarlos en la página y olvidarnos de ellos. Pero ¿qué pasa si queremos poder pararlos y activarlos a voluntad? La cosa tiene más complicación de la que parece a simple vista. Lo primero que se nos ocurre a cualquiera es que, dado que tiene una propiedad Enabled para activarlo y desactivarlo bastará con establecerla en False para conseguir el efecto deseado. Si lo hacemos desde un postback asíncrono enviado desde dentro de un UpdatePanel, ni se notará en la página, ¿no?. Lo malo de esta idea es que, simplemente, no funciona. El motivo es que en un refresco parcial de página, aunque s... [Más]

Compartición de recursos entre dominios: el estándar de la W3C

En mis tres anteriores post me centré en JSONP, la solución soportada actualmente por cualquier navegador para hacer llamadas a servicios JSON ubicados en dominios diferentes al actual (ver índice al final de este post). Ahora, tras quince dís sin tiempo para nada (con Codecamp y TTT para Microsoft por el medio), por fin saco un par de horitas para escribir esta últma parte de la serie, dedicada a los estándares. Las limitaciones del objeto XmlHttpRequest a la hora de hacer peticiones desde el navegador a páginas y recursos ubicados en otros dominios son de sobra conocidas. Ello ha hecho que los programadores busquen atajos para conseguir esta funcionalidad y saltarse esta barrera. Hasta ahora hemos visto cómo JSONP nos permite conseguirlo gracias al uso de la etiqueta <script>, y cómo se le puede sacar partido en muchas ocasiones. No obstante esta técnica tiene bastantes limitaciones: · Sólo ... [Más]

JSONP (yIII): Cuestiones de seguridad y ASP.NET rompiendo la compatibilidad en 3.5

En mis dos anteriores post (busca los enlaces al final de este post y leetelos antes si no lo has hecho) he estado hablando sobre la técnica de JSONP para consumo remoto de datos JSON entre dominios, algo a priori prohibido por el modelo de seguridad del navegador. Anteriormente comentaba que JSONP podría tener ciertos problemas de seguridad, y que para evitarlos en ASP.NET 3.5 se habían introducido cambios para paliarlos que rompían la compatibilidad con versiones anteriores. Voy a aclararlo ahora. El problema de seguridad tiene que ver con la obtención de acceso no autorizado a información privada que se comparte con JSON. Una de las técnicas habituales de securizar el acceso a los servicios, consiste en crear cookies encriptadas con una validez temporal limitada y asociadas a una sesión concreta. Esta técnica se utiliza de manera mayoritaria en los sitios Web actuales (como Facebook, Windows Live, o, como ya hemos visto, en la propia seguridad de ASP.NET). El problema de esta técn... [Más]

Operador triple-igual (===) en JavaScript

JavaScript es un lenguaje que, cuatos más años pasan, más de moda está. En los tiempos que corren, con las aplicaciones AJAX campando a sus anchas por todas partes está más presente que nunca, así que no viene mal un truco de vez en cuando (y pienso que en los próximos meses escribiré aún más sobre el tema). Hoy me he acordado del operador triple-igual o ===. Sí, estás leyendo bien, tres iguales seguidos. No contentos con el doble igual típico de C, C#, Java y otros lenguajes, también tenemos el triple. Este es un operador muy poco conocido en el lenguaje JavaScript y básicamente sirve para comparar la igualdad de dos objetos sin forzar la conversión automática de tipos. Es decir, que para que devuelve true los dos objetos además de representar el mismo valor deberán ser exactamente del mismo tipo subyacente. Así por ejemplo, vamos a comp... [Más]

Seguridad Web: Evitar ataques XSS con Cookies accesibles sólo desde el servidor

Una de las técnicas de hacking de páginas web más conocidas es la de Cross-Site-Scripting o XSS. Mediante esta técnica, las aplicaciones Web vulnerables pueden ser atacadas para multitud de propósitos: servir de zombies para atacar a otras Webs inundándolas con peticiones, ejecutar código en zonas de seguridad menos restrictivas (como la local) o, sobre todo, robar la identidad de los usuarios del sitio vulnerable. Ha sido utilizado tradicionalmente en combinación con correos electrónicos maliciosos para entrar en sitios Web protegidos suplantando la identidad de usuarios autenticados. En mi curso de Desarrollo de aplicaciones seguras y seguridad de .NET monto un ejemplo completo de cómo utilizarlo en un supuesto sitio de banca electrónica (muy mal hecha y vulnerable), para robar la sesión del usuario y entrar en su cuenta. Este robo de sesiones se basa en la obtención mediante XSS de la cookie de sesión de un usuario, enviándola a un servidor bajo el control del atacante. Éste al rec... [Más]

El atributo "defer" de JavaScript

La metodología clásica de creación de páginas Web recomienda que todos nuestros scripts se encuentren en la cabecera de la página. Está bien tener un orden pero realmente no es necesario. Es más, nadie nos dice que no podamos incluso tener varias cabeceras en la página, una por ejemplo, después de cerrar la etiqueta </body>, si queremos. Hay algunas aplicaciones que usan mucho JavaScript. Sobre todo ahora con el uso masivo de capacidades AJAX en las aplicaciones Web. Algunos de estos scripts son simples bibliotecas de funciones con decenas o cientos de ellas que lo único que hacen es retrasar la carga de página mientras son procesadas por el navegador, ya que éste no sólo carga cada Script sino que también lo interpreta y ejecuta a medida que lo va leyendo. En otros casos el script necesita tener acceso a todos los elementos de la página antes de poder actuar (es decir, el HTML de la página debe ser procesado por completo y el árbol DOM construido). Si lo colocamos en la cabecer... [Más]

Cómo permitir la desactivación de los botones de radio

Esto, que parece una tontería, no lo es en modo alguno. Cuando colocas un conjunto de botones de radio en una página Web con etiquetas de tipo <input type="radio">, al pulsar sobre cualquiera de ellos, éste queda seleccionado. Al pulsar sobre cualquier otro del mismo grupo, el primero se deselecciona ya que sólo uno de ellos puede estar seleccionado al mismo tiempo. Este es el comportamiento normal y esperado. Sin embargo hay un problemilla que mucha gente se encuentra que con sorpresa no pueden solucionar: ¿qué pasa si quieres desactivarlos todos una vez que ya hay alguno seleccionado?. Prueba por ejemplo esta página. Al abrirla pulsa en los botones de radio de cualquiera de los grupos que contiene. Ahora intenta deseleccionarlos. No funciona. Normalmente estos botones de radio se usan para dar a escoger entre varias opciones excluyentes entre sí, pero también puede darse la posibilidad de que la elección sea 'ninguna'. Lo que suele hacer la gente para solucionarlo es i... [Más]

Vídeo en Channel9 en Español: bibliotecas cliente de AJAX y JavaScript en Visual Studio 2008

Ya está disponible en Channel9 un nuevo vídeo que he hecho sobre las bibliotecas del lado cliente de AJAX y un montón d cuestiones relacionadas con JavaScript en Visual Studio 2008. Enseño a llamar a servicios Web desde JavaScript, cómo generar biblitecas .js con soporte para Intellisense en Visual Studio, y unas cuantas cosas más. Se ve con una calidad estupenda, pero debes ponerlo a pantalla completa usando el botón de la derecha que aparece en la parte de abajo cuando pasas por encima con el ratón (el que tiene las flechas en esta figura): Pulsa la imagen para ir la página del vídeo Puedes verlo en streaming directamente desde la página (necesitarás Silverlight 2.0) o bien descargártelo en diversos formatos: En la página podrás encontrar otros vídeos intereantes, muchos de los cuales los han hecho también otros tutores de campusMVP, como Unai Zorrilla, Bruno Capuano, o Alberto Población. Seguro que dentro de poco habrá alguno más de los míos, de los que os iré informando... [Más]

Vídeo en Channel9 en Español: Mejorar el rendimiento de la descarga de librerías Javascript

Ya está disponible en Channel9 mi vídeo sobre cómo optimizar la descarga de archivos .js en aplicaciones Web gracias a la característica específica incluida a tal efecto en el SP1 de .NET 3.5. Se ve con una calidad estupenda, pero debes ponerlo a pantalla completa usando el botón de la derecha que aparece en la parte de abajo cuando pasas por encima con el ratón (el que tiene las flechas en esta figura): Pulsa la imagen para ir la página del vídeo Puedes verlo en streaming directamente desde la página (necesitarás Silverlight 2.0) o bien descargártelo en diversos formatos: En la página podrás encontrar otros vídeos intereantes, muchos de los cuales los han hecho también otros tutores de campusMVP, como Unai Zorrilla o Alberto Población. Dentro de poco habrá alguno que otro más de los míos, de los que os iré informando aquí... ¡Qué os sea útil!

Permitir la cancelación de peticiones asíncronas AJAX

Una de las ventajas de AJAX, aparte de la posibilidad de simular interfaces de usuario tradicionales de una sola capa, es que sirve para lanzar desde el cliente tareas pesadas en el servidor mientras permitimos seguir trabajando a los usuarios en e la lado cliente (navegador). Pero ¿qué pasa si una tarea tarda demasiado y queremos permitir que nuestros usuarios la cancelen cuando quieran sin tener que esperar a que terminen? ASP.NET AJAX en sus extensiones de JavaScript contempla esta posibilidad de manera sencilla y nos proporciona una forma de conseguirlo con muy poco código. Por ejemplo, arrastra en un formulario Web un ScriptManager y un UpdatePanel. Dentro de éste último coloca una etiqueta y un botón. En el manejador del evento de pulsación del botón detén el hilo de ejecución durante unos segundos para simular una tarea que tarda mucho tiempo en ejecutarse y despues pon algo en la etiqueta para manifestar que se ha terminado la operación. Finalmente añade un control UpdateProg... [Más]