<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Security on Commentary of Takao</title><link>https://takao.blog/es/tags/security/</link><description>Recent content in Security on Commentary of Takao</description><generator>Hugo -- gohugo.io</generator><language>es</language><copyright>Commentary of Takao</copyright><lastBuildDate>Sun, 12 Jul 2026 04:12:51 +0900</lastBuildDate><atom:link href="https://takao.blog/es/tags/security/index.xml" rel="self" type="application/rss+xml"/><item><title>OWASP ZAP Avanzado 2026: Automatización y scripting</title><link>https://takao.blog/es/web/owasp-zap-advanced-2026/</link><pubDate>Tue, 09 Jun 2026 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/owasp-zap-advanced-2026/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/owasp-zap-advanced-2026-es.png" alt="Featured image of post OWASP ZAP Avanzado 2026: Automatización y scripting" /&gt;&lt;p&gt;OWASP ZAP ofrece capacidades avanzadas de automatización y scripting para equipos de seguridad y desarrollo.&lt;/p&gt;
&lt;h2 id="zap-automation-framework"&gt;ZAP Automation Framework
&lt;/h2&gt;&lt;p&gt;YAML para definir pipelines de seguridad: spider, active scan, alert filtering, report generation. Reemplaza scripts ad-hoc.&lt;/p&gt;
&lt;h2 id="scripting-con-zap"&gt;Scripting con ZAP
&lt;/h2&gt;&lt;p&gt;JavaScript, Python, Groovy para hooks personalizados. Scripts passive/active/extender. Automatización de autenticación y sesiones.&lt;/p&gt;
&lt;h2 id="api-de-zap"&gt;API de ZAP
&lt;/h2&gt;&lt;p&gt;REST API completa. Integración con Postman, curl, cualquier lenguaje. Control total de escaneos, contextos y alerts.&lt;/p&gt;
&lt;h2 id="contextos-y-autenticación"&gt;Contextos y autenticación
&lt;/h2&gt;&lt;p&gt;Define contextos de aplicación (URLs, include/exclude). Autenticación basada en formularios, JSON API, OAuth. Manejo de sesiones.&lt;/p&gt;</description></item><item><title>Hugo 2026: Mejores prácticas con CSP</title><link>https://takao.blog/es/web/hugo-latest-csp-best-practices-2026/</link><pubDate>Fri, 05 Jun 2026 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/hugo-latest-csp-best-practices-2026/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/hugo-latest-csp-best-practices-2026-es.png" alt="Featured image of post Hugo 2026: Mejores prácticas con CSP" /&gt;&lt;p&gt;Content Security Policy (CSP) es esencial para la seguridad. Hugo 2026 ofrece nuevas capacidades para integrar CSP sin sacrificar funcionalidad.&lt;/p&gt;
&lt;h2 id="csp-en-sitios-estáticos"&gt;CSP en sitios estáticos
&lt;/h2&gt;&lt;p&gt;Los sitios estáticos tienen menos vectores de ataque pero aún necesitan CSP para scripts de terceros, analytics y widgets embebidos.&lt;/p&gt;
&lt;h2 id="generación-de-nonces"&gt;Generación de nonces
&lt;/h2&gt;&lt;p&gt;Hugo puede generar nonces únicos por build para scripts inline. Configuración via template functions. Integración con partials.&lt;/p&gt;
&lt;h2 id="hash-para-scripts-estáticos"&gt;Hash para scripts estáticos
&lt;/h2&gt;&lt;p&gt;Calcula hashes SHA de scripts embebidos. Incluye en la cabecera CSP. Hugo puede automatizar esto con pipe functions.&lt;/p&gt;</description></item><item><title>Firmado de commits con claves SSH</title><link>https://takao.blog/es/web/git-signing-commits-ssh-keys/</link><pubDate>Mon, 25 May 2026 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/git-signing-commits-ssh-keys/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/git-signing-commits-ssh-keys-es.png" alt="Featured image of post Firmado de commits con claves SSH" /&gt;&lt;p&gt;Git 2.34+ permite firmar commits con claves SSH además de GPG. SSH es más familiar para desarrolladores que ya usan claves SSH para autenticación.&lt;/p&gt;
&lt;h2 id="configuración"&gt;Configuración
&lt;/h2&gt;&lt;p&gt;Usa tu clave SSH existente (&lt;code&gt;~/.ssh/id_ed25519.pub&lt;/code&gt;). Configura &lt;code&gt;git config --global gpg.format ssh&lt;/code&gt; y &lt;code&gt;user.signingkey ~/.ssh/id_ed25519.pub&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="firma-automática"&gt;Firma automática
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;git config --global commit.gpgsign true&lt;/code&gt; firma todos los commits. Git usa SSH agent para la frase de paso.&lt;/p&gt;
&lt;h2 id="registro-en-github"&gt;Registro en GitHub
&lt;/h2&gt;&lt;p&gt;Añade tu clave SSH pública en GitHub Settings con tipo &amp;ldquo;Signing Key&amp;rdquo; (no solo Authentication). Los commits firmados muestran &amp;ldquo;Verified&amp;rdquo;.&lt;/p&gt;</description></item><item><title>CSP Report-Only: Implementación segura de Content Security Policy</title><link>https://takao.blog/es/web/security-content-security-policy-csp-report-only/</link><pubDate>Fri, 15 May 2026 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/security-content-security-policy-csp-report-only/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/security-content-security-policy-csp-report-only-es.png" alt="Featured image of post CSP Report-Only: Implementación segura de Content Security Policy" /&gt;&lt;p&gt;Content-Security-Policy-Report-Only permite probar políticas de seguridad sin bloquear recursos. Ideal para implementación gradual.&lt;/p&gt;
&lt;h2 id="diferencia-con-csp"&gt;Diferencia con CSP
&lt;/h2&gt;&lt;p&gt;CSP normal bloquea violaciones. CSP-Report-Only solo reporta. Usa ambas en paralelo: una activa y otra para nuevas reglas.&lt;/p&gt;
&lt;h2 id="reportes"&gt;Reportes
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-http" data-lang="http"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;Content-Security-Policy-Report-Only: script-src &amp;#39;self&amp;#39;; report-uri /csp-endpoint
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Los reportes JSON contienen: document-uri, violated-directive, blocked-uri, source-file.&lt;/p&gt;
&lt;h2 id="endpoints-de-reporte"&gt;Endpoints de reporte
&lt;/h2&gt;&lt;p&gt;Servidor propio que captura POST. &lt;code&gt;report-to&lt;/code&gt; (nuevo) en lugar de &lt;code&gt;report-uri&lt;/code&gt; (obsoleto). Servicios como Report URI, Sentry.&lt;/p&gt;
&lt;h2 id="flujo-de-adopción"&gt;Flujo de adopción
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Report-Only vigilando. 2. Identificar violaciones legítimas. 3. Ajustar política. 4. Migrar a CSP real. 5. Repetir hasta sin reportes.&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>JWT vs Autenticación por sesión: Cuál elegir</title><link>https://takao.blog/es/web/security-jwt-vs-session-auth/</link><pubDate>Fri, 20 Mar 2026 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/security-jwt-vs-session-auth/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/security-jwt-vs-session-auth-es.png" alt="Featured image of post JWT vs Autenticación por sesión: Cuál elegir" /&gt;&lt;p&gt;JWT (JSON Web Tokens) y sesiones basadas en cookies son los dos enfoques principales de autenticación. Cada uno tiene ventajas según el contexto.&lt;/p&gt;
&lt;h2 id="autenticación-por-sesión"&gt;Autenticación por sesión
&lt;/h2&gt;&lt;p&gt;Token de sesión almacenado en el servidor (memoria, Redis, DB). Cookie con session ID. Fácil invalidar (eliminar sesión del servidor). Estado server-side.&lt;/p&gt;
&lt;h2 id="jwt"&gt;JWT
&lt;/h2&gt;&lt;p&gt;Token autónomo firmado. Contiene claims (userId, rol, exp). Sin estado server-side. Válido hasta expirar. Difícil invalidar (revocación complicada).&lt;/p&gt;
&lt;h2 id="comparativa"&gt;Comparativa
&lt;/h2&gt;&lt;p&gt;Sesión: más fácil invalidar, seguro contra robos de token. JWT: escalable (sin almacenamiento), mejor para microservicios y APIs móviles.&lt;/p&gt;</description></item><item><title>Seguridad DNS: DNSSEC, SPF, DKIM y DMARC</title><link>https://takao.blog/es/web/web-security-dnssec-spf-dkim-dmarc/</link><pubDate>Sun, 15 Feb 2026 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/web-security-dnssec-spf-dkim-dmarc/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/web-security-dnssec-spf-dkim-dmarc-es.png" alt="Featured image of post Seguridad DNS: DNSSEC, SPF, DKIM y DMARC" /&gt;&lt;p&gt;La seguridad del correo electrónico y DNS se basa en cuatro tecnologías que previenen spoofing, phishing y suplantación de dominio.&lt;/p&gt;
&lt;h2 id="dnssec"&gt;DNSSEC
&lt;/h2&gt;&lt;p&gt;Firma digitalmente los registros DNS. Protege contra envenenamiento de caché DNS y ataques Man-in-the-Middle. El navegador verifica la firma.&lt;/p&gt;
&lt;h2 id="spf"&gt;SPF
&lt;/h2&gt;&lt;p&gt;Especifica qué servidores pueden enviar correo desde tu dominio. Registro TXT con IPs autorizadas. Previene falsificación de remitente.&lt;/p&gt;
&lt;h2 id="dkim"&gt;DKIM
&lt;/h2&gt;&lt;p&gt;Firma digitalmente los correos salientes. El receptor verifica la firma contra un registro DNS. Asegura que el correo no fue alterado.&lt;/p&gt;</description></item><item><title>HTTP Strict Transport Security (HSTS): Forzar HTTPS</title><link>https://takao.blog/es/web/web-security-http-strict-transport-hsts-hacks/</link><pubDate>Fri, 16 Jan 2026 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/web-security-http-strict-transport-hsts-hacks/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/web-security-http-strict-transport-hsts-hacks-es.png" alt="Featured image of post HTTP Strict Transport Security (HSTS): Forzar HTTPS" /&gt;&lt;p&gt;HSTS le indica al navegador que solo se conecte al sitio mediante HTTPS, incluso si el usuario escribe &lt;code&gt;http://&lt;/code&gt; o hace clic en un enlace HTTP.&lt;/p&gt;
&lt;h2 id="cabecera-hsts"&gt;Cabecera HSTS
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Strict&lt;span style="color:#f92672"&gt;-&lt;/span&gt;Transport&lt;span style="color:#f92672"&gt;-&lt;/span&gt;Security: max&lt;span style="color:#f92672"&gt;-&lt;/span&gt;age&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;31536000&lt;/span&gt;; includeSubDomains; preload
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;max-age&lt;/code&gt; en segundos (1 año recomendado). &lt;code&gt;includeSubDomains&lt;/code&gt; aplica a todos los subdominios.&lt;/p&gt;
&lt;h2 id="hsts-preload"&gt;HSTS Preload
&lt;/h2&gt;&lt;p&gt;Lista mantenida por Chrome (cargada en todos los navegadores). Los dominios en la lista tienen HSTS activo desde la primera visita, sin necesidad de cabecera.&lt;/p&gt;</description></item><item><title>HTTP Headers de seguridad y CORS</title><link>https://takao.blog/es/web/web-security-http-headers-cors/</link><pubDate>Mon, 15 Dec 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/web-security-http-headers-cors/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/web-security-http-headers-cors-es.png" alt="Featured image of post HTTP Headers de seguridad y CORS" /&gt;&lt;p&gt;Las cabeceras HTTP de seguridad protegen contra ataques comunes. CORS controla qué dominios pueden acceder a tus recursos desde el navegador.&lt;/p&gt;
&lt;h2 id="cabeceras-de-seguridad-esenciales"&gt;Cabeceras de seguridad esenciales
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;X-Content-Type-Options: nosniff&lt;/code&gt;, &lt;code&gt;X-Frame-Options: DENY&lt;/code&gt;, &lt;code&gt;X-XSS-Protection: 0&lt;/code&gt; (obsoleto). &lt;code&gt;Referrer-Policy&lt;/code&gt;, &lt;code&gt;Permissions-Policy&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="cors-cross-origin-resource-sharing"&gt;CORS (Cross-Origin Resource Sharing)
&lt;/h2&gt;&lt;p&gt;Controla qué orígenes pueden leer respuestas de tu API. &lt;code&gt;Access-Control-Allow-Origin&lt;/code&gt;, &lt;code&gt;-Methods&lt;/code&gt;, &lt;code&gt;-Headers&lt;/code&gt;. Preflight con OPTIONS para solicitudes complejas.&lt;/p&gt;
&lt;h2 id="cors-en-apis"&gt;CORS en APIs
&lt;/h2&gt;&lt;p&gt;Para APIs públicas: &lt;code&gt;Access-Control-Allow-Origin: *&lt;/code&gt;. Para APIs privadas: lista blanca de orígenes. Credenciales requieren &lt;code&gt;Allow-Credentials: true&lt;/code&gt; y origen específico.&lt;/p&gt;</description></item><item><title>Vulnerabilidades en dependencias con npm audit</title><link>https://takao.blog/es/web/security-dependency-vulnerabilities-npm-audit/</link><pubDate>Sat, 15 Nov 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/security-dependency-vulnerabilities-npm-audit/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/security-dependency-vulnerabilities-npm-audit-es.png" alt="Featured image of post Vulnerabilidades en dependencias con npm audit" /&gt;&lt;p&gt;&lt;code&gt;npm audit&lt;/code&gt; escanea las dependencias del proyecto en busca de vulnerabilidades conocidas. Es la primera línea de defensa contra paquetes comprometidos.&lt;/p&gt;
&lt;h2 id="uso-básico"&gt;Uso básico
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;npm audit&lt;/code&gt; lista vulnerabilidades por severidad (critical, high, moderate, low). Muestra ruta de dependencia, versión vulnerable y versión corregida.&lt;/p&gt;
&lt;h2 id="npm-audit-fix"&gt;npm audit fix
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;npm audit fix --force&lt;/code&gt; actualiza a la versión corregida. &lt;code&gt;--force&lt;/code&gt; puede cambiar versiones major (puede romper cosas).&lt;/p&gt;
&lt;h2 id="alternativas"&gt;Alternativas
&lt;/h2&gt;&lt;p&gt;Snyk: escaneo continuo, PRs automáticos de fix. Dependabot: PRs automáticos en GitHub. &lt;code&gt;socket.dev&lt;/code&gt;: análisis de comportamiento de paquetes.&lt;/p&gt;</description></item><item><title>Firmado de commits con GPG en Git</title><link>https://takao.blog/es/web/git-commit-signing-gpg/</link><pubDate>Thu, 25 Sep 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/git-commit-signing-gpg/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/git-commit-signing-gpg-es.png" alt="Featured image of post Firmado de commits con GPG en Git" /&gt;&lt;p&gt;Firmar commits con GPG verifica la identidad del autor. GitHub/GitLab muestran una insignia &amp;ldquo;Verified&amp;rdquo; en los commits firmados.&lt;/p&gt;
&lt;h2 id="configuración"&gt;Configuración
&lt;/h2&gt;&lt;p&gt;Genera una clave GPG: &lt;code&gt;gpg --full-generate-key&lt;/code&gt;. Configura &lt;code&gt;git config --global user.signingkey &amp;lt;KEY&amp;gt;&lt;/code&gt;. Firma commits con &lt;code&gt;-S&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="firma-automática"&gt;Firma automática
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;git config --global commit.gpgsign true&lt;/code&gt; firma todos los commits. &lt;code&gt;git config --global tag.gpgsign true&lt;/code&gt; para etiquetas.&lt;/p&gt;
&lt;h2 id="registro-en-github"&gt;Registro en GitHub
&lt;/h2&gt;&lt;p&gt;Añade la clave GPG pública en GitHub Settings → SSH and GPG keys. Verifica que los commits muestren &amp;ldquo;Verified&amp;rdquo;.&lt;/p&gt;</description></item><item><title>Protección CSRF: Tokens y SameSite Cookies</title><link>https://takao.blog/es/web/security-csrf-tokens-samesite-cookies/</link><pubDate>Mon, 25 Aug 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/security-csrf-tokens-samesite-cookies/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/security-csrf-tokens-samesite-cookies-es.png" alt="Featured image of post Protección CSRF: Tokens y SameSite Cookies" /&gt;&lt;p&gt;Cross-Site Request Forgery (CSRF) engaña al navegador para ejecutar acciones no deseadas en un sitio donde el usuario está autenticado.&lt;/p&gt;
&lt;h2 id="cómo-funciona-csrf"&gt;Cómo funciona CSRF
&lt;/h2&gt;&lt;p&gt;El atacante crea un formulario o enlace en su sitio que apunta a una acción en tu sitio (cambiar email, transferir dinero). Las cookies se envían automáticamente.&lt;/p&gt;
&lt;h2 id="tokens-csrf"&gt;Tokens CSRF
&lt;/h2&gt;&lt;p&gt;Token único por sesión o formulario. Incluido como campo oculto en formularios o header en requests AJAX. El servidor valida el token en cada mutación.&lt;/p&gt;</description></item><item><title>CSP strict-dynamic: La mejor defensa contra XSS</title><link>https://takao.blog/es/web/security-csp-strict-dynamic-implementation/</link><pubDate>Sun, 15 Jun 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/security-csp-strict-dynamic-implementation/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/security-csp-strict-dynamic-implementation-es.png" alt="Featured image of post CSP strict-dynamic: La mejor defensa contra XSS" /&gt;&lt;p&gt;La directiva &lt;code&gt;strict-dynamic&lt;/code&gt; de CSP cambia la forma de aplicar políticas de seguridad. En lugar de listar dominios permitidos, confía en scripts que fueron cargados por scripts legítimos.&lt;/p&gt;
&lt;h2 id="problema-con-listas-blancas"&gt;Problema con listas blancas
&lt;/h2&gt;&lt;p&gt;Las listas de URLs permitidas son difíciles de mantener y pueden incluir CDNs comprometidas o bibliotecas con vulnerabilidades.&lt;/p&gt;
&lt;h2 id="cómo-funciona-strict-dynamic"&gt;Cómo funciona strict-dynamic
&lt;/h2&gt;&lt;p&gt;Si un script tiene un nonce o hash válido, puede cargar otros scripts del mismo origen. La confianza se propaga del script inicial a sus dependencias.&lt;/p&gt;</description></item><item><title>Seguridad web: Prevención de XSS</title><link>https://takao.blog/es/web/security-basics-xss-prevention/</link><pubDate>Tue, 25 Feb 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/security-basics-xss-prevention/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/security-basics-xss-prevention-es.png" alt="Featured image of post Seguridad web: Prevención de XSS" /&gt;&lt;p&gt;Cross-Site Scripting (XSS) es una vulnerabilidad donde un atacante inyecta scripts maliciosos en páginas web vistas por otros usuarios.&lt;/p&gt;
&lt;h2 id="tipos-de-xss"&gt;Tipos de XSS
&lt;/h2&gt;&lt;p&gt;Reflejado: el script viene en la URL o formulario. Almacenado: el script se guarda en la base de datos. DOM-based: el script se ejecuta mediante manipulación del DOM.&lt;/p&gt;
&lt;h2 id="prevención"&gt;Prevención
&lt;/h2&gt;&lt;p&gt;Escapa toda salida de HTML (React lo hace por defecto con JSX). Usa Content-Security-Policy (CSP). Sanitiza entradas con DOMPurify. HttpOnly y Secure en cookies.&lt;/p&gt;</description></item><item><title>Subresource Integrity (SRI): Garantizando integridad de recursos</title><link>https://takao.blog/es/web/subresource-integrity/</link><pubDate>Fri, 20 Dec 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/subresource-integrity/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/subresource-integrity-es.png" alt="Featured image of post Subresource Integrity (SRI): Garantizando integridad de recursos" /&gt;&lt;p&gt;Subresource Integrity (SRI) permite verificar que un archivo cargado desde un CDN no ha sido manipulado, comparando su hash criptográfico.&lt;/p&gt;
&lt;h2 id="cómo-funciona"&gt;Cómo funciona
&lt;/h2&gt;&lt;p&gt;El atributo &lt;code&gt;integrity&lt;/code&gt; contiene un hash (SHA-256, SHA-384, SHA-512) del contenido esperado. El navegador calcula el hash y lo compara. Si no coincide, bloquea el recurso.&lt;/p&gt;
&lt;h2 id="ejemplo"&gt;Ejemplo
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;script&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;src&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;https://cdn.example.com/lib.js&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;integrity&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;sha384-...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;crossorigin&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;anonymous&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;El crossorigin es obligatorio para recursos CORS.&lt;/p&gt;
&lt;h2 id="generación-de-hashes"&gt;Generación de hashes
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;openssl dgst -sha384 -binary archivo.js | openssl base64 -A&lt;/code&gt;. O usando herramientas online de SRI. Automatiza en el build process.&lt;/p&gt;</description></item><item><title>Cookies seguras: HttpOnly, Secure, SameSite</title><link>https://takao.blog/es/web/secure-cookies/</link><pubDate>Mon, 09 Dec 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/secure-cookies/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/secure-cookies-es.png" alt="Featured image of post Cookies seguras: HttpOnly, Secure, SameSite" /&gt;&lt;p&gt;Las cookies tienen atributos de seguridad que protegen contra XSS, CSRF y escuchas no autorizadas. Configurarlos correctamente es esencial.&lt;/p&gt;
&lt;h2 id="httponly"&gt;HttpOnly
&lt;/h2&gt;&lt;p&gt;Previene el acceso a la cookie desde JavaScript (&lt;code&gt;document.cookie&lt;/code&gt;). Bloquea robo de cookies via XSS. Esencial para cookies de sesión.&lt;/p&gt;
&lt;h2 id="secure"&gt;Secure
&lt;/h2&gt;&lt;p&gt;La cookie solo se envía en conexiones HTTPS. Nunca en HTTP. Protege contra ataques Man-in-the-Middle. Siempre activar.&lt;/p&gt;
&lt;h2 id="samesite"&gt;SameSite
&lt;/h2&gt;&lt;p&gt;Strict: máxima protección CSRF. Lax: balance seguridad/usabilidad. None + Secure: cookies de terceros (menos seguro).&lt;/p&gt;</description></item><item><title>Prevención de SQL Injection</title><link>https://takao.blog/es/web/sql-injection-prevention/</link><pubDate>Tue, 01 Oct 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/sql-injection-prevention/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/sql-injection-prevention-es.png" alt="Featured image of post Prevención de SQL Injection" /&gt;&lt;p&gt;SQL Injection es una vulnerabilidad donde el atacante manipula consultas SQL insertando código malicioso en las entradas de usuario.&lt;/p&gt;
&lt;h2 id="cómo-ocurre"&gt;Cómo ocurre
&lt;/h2&gt;&lt;p&gt;Concatenar cadenas en SQL: &lt;code&gt;SELECT * FROM users WHERE id = '&lt;/code&gt; + id + &lt;code&gt;'&lt;/code&gt; permite al atacante inyectar &lt;code&gt;' OR '1'='1&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="prevención-consultas-parametrizadas"&gt;Prevención: Consultas parametrizadas
&lt;/h2&gt;&lt;p&gt;Usa placeholders: &lt;code&gt;SELECT * FROM users WHERE id = ?&lt;/code&gt;. La base de datos escapa los valores automáticamente. Nunca concatenes entradas en SQL.&lt;/p&gt;</description></item><item><title>Seguridad en contenedores: Mejores prácticas</title><link>https://takao.blog/es/web/container-security/</link><pubDate>Tue, 16 Jul 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/container-security/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/container-security-es.png" alt="Featured image of post Seguridad en contenedores: Mejores prácticas" /&gt;&lt;p&gt;La seguridad en contenedores abarca desde la imagen base hasta la configuración de runtime. Un contenedor inseguro compromete todo el host.&lt;/p&gt;
&lt;h2 id="imágenes-base"&gt;Imágenes base
&lt;/h2&gt;&lt;p&gt;Usa imágenes oficiales y actualizadas. Prefiere &lt;code&gt;-slim&lt;/code&gt;, &lt;code&gt;-alpine&lt;/code&gt; o distroless. Escanea vulnerabilidades con &lt;code&gt;docker scout&lt;/code&gt; o &lt;code&gt;trivy&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="principio-de-mínimos-privilegios"&gt;Principio de mínimos privilegios
&lt;/h2&gt;&lt;p&gt;No ejecutes como root: &lt;code&gt;USER nobody&lt;/code&gt; en Dockerfile. Capacidades de Linux mínimas: &lt;code&gt;--cap-drop ALL --cap-add NEEDED&lt;/code&gt;. Modo de solo lectura: &lt;code&gt;--read-only&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="secrets-y-variables"&gt;Secrets y variables
&lt;/h2&gt;&lt;p&gt;Nunca incluyas secretos en la imagen. Usa &lt;code&gt;--secret&lt;/code&gt; de BuildKit para construir, y variables de entorno o montajes de secretos para ejecutar.&lt;/p&gt;</description></item><item><title>Vaultwarden y claves SSH</title><link>https://takao.blog/es/web/vaultwarden-ssh-key/</link><pubDate>Thu, 20 Jun 2024 00:00:00 +0000</pubDate><guid>https://takao.blog/es/web/vaultwarden-ssh-key/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/vaultwarden-ssh-key-es.png" alt="Featured image of post Vaultwarden y claves SSH" /&gt;&lt;p&gt;Vaultwarden puede almacenar claves SSH de forma segura. Con la extensión SSH Agent de Bitwarden, las claves se cargan bajo demanda.&lt;/p&gt;
&lt;h2 id="almacenamiento-de-claves"&gt;Almacenamiento de claves
&lt;/h2&gt;&lt;p&gt;Las claves SSH se guardan como notas seguras en Vaultwarden. Cifradas con AES-256. Acceso protegido con Master Password y 2FA.&lt;/p&gt;
&lt;h2 id="ssh-agent-browser-extension"&gt;SSH Agent (browser extension)
&lt;/h2&gt;&lt;p&gt;La extensión Bitwarden ofrece SSH Agent. Carga claves privadas en el agente SSH del sistema. Las claves no se almacenan en disco.&lt;/p&gt;</description></item><item><title>Rate Limiting en APIs: Estrategias y mejores prácticas</title><link>https://takao.blog/es/web/api-rate-limiting/</link><pubDate>Tue, 07 May 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/api-rate-limiting/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/api-rate-limiting-es.png" alt="Featured image of post Rate Limiting en APIs: Estrategias y mejores prácticas" /&gt;&lt;p&gt;Rate limiting protege las APIs contra abusos limitando el número de solicitudes en un período de tiempo. Esencial para seguridad y estabilidad.&lt;/p&gt;
&lt;h2 id="estrategias-comunes"&gt;Estrategias comunes
&lt;/h2&gt;&lt;p&gt;Fixed Window: cuenta en ventanas de tiempo fijas. Sliding Window: ventana deslizante más precisa. Token Bucket: tokens que se regeneran. Leaky Bucket: cola de velocidad fija.&lt;/p&gt;
&lt;h2 id="cabeceras-de-respuesta"&gt;Cabeceras de respuesta
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;X-RateLimit-Limit&lt;/code&gt;, &lt;code&gt;X-RateLimit-Remaining&lt;/code&gt;, &lt;code&gt;X-RateLimit-Reset&lt;/code&gt;. El cliente puede ajustar su comportamiento. HTTP 429 Too Many Requests con &lt;code&gt;Retry-After&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="implementación"&gt;Implementación
&lt;/h2&gt;&lt;p&gt;Redis para rate limiting distribuido. Almacenamiento en memoria para single-server. Middleware en Express, FastAPI, Cloudflare Workers.&lt;/p&gt;</description></item><item><title>WebAuthn y Passkeys: Autenticación sin contraseñas</title><link>https://takao.blog/es/web/webauthn-passkeys/</link><pubDate>Tue, 02 Apr 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/webauthn-passkeys/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/webauthn-passkeys-es.png" alt="Featured image of post WebAuthn y Passkeys: Autenticación sin contraseñas" /&gt;&lt;p&gt;WebAuthn es un estándar del W3C para autenticación sin contraseñas usando criptografía de clave pública. Passkeys son la implementación práctica.&lt;/p&gt;
&lt;h2 id="cómo-funciona"&gt;Cómo funciona
&lt;/h2&gt;&lt;p&gt;El navegador genera un par de claves (pública/privada). La clave privada nunca sale del dispositivo. La autenticación usa desafíos firmados.&lt;/p&gt;
&lt;h2 id="passkeys"&gt;Passkeys
&lt;/h2&gt;&lt;p&gt;Sincronización entre dispositivos via iCloud Keychain, Google Password Manager, 1Password. Reemplazan contraseñas tradicionales. Soporte en iOS, Android, Windows, macOS.&lt;/p&gt;
&lt;h2 id="registro-y-autenticación"&gt;Registro y autenticación
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;navigator.credentials.create()&lt;/code&gt; para registro. &lt;code&gt;navigator.credentials.get()&lt;/code&gt; para autenticación. Biometría (TouchID, FaceID) o PIN como verificación local.&lt;/p&gt;</description></item><item><title>Instalación de Vaultwarden para gestión de contraseñas</title><link>https://takao.blog/es/web/vaultwarden-install/</link><pubDate>Fri, 15 Mar 2024 00:00:00 +0000</pubDate><guid>https://takao.blog/es/web/vaultwarden-install/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/vaultwarden-install-es.png" alt="Featured image of post Instalación de Vaultwarden para gestión de contraseñas" /&gt;&lt;p&gt;Vaultwarden es una implementación ligera del servidor Bitwarden en Rust. Auto-hospeda tu gestor de contraseñas con mínimos recursos.&lt;/p&gt;
&lt;h2 id="instalación-con-docker"&gt;Instalación con Docker
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker run -d --name vaultwarden &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /vw-data/:/data/ &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -p 80:80 &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; vaultwarden/server:latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="configuración"&gt;Configuración
&lt;/h2&gt;&lt;p&gt;Variables: &lt;code&gt;DOMAIN&lt;/code&gt;, &lt;code&gt;SIGNUPS_ALLOWED&lt;/code&gt;, &lt;code&gt;SMTP_*&lt;/code&gt;. Cifrado de base de datos con &lt;code&gt;DATABASE_URL&lt;/code&gt;. Admin token para panel de administración.&lt;/p&gt;
&lt;h2 id="respaldo"&gt;Respaldo
&lt;/h2&gt;&lt;p&gt;Backup periódico del directorio &lt;code&gt;/data/&lt;/code&gt;. Contiene la base de datos SQLite, archivos adjuntos y claves. Restauración simple reemplazando el directorio.&lt;/p&gt;</description></item><item><title>OAuth 2.0 y OpenID Connect: Autenticación y autorización modernas</title><link>https://takao.blog/es/web/oauth-oidc/</link><pubDate>Mon, 29 Jan 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/oauth-oidc/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/oauth-oidc-es.png" alt="Featured image of post OAuth 2.0 y OpenID Connect: Autenticación y autorización modernas" /&gt;&lt;p&gt;OAuth 2.0 es un protocolo de autorización delegada. OpenID Connect (OIDC) añade una capa de autenticación sobre OAuth 2.0.&lt;/p&gt;
&lt;h2 id="roles-en-oauth-20"&gt;Roles en OAuth 2.0
&lt;/h2&gt;&lt;p&gt;Resource Owner (usuario), Client (app), Authorization Server (Auth0, Cognito), Resource Server (API). Flujo: consentimiento → token → acceso.&lt;/p&gt;
&lt;h2 id="grant-types"&gt;Grant Types
&lt;/h2&gt;&lt;p&gt;Authorization Code: el más seguro, con PKCE. Client Credentials: servidor a servidor. Implicit: obsoleto. Device Code: dispositivos sin navegador.&lt;/p&gt;
&lt;h2 id="openid-connect"&gt;OpenID Connect
&lt;/h2&gt;&lt;p&gt;Añade &lt;code&gt;id_token&lt;/code&gt; (JWT) con información del usuario. &lt;code&gt;/userinfo&lt;/code&gt; endpoint. Scope &lt;code&gt;openid&lt;/code&gt;. Claims: sub, name, email, picture.&lt;/p&gt;</description></item></channel></rss>