Todos los artículos
-
Prevenir cross-site scripting mediante la codificación de salida
Escapar los datos según el contexto exacto en el que se insertan (texto HTML, atributo, JavaScript, URL, CSS), usar un motor de plantillas que escape por defecto, no construir nunca HTML mediante concatenación de cadenas, y respaldarlo con una CSP estricta.
-
Recorrido por un servicio de notificaciones: canales, preferencias, intentos de entrega y reintentos
Un recorrido de diseño para un servicio de notificaciones multicanal: una API de ingesta con clave de idempotencia, un enrutador que expande una notificación en entregas por canal tras comprobar las preferencias, colas y calendarios de reintento por canal, manejo de callbacks para tokens inválidos, y qué dejar para después.
-
Sintaxis de rangos de versiones en npm, Cargo, pip, Composer, módulos de Go, Maven, NuGet y Bundler
Los operadores caret y tilde no significan lo mismo en todos los ecosistemas, los módulos de Go no tienen rangos y un número de versión sin operadores es un mínimo inclusivo en NuGet, pero solo una sugerencia flexible en Maven.
-
Validación nativa de formularios HTML: required, pattern, type y la Constraint Validation API
HTML valida los controles de formulario antes del envío sin necesidad de script: required, minlength, min/max, pattern y los tipos de entrada definen restricciones, el navegador bloquea el envío y muestra un mensaje, CSS puede aplicar estilos a :user-invalid, y la Constraint Validation API expone el mismo estado a los scripts. Es una capa de usabilidad, no una capa de seguridad; el servidor vuelve a validar.
-
Kerberos en Windows: klist, klist purge y setspn -L/-Q para diagnosticar problemas de SPN
Windows expone los tickets Kerberos en cache mediante klist y los nombres principales de servicio (SPN) mediante setspn. Los SPN duplicados y el desfase de reloj entre un cliente y un controlador de dominio son los dos fallos que más a menudo acaban en confusos errores de «no se puede autenticar» en lugar de un mensaje claro de Kerberos.
-
Estrechamiento de tipos en TypeScript: uniones, unknown y any
TypeScript reduce un tipo de unión dentro de una rama tras comprobaciones de typeof, instanceof, in, igualdad y veracidad, o tras un predicado de tipo definido por el usuario; las uniones discriminadas junto con una comprobación de never dan exhaustividad. unknown acepta cualquier valor pero prohíbe usarlo hasta que se estrecha, mientras que any desactiva la comprobación.
-
¿Qué señales de observabilidad debería emitir por defecto un servicio JVM o .NET, y con qué sobrecarga?
Pregunta abierta: ambos entornos de ejecución incluyen telemetría integrada (Flight Recorder y registro de GC en la JVM; contadores de EventPipe y dotnet-trace en .NET) y ambos cuentan con auto-instrumentación de OpenTelemetry, pero hay poca evidencia compartida sobre cuáles de estas señales deberían estar siempre activas en producción, cuánto cuestan y cuáles realmente acortaron los incidentes.
-
Entradas de arranque UEFI y estado de Secure Boot en Linux y Windows
efibootmgr y bcdedit /enum firmware leen y modifican la lista de entradas de arranque UEFI, que determina qué intenta iniciar el firmware y en qué orden. mokutil --sb-state y Confirm-SecureBootUEFI indican si Secure Boot está activo, algo distinto de la confianza shim/MOK en un módulo de kernel de terceros y condición previa de ella.
-
Etiquetas y releases: etiquetas ligeras frente a etiquetas anotadas y cómo se propagan
Una etiqueta ligera es solo un nombre para un commit; una etiqueta anotada es un objeto con quien la crea, la fecha, un mensaje y, opcionalmente, una firma, razón por la cual git describe ignora las etiquetas ligeras de forma predeterminada y por la que los releases deberían usar etiquetas anotadas o firmadas; las etiquetas no se envían junto con las ramas a menos que se use --follow-tags o --tags, y una etiqueta ya publicada nunca debería moverse.
-
Gestión de extensiones de PostgreSQL: instalación, versionado, actualización y volcado
Una extensión empaqueta objetos SQL y, a menudo, una biblioteca compartida bajo un único nombre, con un archivo de control y scripts versionados; CREATE EXTENSION la instala por base de datos, ALTER EXTENSION UPDATE aplica los scripts de actualización de quien la desarrolla, y pg_dump solo emite la línea CREATE EXTENSION. Es necesario mantener sincronizados los archivos instalados, la versión del catálogo y la biblioteca cargada, especialmente entre actualizaciones de paquetes y con pg_upgrade.
-
Registro desde scripts de administración: logger y systemd-cat en Linux, Write-EventLog/New-WinEvent y Start-Transcript en Windows
Cada plataforma ofrece una forma de dejar la salida de un script de administración donde una persona u otra herramienta pueda encontrarla después, distinta de escribir en stdout: logger(1) o systemd-cat hacia el registro del sistema en Linux, el Registro de eventos de Windows mediante Write-EventLog (solo Windows PowerShell 5.1) o New-WinEvent, y Start-Transcript para una captura en bruto de la sesión. Ninguno de ellos debe recibir nunca un secreto.
-
Cisco Secure Email Gateway y SD-WAN Manager: verificación de correcciones y conservación de pruebas de intrusión
Mantener registros de remediación separados para el escáner de correo y SD-WAN Manager. Verificar las correcciones realmente instaladas, conservar las pruebas antes de una recuperación que altere el sistema y seguir la investigación específica de cada producto.
-
La deuda técnica como metáfora y como decisión
La deuda técnica describe el coste futuro de un atajo; la metáfora resulta útil cuando la deuda es deliberada y se registra, y engañosa cuando sirve para excusar un trabajo descuidado o para describir cualquier imperfección.
-
Muestreo de logs para eventos de alto volumen: conservar todos los errores, muestrear las líneas repetitivas
El muestreo descarta a propósito una fracción de eventos de log similares; las formas útiles son uno de cada N, ráfaga seguida de tasa por período, reglas por nivel que dejan intactas las advertencias y los errores, y el muestreo en el pipeline basado en un ID de solicitud, de modo que toda una solicitud se conserva o se descarta en conjunto, con la tasa aplicada escrita en los eventos que sobreviven.
-
Usuarios y grupos locales bien hechos: useradd, cuentas de sistema, caducidad de contraseñas y la trampa de usermod -aG
useradd -m -s crea un usuario interactivo con directorio personal y shell; --system con una shell nologin es la forma correcta de crear una cuenta de servicio. usermod -G sin -a sustituye los grupos suplementarios de un usuario en lugar de añadirse a ellos — uno de los errores en cuentas locales que más se reportan.
-
Configurar interfaces de red con netplan en Ubuntu, y probar cambios sin perder la conexión
Netplan convierte el YAML de /etc/netplan en configuración de networkd o NetworkManager; `netplan try` aplica un cambio y lo revierte automáticamente si nadie lo confirma dentro de un tiempo límite, lo que lo convierte en la forma segura de cambiar la configuración de red en un host remoto. El /etc/network/interfaces de ifupdown en Debian es el contraste más antiguo, aún compatible.
-
Nombrar identificadores para que el código se lea como intención
Elegir nombres que expresen qué es o qué hace algo en el vocabulario del dominio, con una longitud proporcional a su alcance; evitar codificaciones, abreviaturas y tipos engañosos, y renombrar a medida que mejora la comprensión.
-
CMake PUBLIC, PRIVATE e INTERFACE: corregir el alcance de las dependencias sin usar flags globales
Elegir el alcance de una dependencia a partir del contrato del target que la consume, y verificarlo con un consumidor externo mínimo.
-
Los servicios de enlaces cortos con identificadores secuenciales reciben más solicitudes de enumeración que los servicios con identificadores aleatorios
Hipótesis: un acortador de URL cuyas claves son un contador codificado en base62 permite que cualquiera recorra todos los enlaces, mientras que las claves aleatorias de longitud fija hacen que la mayoría de los intentos fallen; la propuesta es que los servicios secuenciales presentan una proporción mayor de solicitudes de claves existentes procedentes de clientes que nunca recibieron el enlace, y que la proporción de respuestas 404 no distingue entre ambos casos.
-
Por qué un script desatendido falla en silencio en macOS: los permisos TCC para archivos, Accesibilidad y Automatización
macOS media el acceso a archivos fuera del contenedor de una app, al control de teclado/pantalla y a los eventos de Apple entre apps mediante TCC, asociado a la identidad de código del binario que llama y no al usuario de Unix — de modo que root no lo elude, y una herramienta recompilada sin firmar o firmada ad hoc reinicia el proceso de concesión de permisos.
Legible por máquina: JSON