miércoles, 28 de octubre de 2020

Configurar Content Security Policy en NGINX



Cómo configurar Content-Security-Policy en NGINX..



La "política de Seguridad del Contenido" (del inglés Content Security Policy) es una capa de seguridad que ayuda a prevenir y mitigar algunos ataques como Cross Site Scripting (XSS) usados para robar información de un servidor web o distribuir malware.

La configuración de la Política de Seguridad del Contenido (CSP), consiste en agregar a una página web la cabecera HTTP Content-Security-Policy y darle valores para controlar los recursos que el navegador puede cargar para esa página. Por ejemplo, una página que carga y muestra imágenes podría permitir imágenes desde cualquier lugar, pero puede restringir el envío de un formulario a una ruta específica.

CSP está diseñado para ser completamente retrocompatible; los navegadores que no soportan CSP simplemente lo ignoran. Si el sitio web no ofrece la cabecera CSP, los navegadores igualmente usan la política estándar "mismo-origen".

Para habilitar CSP, necesitas configurar tu servidor web para que devuelva la cabecera HTTP Content-Security-Policy (en ocasiones verás menciones de la cabecera X-Content-Security-Policy, pero se trata de una versión antigua y obsoleta).

Para especificar una política CSP, se puede utilizar la cabecera HTTP Content-Security-Policy de la siguiente manera:

Content-Security-Policy: política; politica2; politica3

La cabecera Content-Security-Policy puede llegar a ser muy larga según si la web tiene muchos orígenes y actualizar esa línea puede llegar a ser tedioso.

En NGINX podemos anidar las variables de esta forma, y tener una URL origen en cada línea, cosa que nos permite una mejor visibilidad del conjunto:

set $SCRIPT "script-src 'self'"; set $SCRIPT "${SCRIPT} https://www.a.com"; # comentario set $SCRIPT "${SCRIPT} https://b.com"; set $STYLE "style-src 'self'"; set $STYLE "${STYLE} https://a.com"; set $IMG "img-src 'self' data:"; set $IMG "${IMG} https://a.com"; set $IMG "${IMG} https://www.b.com"; set $FONT "font-src 'self' data:"; set $FONT "${FONT} https://a.com"; set $DEFAULT "default-src 'self'"; set $CONNECT "connect-src 'self'"; set $CONNECT "${CONNECT} https://www.a.com"; set $CONNECT "${CONNECT} https://www.b.com"; set $FRAME "frame-src 'self'"; set $FRAME "${FRAME} https://a.com"; set $FRAME "${FRAME} https://b.com"; add_header Content-Security-Policy "${SCRIPT}; ${STYLE}; ${IMG}; ${FONT}; ${DEFAULT}; ${CONNECT}; ${FRAME}";


Fuentes:

https://stackoverflow.com/questions/50018881/is-it-ok-to-put-line-breaks-in-add-header-in-nginx...
https://developer.mozilla.org/es/docs/Web/HTTP/CSP
0

miércoles, 21 de octubre de 2020

Comprobar si un certificado PFX tiene password



Comprobar si un certificado en formato PFX tiene un password asociado.



Puede que hace tiempo creáramos un fichero PFX a partir de una clave pública y una clave privda y que ahora no recordemos si le pusimos un password o no al fichero resultante durante su creación. Hoy nos pide alguien que le enviemos el certificado en formato PFX y queremos comprobar antes si el archivo está protegido por un password o no.

Para comprobar si un certificado .pfx tiene password, podemos ejecutar el siguiente comando y pulsar enter cuando el programa nos pida un password (password en blanco):

HOST # openssl pkcs12 -in certificado.pfx -noout Enter Import Password:

Si no aparece nada más en pantalla quiere decir que el archivo .pfx no está protegida con una contraseña.

Por el contrario, si ejecutamos el mismo comando y el resultado es el siguiente:

HOST # openssl pkcs12 -in certificado.pfx -noout Enter Import Password: Mac verify error: invalid password?

Si vemos este error significa que el certificado en formato PFX está protegido con una contraseña. Ahora solo toca encontrarla ;)


Fuentes:

https://stackoverflow.com/questions/4678730/how-to-verify-the-password-of-a-pkcs12-certificate...
0

miércoles, 14 de octubre de 2020

Mover ficheros según año de creación



Cómo mover cada fichero de una carpeta a otra carpeta según el año en que fue creado.



Puede que tengamos un programa que genere ficheros cada día en un directorio determinado de un sistema Linux. Y que haga eso mismo cada día del año. Si es así, al cabo de unos años podemos acabar con miles de ficheros (o incluso cientos de miles de ficheros) en ese directorio, cosa que dificulta acciones tan básicas como listar los ficheros para ver sus nombres.

Si no queremos eliminar los ficheros antiguos, una opción es moverlos hacia directorios que correspondan con su año de creación. De este modo, podemos mover los ficheros de 2015 al directorio 2015, los de 2016 al directorio 2016, etc. es decir, tener la siguiente estructura de directorios:

/directorio /directorio/2015 /directorio/2016 /directorio/2017 /directorio/2018 ...

Una vez visto como quedará la estructura del directorio, podemos proceder a crear un script que lea la fecha de creación de cada fichero del directorio principal y lo mueva a la carpeta correspondiente a su año de creación.

Para leer los ficheros del directorio principal, podemos usar find para poder trabajar con miles de ficheros y luego usar un loop while para mover cada fichero mientras existan ficheros.

Por último, he especificado un año en la variable "year", por si queremos dejar los ficheros de un año concreto en el directorio principal y no moverlos (los ficheros que hayan sido creados en ese año o superior no se moverán):

#!/bin/bash

orig="/origen";
dest="/destino"
year="2020";

find "$orig" -type f -print | while read -r file; do
    file_year=$(date -r "$file" "+%Y");
    if [ "$file_year" -lt "$year" ] ; then
        [ ! -d "$dest/$file_year" ] && mkdir -p "$dest/$file_year";
        mv "$file" "$dest/$file_year";
    fi
done

En cuanto a la línea:

[ ! -d "$dest/$file_year" ] && mkdir -p "$dest/$file_year";

Comprueba si existe el directorio correspondiente al año de creación del fichero que se está procesando y, si el directorio correspondiente al año no existe, lo crea.


Fuentes:

https://unix.stackexchange.com/questions/73268/how-to-move-the-files-based-on-year
https://stackoverflow.com/questions/547719/is-there-a-way-to-make-mv-create-the-directory...
0

miércoles, 7 de octubre de 2020

Listar controladores de dominio



Ver una lista de todos los domains controllers / controladores de dominio de una empresa u organización usando cmd.



Una máquina cualquiera de una organización tiene visibilidad de todos los controladores de dominio de una organización, pues debe poder conectar a cualquiera de ellos para iniciar sesión, recibir GPO, etc.

Para listar los controladores de dominio de una organización podemos usar el comando "nltest":

nltest /dclist:dominio

Un ejemplo de resultado mostrado por este comando es:

C:\Users\usuario>nltest /dclist:dominio.local Obtener lista de los DC del dominio 'dominio.local' a partir de '\\USA-DC01.dominio.local'. DC01.dominio.local [DS] Sitio: Madrid DC02.dominio.local [DS] Sitio: Barcelona DC03.dominio.local [DS] Sitio: Sevilla DC04.dominio.local [DS] Sitio: Cordoba DC05.dominio.local [DS] Sitio: NY DC06.dominio.local [DS] Sitio: LA DC07.dominio.local [DS] Sitio: Washington DC08.dominio.local [DS] Sitio: Boston DC09.dominio.local [DS] Sitio: Miami DC10.dominio.local [DS] Sitio: Denver DC11.dominio.local [PDC] [DS] Sitio: Sacramento DC12.dominio.local [RODC] [DS] Sitio: Seattle El comando se completó correctamente

Como vemos, se muestran los controladores de dominio en una lista.
1