Modulo de seguridad Helmet para node.js
Se trata de una librería que provee de 12 módulos para establecer unos cabeceras de seguridad en tu servidor node.js. Concretamente:
Module | Included by default? |
---|---|
contentSecurityPolicy for setting Content Security Policy | |
expectCt for handling Certificate Transparency | |
dnsPrefetchControl controls browser DNS prefetching | ✓ |
frameguard to prevent clickjacking | ✓ |
hidePoweredBy to remove the X-Powered-By header | ✓ |
hpkp for HTTP Public Key Pinning | |
hsts for HTTP Strict Transport Security | ✓ |
ieNoOpen sets X-Download-Options for IE8+ | ✓ |
noCache to disable client-side caching | |
noSniff to keep clients from sniffing the MIME type | ✓ |
referrerPolicy to hide the Referer header | |
xssFilter adds some small XSS protections | ✓ |
Para instalarlo sería con el comando:
npm install helmet --save
Unos ejemplos de uso:
var express = require('express') var helmet = require('helmet') var app = express() //Uso por defecto sería: app.use(helmet()) //Activar individualmente las funciones. app.use(helmet.noCache()) app.use(helmet.frameguard()) //Desabilitar alguna funcionalidad y usa el resto de las de por defecto. app.use(helmet({ frameguard: false }))
HPKP: HTTP Public Key Pinning
El Public Key Pinning es una extensión del protocolo HTTP (Hypertext Transfer Protocol) que permite definir el juego de claves públicas (Public Key Set) para las futuras conexiones SSL/TLS con un host. De esta manera el cliente puede saber, en su primera toma de contacto, en qué claves públicas puede confiar mientras se establece la conexión a este host. Este procedimiento se conoce como modelo “Trust On First Use” (en español: confianza en la primera aplicación). Cada entrada de una clave verificada se denomina “pin” (de ahí el nombre de “pinning” dado a este mecanismo). Todos los pines creados se envían al cliente en el encabezado HTTP y se guardan aquí durante un determinado periodo de tiempo.
Cuando se realiza una nueva solicitud de conexión, el cliente comprueba si la cadena de certificación propuesta para la transmisión SSL/TLS contiene una clave pública (key) filtrada previamente a través de HPKP. Si no es así, por ejemplo en el caso de un certificado falso, se genera un mensaje de error y no se establece la conexión. Este proceso de verificación se conoce también como validación de pin. Este que sigue es un ejemplo de las entradas de los pines en el encabezado HTTP:
Public-Key-Pins:
pin-sha256=»d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=»;
pin-sha256=»E9CZ9INDbd+2eRQozYqqbQ2yXLVKB9+xcprMF+44U1g=»;
pin-sha256=»LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=»;
max-age=2592000; includeSubDomains; report-uri=»http://example.com/pkp-report»El ejemplo muestra las cuatro directrices que debe contener una entrada pin en el encabezado HTTP:
pin: la directiva pin es la parte más importante de la entrada. Como tal, está compuesta por un nombre y un valor. El nombre proporciona indicios sobre el algoritmo utilizado para el cifrado. Hasta la fecha solo es posible usar SHA256. El valor hash, que se encuentra dentro de las comillas, es una cadena Base64 codificada que también se conoce como huella digital (Fingerprint). Es necesario fijar una directiva pin propia para cada llave (backups).
max-age: la directiva max-age especifica el periodo de validez de un pin en segundos e indica al cliente cuánto tiempo debe considerar como clave segura a una Public Key determinada. En el ejemplo mencionado, los pines enumerados se descartarán después de 30 días (2.592.000 de segundos).
includeSubDomains: esta directiva es opcional y no requiere ningún valor. Esta es la encargada de señalar al cliente que las reglas de certificación definidas no solo se aplican al dominio solicitado, sino también a todos los subdominios pertenecientes al host.
report-uri: si se fija la directiva report-uri, cualquier error de validación del pin se enviará al URL especificado. Este no necesariamente tiene que estar en el mismo dominio de Internet que el host contactado para informarle de los intentos fallidos de configuración.
Podemos crear nuestro pin mediante la aplicacion OpenSSL de la siguiente forma:
set OPENSSL_CONF=c:\OpenSSL\bin\openssl.cnf //creamos una clave privada openssl genrsa -out primkey.key 4096 //creamos el csr para esa clave nueva // (nos pedirá que rellenemos una serie de datos) openssl req -new -key primkey.key -sha256 -out primkey.csr //obtenemos la huella digital openssl req -pubkey < primkey.csr | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
Comprueba la seguridad de tu servidor
Aquí van un par de páginas donde puedes comprobar el nivel de seguridad de tu servidor.
Es tan fácil como insertar la url de tu servidor y darle a escanear para que te generen un reporte donde podrás ver los problemas de seguridad existentes.
Carga de una imagen para previsualizarla
Ejemplo de como podriamos cargar en una página HTML una imagen obtenida desde el disco y hacer una previsualización de ella usando javascript.
En la pagina podemos añadir un objeto de formulario de tipo file, así como una imagen donde cargaremos la que seleccionemos:
< input type="file" id="files" name="files[]" class="btn btn-default btn-file" / > < img src="" id="imgPrevisualizacion" class="img-rounded" height="50" width="50" / >
Ahora sobre ese objeto programamos con javscript el evento change. De tal forma que cada vez que se seleccione una imagen se lance al detectar ese cambio.
function archivo(evt) { var files = evt.target.files; //obtenemos la lista de archivos for (var i = 0, f; f = files[i]; i++) { if (!f.type.match('image.*')) { //comprobamos de que es una imagen continue; } var reader = new FileReader(); reader.onload = (function(theFile) { return function(e) { //asignamos la imagen seleccionada document.getElementById("imgPrevisualizacion").src = e.target.result; }; })(f); reader.readAsDataURL(f); } } //creamos el evento document.getElementById('files').addEventListener('change', archivo, false);
Exportar código HTML a imagen con html2canvas
Gracias a la librería html2Canvas se pueden exportar el código html como si fuera una imagen.
Dado este código html:
< div id="convierteImagen"> < b>Hola Mundo< /b> < /div>
Voy a poner dos ejemplos de uso.
Ejemplo 1 – Si simplemente queremos que en la propia página se cargue una imagen igual al trozo html con html2Canvas sería tan fácil como:
1.1 – Ponemos un botón que será el encargado de lanzar la función JavaScript que realice la tarea.
1.2 – Cómo se puede ver en la función a html2Canvas basta con indicarle el objeto que se quiere capturar.
function renderImg(type) { html2canvas(document.getElementById(type), { onrendered : function(canvas) { document.body.appendChild(canvas); }, width : 470 }); }
Ejemplo 2 – Vamos a suponer que queremos que se descarge el codigo html anterior como si fuera una imagen al hacer click en un boton. Para ello:
2.1 – Creamos un botón y en su evento onclick invocamos a la función que crea la imagen y la lanza para descargar. Además, ponemos una etiqueta < a > cuyo id será downloadLink (no se vera en la página pero la usaremos para lanzar la imagen).
2.2 – Creamos la función JavaScript que utiliza html2Canvas para crear la imagen.
function downImg(type) { html2canvas(document.getElementById(type), { onrendered : function(canvas) { var dato = canvas.toDataURL("image/png"); var anchor = document.getElementById("downloadLink"); //asignamos un nombre al link anchor.setAttribute('download', 'NombreParaImagen.png'); //asignamos la imagen anchor.setAttribute('href', dato); anchor.click(); //forzamos el click }, width : 470 }); }
Añadir texto a archivos STL para impresión 3D con Freecad
En páginas como por ejemplo Thingiverse hay numerosos archivos *.STL (Standard Triangle Language) que podemos descargar para imprimir en nuestras impresoras 3D. A continuación, voy a explicar como podríamos realizarles alguna modificación como puede ser añadirle un texto utilizando la herramienta Freecad.
En primer lugar hay que abrir el archivo stl con el freecad. Para ello con el freecad abiero vamos a File – Open y nos ponemos en el banco Part.
Ahora debemos pasar la pieza a solido para poder modificarla, así que con la pieza seleccionada vamos ejecutando por orden las siguientes acciones:
1 – Part – Create shape form mesh… (Nos pedira marcar una tolerancia, yo suelo poner siempre 0,1)
2 – Part – Convert to solid
3 – Part – Refine shape
Tras realizar esto, podremos comprobar como ahora ya se visualizan las caras, aristas y vertices de la figura. Por lo tanto, ya podremos trabajar sobre la figura.
Si quisieramos añadir un grabado de texto, una forma rápida podría ser seguir estos pasos:
1 – Pasamos al banco Draft
2 – Seleccionamos la acción ShapeString. Nos irá pidiendo una seríe de pasos a seguir:
2.1 – Seleccionar el punto donde comenzar a escribir.
2.2 – Introducir la cadena de texto que queremos grabar.
2.3 – Introducir la altura de la letra para ese texto.
2.4 – Introducir la separación entre las letras.
2.5 – Seleccionar el tipo de letra a utilizar. Puedes buscar una fuente que te guste por internet y descargarte el archivo *.ttf de ella. Para una prueba rápida puedes coger alguna que ya tenga el propio freecad en su instalación, yo suelo seleccionar para las pruebas: FreeCAD 0.16\bin\Lib\site-packages\matplotlib\mpl-data\fonts\ttf\Vera.ttf
3 – Vamos al banco Part y extruimos el texto sobre el eje en el que estemos trabajando.
Ahora ya tendriamos la figura y el texto listos para unirlos. Una forma de unirlos puede ser ir moviendo el texto a mano hasta que quede en la posición que queremos. Pero podriamos hacerlo de forma más elegante. Para ello:
1 – Seleccionamos simultáneamente primero la pieza y después el texto para realizar la accion Edit – Alignment…
2 – Nos saldrá la pantalla dividida en dos. Seleccionas varios puntos en la figura de la izquierda (que será el texto) y seleccionas otros tantos puntos en la figura de la derecha (que sera la pieza). Los puntos tienes que marcarlos en el mismo orden en ambas figuras y son para orientar a freecad donde colocar el texto.
3 – Por ultimo en la pantalla de la pieza hariamos click en el botón derecho del ratón y seleccionamos la opción align para que realice la operación.
Planificar el cambio de filamento durante la impresión 3D con la aplicación Cura.
La aplicación Cura nos permite planificar entre otras cosas cambio de filamento durante la impresión de una pieza en 3D. Esto puede ser muy útil cuando por ejemplo sabemos que se va a terminar el filamento o bien cuando queremos que la pieza quede impresa en varios colores.
Para ello en Cura hay que ir al menú extensiones – postprocesamiento – modificar GCode.
Esto nos va a abrir una pantalla desde la cuál podremos añadir de forma bastante amigable comandos para que se ejecuten. En la figura de debajo hemos seleccionado la opcion Pause at height. A la derecha vemos que nos salen unas casillas para rellenar:
– Pause height: la altura a la que queremos que haga la pausa (depende del punto donde queramos cambiar el filamento).
– Park print head x: posicion X a la que queremos que vaya el extrusor cuando hace la pausa (lo más cómodo es llevar el extrusor al x=0).
– Park print head y: posicion Y a la que queremos que vaya el extrusor cuando hace la pausa (lo más cómodo es llevar el extrusor al y=0).
– Retraction: cuantos milímetros queremos que se retraiga el filamento para extraerlo (por ejemplo, 50 mm).
– Extrude amount: cuantos milímetros queremos que expulse el extrusor (interesamente para que limpie el color anterior de la boquilla, 100 mm está bien).
– Redo layers: numero de capas intermedias que quieres q añada para facilitar la adhesión (en mi caso suelo poner 1 o ninguna).
Nota: Probado que funciona correctamente en una Anet 8 con el firmware Skynet 2.3.1.
Impresión 3D: Añadir cambio de filamento y Restaurar firmware original.
En este videotutorial nos enseñan a realizar un cambio de filamento usando para ellos las extensiones (plugins) del programa Cura. Se puede hacer que la impresión se detenga a determinada altura y nos permita cambiar el filamento.
Y en este otro nos muestran como instalar el firmware de la Anet 8 para volver a su versión original.
Impresión 3D: Anet 8. Cabina.
Guia para meter tu anet 8 en una cabina hecha por ti mismo con 2 mesas lack de ikea.
Se coloca una mesa encima de otra, por la altura de la Anet 8 hay que añadir unos prolongadores de mesa de unos 10 cm. Hay que cerrar los laterales, en mi caso he usado unas tablas de contrachapado de 5mm de grosor y metacrilato de 3mm para los laterales (Atornillando el metacrilato al contrachapado). Para la puerta he utilizado metacrilato de 5 mm de grosor.
Sobre la mesa de abajo irá atornillada la base de la impresora, que en mi caso era una tabla de aglomerado de 1cm de grosor. Mientras, que sobre la mesa de arriba he colocado el soporte para la bobina del filamento, el soporte para el lcd y las cajas con los diferentes interruptores.
En la mesa de abajo se puede colocar una balda util para tener almacenados los filamentos.
– Piezas para imprimir:
+ Prolongadores para la mesa: 1814763
+ Soporte para el LCD: 2005640
+ Guia para el filamento: 2137546
+ Guia para pasar los cables: 1740538 (wires.stl)
+ Soportes para balda inferior: 1639945
+ Manilla para la puerta: 12695
+ Filtro para salida de aire: 2105113
+ Caja para interruptor de fuente. 49542
+ Caja para interruptor de palanca. 1238650 (Utilizados para encender y apagar el ventilador añadido a la fuente y/o el de la placa)
+ Caja para interruptor de botón. 746157 (Utilizados para encender y apagar las luces led y/o el filtro del aire)
– Piezas para comprar:
+ Cables
+ Leds para luz. 5 metros 300 unids SMD3528 DC 12 V de color blanco Aliexpress 2,15€
+ Filtro de carbono. pack de 10 de 12,8×18,8cm. Aliexpress 3,6€
+ Filtro HEPA. Pack de 5 de 64X45X12mm. Aliexpress 4,04€
+ Interruptores palanca. Pack de 5 de 3 pines. Aliexpress 1,22€
+ Interruptores de botón. Pack de 5 de 2 pines. Aliexpress 1,12€
+ Ventilador para el filtro del aire.
Impresión 3D: Anet 8. Montaje inicial y mejoras.
La Anet 8 se trata de una impresora bastante económica que da bastante buenos resultados. Permite imprimir tanto en PLA como ABS. Si bien, tal y como viene de fábrica, ya se puede imprimir con ella es necesario realizarle una serie de mejoras para ir obteniendo mejores resultados. Hay una gran comunidad en internet detrás de ella por lo que es muy fácil solucionar posibles problemas que puedan surgir.
A continuación se explica su funcionamiento y mejoras que se le pueden añadir para mejorar los resultados:
Montaje inicial
Por mi parte, realice el montaje de la impresora tal cual me venia de fábrica para ver que todo funcionaba correctamente. Y luego con ella imprimí las piezas necesarias para ir realizandole mejoras. Más adelante mostraré un listado con aquellas mejoras que finalmente he dejado puestas.
Para realizar el montaje completo hay numerosos videos por la red donde se muestra como realizarlo correctamente paso por paso. Un ejemplo sería Guia montaje Anet 8, recomiendo verlos enteros una primera vez antes de realizar el montaje.
Mejora 1: Anclajes para las correas
Te permite anclar tanto la correa del eje X como del Y de manera más cómoda. Son más fáciles de maniputar al no ser necesario el uso de las bridas.
– Piezas para imprimir:
+ Eje X: 1666094
+ Eje Y: 1997647
Mejora 2: Añadir interruptor a la fuente y un ventilador auxiliar
El interruptor te permite encender y apagar la impresora y el ventilador ayudará a la refrigeración de la fuente.
– Piezas para imprimir:
+ Interruptor: 1798604
+ Ventilador fuente: 1683098
– Piezas para comprar:
+ Un interruptor de 3 pines 15A 250V. Ebay 1,43€
+ Un fusible para el interruptor (en mi caso no traia y tuve que comprarlo aparte). Pack de 10 fusibles de 10A de 5x25mm Aliexpress 3,32€
+ Un ventilador. Pack de 5 ventiladores de 12V de 2 pines y de 5 cm Aliexpress 3,04€
Mejora 3: Refuerzos para la estructura
Permite mejorar la estabilidad de la impresora para evitar vibraciones y hacerla menos endeble.
– Piezas para imprimir:
+ Soportes para reducir el movimiento del eje X: 1872162 (
Anet_A8_Top_Left_Bracket_Leo.stl y Anet_A8_Top_Right_Bracket_Leo.stl)
+ Marco para el motor Y 1831038
+ Marco para la parte delantera de la base 1430727 (frame_brace_2.stl)
+ Sujecciones de la base 1771932 (Fix_M8_R1_no_screw.STL, hacen falta 6 y dos tornillos para cada uno. Permite fijar la impresora a una base. En mi caso una tabla de 50x50cm de aglomerado de 1,5 cm de grosor.)
Mejora 4: Tensores para las correas X e Y
Con el uso las correas tenderan a aflojarse. Estos tensores permiten mantener las correas tensas de manera más fácil, simplemente girando un tornillo.
– Piezas para imprimir:
+ Tensor X: 1492411 (x_idler_tension.stl se necesita un tornillo con su tuerca)
+ Tensor Y: 1908554 (se necesitan tornillos y tuercas para unir las piezas de este tensor)
Mejora 5: Estabilizar varillas eje Z
Esta mejora es necesaria para eliminar el llamado «wobble».
– Piezas para imprimir:
+ Anti-wobble parte superior varilla: 1858435
+ Anti-wobble parte inferior varilla: 1539675 (z_wobble.stl)
– Piezas para comprar:
+ Rodamientos 608ZZ. Pack de 10 rodamientos 608ZZ Aliexpress 2,60€
Mejora 6: Anclaje cama caliente
Para hacer más cómodo el regulado de la cama con los tornillos de ésta es interesante añadirles estas tuercas. Además se recomienda rectificar los agujeros de la H para eliminar la rosca y que sean las palometas las que suban o bajen la cama (Ver video).
– Piezas para imprimir:
+ Arandelas: 1261806
+ Tuercas: 2000216
Mejora 7: Mosfet y ventilador para refrigerar electrónica
Con el mosfet evitamos que la corriente destinada a alimentar la cama pase por la placa.
– Piezas para imprimir:
+ Soporte para placa: 2000271 (placa+mosfet+raspberry.stl y tapa_pi_90_80_70_60_50.stl)
– Piezas para comprar:
+ Mossfet. Aliexpress 8,07€
+ Ventilador para poner sobre la placa. Ver mejora 2.
Mejora 8: Ventilador de capa
Útil para enfriar el filamento rápidamente todo alrededor.
– Pieza: 1620630
Mejora 9: Aislante térmico para extrusor y cama caliente
Muy útil para conseguir una calentamiento más rapido y tener menos consumo eléctrico. En el caso de la cama permite evitar el «warping».
– Para la cama caliente, se necesita.
+ Una lámina de corcho para colocar en la parte inferior de la cama.
+ Cinta kapton para pegar el corcho a la cama.
+ Además, vamos a añadir en la parte superior de cama un cristal corriente o de borosilicato. Se puede sujetar a la cama con unas pinzas. A la hora de imprimir si usamos laca para sujetar las piezas al cristal quedarán fuertemente pegadas, evitando que se estropee la impresion. Para despegar, basta con esperar a que se enfríe la base. El cristal se puede limpiar con agua despues de realizar varias impresiones. (Yo utilizo laca Nelly normal).
Nota: En este video se muestra como podemos aislar la cama caliente.
– Para el extrusor, se necesita:
+ Cinta kapton
+ Lana de roca
Nota: explicación de como se haría.
– Piezas para comprar:
+ Lámina de corcho. Pack 4 láminas de 42x32cm Ikea 4,99€
+ Cristal de borosilicato. Aliexpress 7,04€
+ Pinzas de sujección
+ Laca nelly
+ Cinta kapton. Aliexpress 1,69€
+ Lana de roca. Pack de 10 tacos de 50x50x50mm Ebay 4,20€
Mejora 10 A: Final de carrera Z
Necesario para facilitar el calibrado del eje Z en el caso de poner un sensor de autonivelado (mejora 10 B).
– Piezas para imprimir:
+ Final de carrera: 1776429 (se necesitan tornillos y tuercas)
Mejora 10 B: Sensor capacitivo para autonivelado
Este sensor permite que la impresora realice el calibrado del eje Z de forma automática.
– Piezas para imprimir:
+ Soporte: 1907394 (Para el LJC18A3-H-Z/BX seria el modelo Sensor_Bracket_18mm_Leo.stl)
– Piezas para comprar:
+ Sensor capacitivo LJC18A3-H-Z/BX. Aliexpress 5,35€
Para poder realizar su configuración recomiendo ver este video y visitar esta web.
Mejora 11: Guia y filtro para el filamento
Permite evitar que el filamento se enrede y que llegue sin motas de polvo al extrusor.
– Piezas para imprimir:
+ Guia para el filamento: 1764285
+ Soporte para la bobina de filamento: 1624641 (Añadi las piezas SpoolHolder51_FDPlast_BOLT.stl y SpoolHolder51.5_FDPlast_NUT.stl al soporte que ya trae la impresora)
+ Filtro para el filamento: 1099978
– Piezas para comprar:
+ Tubo de teflon para para el filamento desde el filtro al extrusor. Aliexpress 1€
Otras mejoras
– Utilizar conectores faston para toda la electrónica
– Problema con el conector de la cama caliente. Video
Categorias
- adobe (2)
- agile (1)
- Alfresco (1)
- Android (26)
- Angular (6)
- angularjs (10)
- apache (1)
- axis (2)
- Bases de datos (14)
- Bootstrap (1)
- C# (3)
- Cámara (1)
- chrome (3)
- Codeigniter (2)
- Control de Versiones (2)
- CSS (25)
- CVS (1)
- Django (9)
- Django Rest Framework (1)
- DNS (1)
- Docker (1)
- dominio (1)
- eclipse (5)
- Entity Framework (2)
- ETL (1)
- Firefox (6)
- flash (1)
- freecad (1)
- Git (12)
- GitHub (4)
- Groovy (1)
- Handlebars (1)
- hibernate (4)
- hosting (1)
- HTML (50)
- HTML 5 (26)
- Impresión 3D (9)
- Inkscape (1)
- IOS (2)
- ireports (3)
- Java (43)
- Javascript (55)
- JBoss (3)
- JPA (2)
- JQuery (20)
- Json (7)
- JSP (5)
- Lamp (1)
- lean (1)
- linkedin (1)
- LINQ (1)
- linux (13)
- Livecycle (1)
- log (1)
- microcontroladores (1)
- MongoDB (4)
- MySQL (8)
- Node.js (5)
- OC4J (1)
- Openshift (2)
- Oracle (5)
- Patrones de Diseño (1)
- Photoshop (2)
- php (20)
- PostgreSQL (1)
- python (19)
- rabbitmq (1)
- Raspberry PI (13)
- Raspherry PI (5)
- React (6)
- seguridad (3)
- Selenium (3)
- Sencha Touch (1)
- Sin categoría (25)
- Spring (16)
- spring-boot (3)
- SQL (7)
- SQLServer (1)
- struts (2)
- SVN (1)
- Talend (1)
- Tomcat (5)
- unity (3)
- Visual Studio Code (2)
- vmware (5)
- Web Services (11)
- windows (18)
- wordpress (10)
- Xiaomi (1)
- xml (2)
Trabajos Realizados
- App Android – Autoka Fr
- App Android – Cartelera Cántabra
- App Android – Gramática y Vocabulario Ingles
- App Android – Hoja de Gastos
- App Android – Hotel Torre Cristina
- App Android – OcioEnjoy
- App Android – Visor CardBoard
- App Firefox – Managapp
- DiamanteBomba – DisasterCode
- Generador de Partes de Trabajo
- GitHub – Android Web Generator
- GitHub – Dynamic Angular Gallery
- GitHub – Dynamic React Gallery
- GitHub – Sotilizator
- GitHub – SpringAngularJS
- GitHub – Swiper Dynamic Angular Gallery
- HazParejas – DisasterCode
- RompeCabezas – DisasterCode
- Unity Game – English Couple
- Unity Game – Kill Wasp
- WordPress – El Buen Apicultor
- WordPress – El Cajón de los Retales
- WordPress – El Vestidito Azul
- WordPress – Feuchas
- WordPress – Fragua de Navajas Ponce
- WordPress – Humor a las Tres
- WordPress – Photo Places