SignalR 3 de 1

A muchos de vosotros os puede parecer gracioso el título y otros muchos pensareis que Pedro se ha equivocado y quería poner como titulo “SignalR 1 de 3”.

Otro buen titulo podría ser “Fernando III y la reconquista de Ubeda” alguno me va a entender

Pues no, no me he equivocado simplemente es que quiero escribir de SignalR al revés y dando prioridad a lo más importante.

Que SignalR es una gran framework, librería,etc magnífico. No se lo voy a discutir a nadie, lo que si voy a discutir es la grandiosidad de una línea y las cosas que pasamos por alto y que a la postre nos pueden hacer más daño del que nos podemos imaginar.

Aclarado el título y demás vamos manos a la obra y para ello que mejor ejemplo que un sistema de notificaciones. Os describo brevemente los requisitos del sistema.

Nuestro gerente nos dice al equipo de programación que todos los miembros de la empresa tienen que tener conocimiento de los movimientos de la competencia en tiempo real. Yo que me declaro “Fernando III(programador oxidado)”

Le digo que fácil no es y que hay que estudiarlo muy detenidamente.

Claro el jefe como buen jefe lo que hace es apretar y apretar hasta que evidentemente salta la voz del programador moderno, ese que todo lo que le cae en sus manos es bueno y magnífico.

Su respuesta es inmediataSonrisa lo hacemos con SignalR y Jquery en dos horas y así cada uno de la empresa puede conocer a la competencia en tiempo real. Que pasa en ese momento, que los programadores oxidados nos ponemos en Sleep(hasta el infinito y dejamos trabajar).

Efectivamente gracias a las bondades de SignalR y Jquery el programador modernista hace lo siguiente.

Un Hub de SignalR, permíteme Luis que coja tu código de este magnifico ejemplo cpu-monitor que me ayudo a decir, voy a mirar SignalR por primera vez. Y también te pido permiso para que lo pueda dejar con este aspecto para ver el ejemplo del post.

image

Que si señores que solo necesito eso a nivel de servidor mas el Startup de Katana/Owin donde indico que quiero trabajar con SignalR.

image

Por último un controlador mvc con una línea y una vista muy sencilla que se encarga de toda la magia.

Metodo del controlador.

image

Vista.

image

Y evidentemente el resultado es el esperado por el más optimista y moderno del equipo.

image

No dos horas, en menos de 10 minutos acabo de montar lo que me comento el gerente y ahora si que tengo claro que me sube el sueldo, vamos ni 50 líneas de código y eso que les parecía de estudio, jejeje ya lo tenemos.

Vamos que no tengo abuela y soy un “Crack”

Después de todas estos logros conseguidos por el “programador moderno” y la conversación con el gerente llega al departamento eufórico y enseñándoselo a todo el mundo.

Ahora empieza el momento de Fernando III, que sin más le dice “chavalote buen trabajo”, luego lo miro.

Lo primero que le llega a la cabeza a “Fernando III” no es otra cosa que probar si SignalR tiene algún tipo de prevención AntiXss y rápidamente se da cuenta que evidentemente no cumple con el patrón “Cuidadín”

No dice otra cosa que tengas prevención por lo que te entra que una vez dentro el mal ya está hecho y poca solución tiene.

Primer principio que no cumple SignalR actúa al contrario, todo lo que llega es bueno y por tanto lo devuelvo. Y siempre será tu obligación validar las entradas, puesto que no existe ningún mecanismo automático, quizá ese no sea su cometido, pero si el tuyo.

Con lo cual que hace en ese momento Fernandito, harto de escuchar todos los días que cosa tras cosa, todo es maravilloso. Rápido va a enviar esta cadena al resto de la empresa y quiere ver que pasa.

 

<a href="data:text/html;base64,

PHNjcmlwdD5hbGVydCgnaG9sYSBzb3kgZmVybmFuZ

Gl0byB5IG5vIHNhYmVzIGxvIHF1ZSB0ZSBoYSBjYWlkbyB

tb2Rlcm5pdG8nKTwvc2NyaXB0Pg==" target="_blank">Una cosa interesante de la competencia</a>

Y que serán esas letras tan raras que ha enviado “Fernandito”, aunque lo vais a ver en vuestros exploradores os lo voy a contar muy resumidamente, que a buen entendedor pocas palabras bastan.

image

Si, SignalR no te dota de ningún mecanismo AntiXss.

Es más las herramientas AntiXss de MVC y he buscado y probado alguna que otra o son muy restrictivas o bien alguna que otra cosa se comen y por tanto siempre estás con el miedo en el cuerpo.

Os animo a que hagáis una prueba con  la siguiente instrucción JavaScript en la  consola de vuestros exploradores y después la pases como parámetro de una url .

constructor.constructor(alert(1))()

Como mínimo la vas a serializar en tu bb.dd y solo depende de donde hagas Binding de esa sentencia JavaScript para que sea o no peligrosa, pero de antemano se pasa en la actualidad un porcentaje muy alto de los filtros AntiXss que he comprobado.

Si a esto le sumamos la tendencia excesiva de uso de token como mecanismo de seguridad en la web frente a cookies, veo una laguna durante cierto tiempo plagada de miedos y de errores muy gordos que pueden comprometer seriamente la seguridad.

Como la serie trata de 3 capítulos os adelanto de que vamos a hablar en los siguientes.

Capitulo 3 de 2. Vamos a ver como ese tipo de ataque lo puedo solucionar con Angularjs aunque jamás lo recomendaré.

Capitulo 3 de 3. Como intuí que SignalR no tenía ningún filtro de protección AntiXss. Y veremos también las diferencias en el cliente entre utilizar Server Send Event y foreverFrame.

Conclusiones.

1. En ningún momento pienses que SignalR es malo, solo piensa en seguridad cuando la utilices.

2.No eres más dichoso por avisar antes, sino por avisar antes y decir las cosas claras, que por ningún sitio he visto esto y hay tenéis la prueba de que no me estoy inventando nada.

 

 

 

 

 

.

2 comentarios en “SignalR 3 de 1”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *