{"schemaVersion":1,"id":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules","url":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules","title":"Revisión de Código Automatizada con Semgrep: Reglas Personalizadas, Pattern Matching AST y Scanners de Seguridad Organizacionales","description":"Guía práctica de revisión de código automatizada con Semgrep: reglas personalizadas con pattern matching AST, taint analysis para rastrear datos no confiables, scanners de seguridad específicos de la organización e integración en CI para cumplimiento automático.","language":"es","datePublished":"2026-01-15","dateModified":null,"contentFormat":"text/markdown","content":"Developer Tools\n\n# Revisión de Código Automatizada con Semgrep: Reglas Personalizadas, Pattern Matching AST y Scanners de Seguridad Organizacionales\n\n2026-01-154 min lectura\n\nLucio Durán\nEngineering Manager & AI Solutions Architect\n\nTambién disponible en: [English](<https://lucioduran.com/blog/ai-code-review-ast-analysis-semgrep-custom-rules>)\n\n## Por Qué Semgrep, No Regex\n\nEl problema fundamental con el scanning de seguridad basado en grep es que el código es un árbol, no un string. Al considerar la detección de SQL injection en Python:\n\n```python\n# Grep atrapa esto:\ncursor.execute(\"SELECT * FROM users WHERE id = \" + user_id)\n\n# Pero se pierde esto (misma vulnerabilidad, distinto formato):\nquery = \"SELECT * FROM users WHERE id = \" + user_id\ncursor.execute(\n query\n)\n\n# Y da falso positivo en esto (seguro, parametrizado):\ncursor.execute(\"SELECT * FROM users WHERE id = %s\", (user_id,))\n```\n\nSemgrep trabaja sobre el AST (Abstract Syntax Tree), así que entiende la estructura del código, no solo el texto:\n\n```yaml\nrules:\n - id: python-sql-injection\n patterns:\n - pattern: cursor.execute($QUERY, ...)\n - pattern-not: cursor.execute(\"...\", (...))\n - metavariable-pattern:\n  metavariable: $QUERY\n  patterns:\n  - pattern: $X + ...\n  - pattern: f\"...\"\n  - pattern: \"...\".format(...)\n  - pattern: \"...\" % ...\n message: >\n Query SQL construida con concatenación de strings.\n Utilizar queries parametrizadas.\n severity: ERROR\n languages: [python]\n```\n\n## Taint Analysis: Siguiendo los Datos\n\nAcá es donde Semgrep va más allá del pattern matching. El modo taint rastrea el flujo de datos de sources a sinks:\n\n```yaml\nrules:\n - id: express-xss\n mode: taint\n message: >\n Input del usuario fluye a la respuesta HTML sin sanitización.\n Esto es una vulnerabilidad de Cross-Site Scripting (XSS).\n severity: ERROR\n languages: [javascript, typescript]\n\n pattern-sources:\n - patterns:\n  - pattern: req.query.$PARAM\n - patterns:\n  - pattern: req.body.$PARAM\n - patterns:\n  - pattern: req.params.$PARAM\n\n pattern-sinks:\n - patterns:\n  - pattern: res.send($PAYLOAD)\n - patterns:\n  - pattern: res.write($PAYLOAD)\n\n pattern-sanitizers:\n - patterns:\n  - pattern: DOMPurify.sanitize(...)\n - patterns:\n  - pattern: encodeURIComponent(...)\n```\n\nEsto atrapa:\n\n```javascript\n// DETECTADO: datos tainted fluyen de source a sink\napp.get('/search', (req, res) => {\n const query = req.query.q;\n res.send(`<h1>Resultados para: ${query}</h1>`); // XSS!\n});\n\n// NO DETECTADO: sanitizer rompe la cadena de taint\napp.get('/safe', (req, res) => {\n const query = DOMPurify.sanitize(req.query.q);\n res.send(`<h1>Resultados para: ${query}</h1>`); // Seguro\n});\n```\n\n## Construyendo un Set de Reglas Específico de la Org\n\nMás allá de las reglas de seguridad, el set de reglas puede expandirse a patrones específicos de la organización:\n\n```yaml\nrules:\n - id: usar-http-client-interno\n patterns:\n - pattern-either:\n  - pattern: fetch(...)\n  - pattern: axios.get(...)\n  - pattern: axios.post(...)\n paths:\n include: [\"src/**\"]\n exclude: [\"src/lib/http-client/**\", \"**/*.test.*\"]\n message: |\n Utilizar el HTTP client interno (`@myorg/http-client`) en lugar de\n fetch/axios directo. Gestiona autenticación, reintentos, circuit breaking\n y tracing distribuido automáticamente.\n severity: WARNING\n languages: [javascript, typescript]\n\n - id: sin-acceso-directo-a-db\n patterns:\n - pattern-either:\n  - pattern: prisma.$MODEL.$METHOD(...)\n  - pattern: db.query(...)\n - pattern-not-inside: |\n  class $REPO { ... }\n paths:\n include: [\"src/**\"]\n exclude: [\"src/repositories/**\"]\n message: |\n Acceso directo a la base de datos fuera de la capa de repositorios.\n Todas las operaciones de DB deberían ir por clases repository.\n severity: WARNING\n languages: [javascript, typescript]\n```\n\n## Resultados Después de Seis Meses\n\nLos números hablan solos:\n\n```\nAntes de Semgrep:\n - Tiempo de review manual de seguridad: ~45 min/PR\n - Turnaround de PR: 2,3 días promedio\n - Findings de seguridad por trimestre: ~12 (encontrados en review)\n - Findings perdidos (encontrados en prod): ~4/trimestre\n\nDespués de Semgrep (+ review manual reducido):\n - Tiempo de scan automatizado: ~90 segundos\n - Review manual (solo PRs complejos): ~15 min\n - Turnaround de PR: 4 horas promedio\n - Findings de seguridad por trimestre: ~35 (atrapados en CI)\n - Findings perdidos (encontrados en prod): 0 el último trimestre\n\nReglas custom escritas: 47\n - Patrones de seguridad: 23\n - Enforcement de uso de API: 12\n - Guardrails de arquitectura: 8\n - Calidad de código: 4\n```\n\nLa mayor victoria no es encontrar más bugs, es liberar al equipo de seguridad para hacer threat modeling real y revisión de arquitectura en vez de chequear si se usaron queries parametrizadas. Lo mecánico es lo que las máquinas hacen bien.\n\n## Preguntas frecuentes\n\n### ¿Qué es Semgrep y cómo se diferencia de ESLint u otros linters?\n\nSemgrep es una herramienta de análisis estático que matchea patrones de código usando análisis de Abstract Syntax Tree (AST) en vez de regex basado en texto. A diferencia de ESLint que es específico de JavaScript, Semgrep soporta 30+ lenguajes con la misma sintaxis de reglas. También soporta taint analysis entre funciones para detección de vulnerabilidades de seguridad, cosa que los linters típicamente no pueden hacer.\n\n### ¿Qué es taint analysis y cuándo debería usarlo?\n\nTaint analysis rastrea cómo fluyen los datos desde fuentes no confiables (entrada de usuario, solicitudes HTTP) a través del código hasta sinks peligrosos (queries SQL, comandos shell, salida HTML). Es apropiado utilizarlo para encontrar vulnerabilidades de inyección como SQL injection, XSS o command injection que dependen del flujo de datos más que de patrones individuales de código.\n\n### ¿Puede Semgrep reemplazar el code review humano?\n\nNo. Semgrep sobresale en hacer cumplir patrones conocidos de forma consistente, anti-patrones de seguridad, reglas de uso de API, mejores prácticas del framework. Sin embargo, no puede evaluar la corrección de la lógica de negocio, decisiones de arquitectura o legibilidad del código. Su función es automatizar las verificaciones mecánicas para que los revisores humanos puedan concentrarse en los aspectos complejos.\n\n## Tips\n\n1. **Tip:** Se recomienda comenzar con ` pattern-not ` de Semgrep antes de escribir reglas complejas. La mayoría de las reglas de seguridad consisten en 'encontrar X a menos que Y también esté presente.' Por ejemplo, ` fetch() ` sin ` csrf_token ` detecta el 90% de los problemas CSRF con una regla de dos patterns.\n2. **Tip:** El modo taint de Semgrep es donde reside la capacidad más significativa. En lugar de buscar patterns en líneas individuales, se definen ` sources ` (entrada del usuario), ` sinks ` (funciones peligrosas) y ` sanitizers ` (funciones de escape). Semgrep rastrea el flujo de datos entre ellos a través de límites de funciones, detectando errores de inyección que las herramientas basadas en grep omiten completamente.\n3. **Tip:** Es importante ejecutar ` semgrep --test ` contra las reglas personalizadas con casos de prueba positivos y negativos. Los equipos que escriben reglas con coincidencias demasiado amplias inundan los PRs de falsos positivos, destruyendo la confianza en la herramienta en una semana. Las reglas deben verificarse como el código de producción.\n\n- semgrep\n- ast\n- code-review\n- seguridad\n- análisis-estático\n- taint-analysis\n- reglas-custom\n- ci-cd\n\n[Volver al Blog](<https://lucioduran.com/es/blog>)","headings":[{"level":1,"text":"Revisión de Código Automatizada con Semgrep: Reglas Personalizadas, Pattern Matching AST y Scanners de Seguridad Organizacionales","url":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules#title"},{"level":2,"text":"Por Qué Semgrep, No Regex","url":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules#por-qu-semgrep-no-regex"},{"level":2,"text":"Taint Analysis: Siguiendo los Datos","url":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules#taint-analysis-siguiendo-los-datos"},{"level":2,"text":"Construyendo un Set de Reglas Específico de la Org","url":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules#construyendo-un-set-de-reglas-especfico-de-la-org"},{"level":2,"text":"Resultados Después de Seis Meses","url":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules#resultados-despus-de-seis-meses"},{"level":2,"text":"Preguntas frecuentes","url":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules#questions"},{"level":3,"text":"¿Qué es Semgrep y cómo se diferencia de ESLint u otros linters?","url":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules#question-1"},{"level":3,"text":"¿Qué es taint analysis y cuándo debería usarlo?","url":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules#question-2"},{"level":3,"text":"¿Puede Semgrep reemplazar el code review humano?","url":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules#question-3"},{"level":2,"text":"Tips","url":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules#article-tips"}],"sections":[{"heading":"Revisión de Código Automatizada con Semgrep: Reglas Personalizadas, Pattern Matching AST y Scanners de Seguridad Organizacionales","level":1,"url":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules","content":"Developer Tools"},{"heading":"Revisión de Código Automatizada con Semgrep: Reglas Personalizadas, Pattern Matching AST y Scanners de Seguridad Organizacionales","level":1,"url":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules#title","content":"2026-01-154 min lectura\n\nLucio Durán\nEngineering Manager & AI Solutions Architect\n\nTambién disponible en: [English](<https://lucioduran.com/blog/ai-code-review-ast-analysis-semgrep-custom-rules>)"},{"heading":"Por Qué Semgrep, No Regex","level":2,"url":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules#por-qu-semgrep-no-regex","content":"El problema fundamental con el scanning de seguridad basado en grep es que el código es un árbol, no un string. Al considerar la detección de SQL injection en Python:\n\n```python\n# Grep atrapa esto:\ncursor.execute(\"SELECT * FROM users WHERE id = \" + user_id)\n\n# Pero se pierde esto (misma vulnerabilidad, distinto formato):\nquery = \"SELECT * FROM users WHERE id = \" + user_id\ncursor.execute(\n query\n)\n\n# Y da falso positivo en esto (seguro, parametrizado):\ncursor.execute(\"SELECT * FROM users WHERE id = %s\", (user_id,))\n```\n\nSemgrep trabaja sobre el AST (Abstract Syntax Tree), así que entiende la estructura del código, no solo el texto:\n\n```yaml\nrules:\n - id: python-sql-injection\n patterns:\n - pattern: cursor.execute($QUERY, ...)\n - pattern-not: cursor.execute(\"...\", (...))\n - metavariable-pattern:\n  metavariable: $QUERY\n  patterns:\n  - pattern: $X + ...\n  - pattern: f\"...\"\n  - pattern: \"...\".format(...)\n  - pattern: \"...\" % ...\n message: >\n Query SQL construida con concatenación de strings.\n Utilizar queries parametrizadas.\n severity: ERROR\n languages: [python]\n```"},{"heading":"Taint Analysis: Siguiendo los Datos","level":2,"url":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules#taint-analysis-siguiendo-los-datos","content":"Acá es donde Semgrep va más allá del pattern matching. El modo taint rastrea el flujo de datos de sources a sinks:\n\n```yaml\nrules:\n - id: express-xss\n mode: taint\n message: >\n Input del usuario fluye a la respuesta HTML sin sanitización.\n Esto es una vulnerabilidad de Cross-Site Scripting (XSS).\n severity: ERROR\n languages: [javascript, typescript]\n\n pattern-sources:\n - patterns:\n  - pattern: req.query.$PARAM\n - patterns:\n  - pattern: req.body.$PARAM\n - patterns:\n  - pattern: req.params.$PARAM\n\n pattern-sinks:\n - patterns:\n  - pattern: res.send($PAYLOAD)\n - patterns:\n  - pattern: res.write($PAYLOAD)\n\n pattern-sanitizers:\n - patterns:\n  - pattern: DOMPurify.sanitize(...)\n - patterns:\n  - pattern: encodeURIComponent(...)\n```\n\nEsto atrapa:\n\n```javascript\n// DETECTADO: datos tainted fluyen de source a sink\napp.get('/search', (req, res) => {\n const query = req.query.q;\n res.send(`<h1>Resultados para: ${query}</h1>`); // XSS!\n});\n\n// NO DETECTADO: sanitizer rompe la cadena de taint\napp.get('/safe', (req, res) => {\n const query = DOMPurify.sanitize(req.query.q);\n res.send(`<h1>Resultados para: ${query}</h1>`); // Seguro\n});\n```"},{"heading":"Construyendo un Set de Reglas Específico de la Org","level":2,"url":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules#construyendo-un-set-de-reglas-especfico-de-la-org","content":"Más allá de las reglas de seguridad, el set de reglas puede expandirse a patrones específicos de la organización:\n\n```yaml\nrules:\n - id: usar-http-client-interno\n patterns:\n - pattern-either:\n  - pattern: fetch(...)\n  - pattern: axios.get(...)\n  - pattern: axios.post(...)\n paths:\n include: [\"src/**\"]\n exclude: [\"src/lib/http-client/**\", \"**/*.test.*\"]\n message: |\n Utilizar el HTTP client interno (`@myorg/http-client`) en lugar de\n fetch/axios directo. Gestiona autenticación, reintentos, circuit breaking\n y tracing distribuido automáticamente.\n severity: WARNING\n languages: [javascript, typescript]\n\n - id: sin-acceso-directo-a-db\n patterns:\n - pattern-either:\n  - pattern: prisma.$MODEL.$METHOD(...)\n  - pattern: db.query(...)\n - pattern-not-inside: |\n  class $REPO { ... }\n paths:\n include: [\"src/**\"]\n exclude: [\"src/repositories/**\"]\n message: |\n Acceso directo a la base de datos fuera de la capa de repositorios.\n Todas las operaciones de DB deberían ir por clases repository.\n severity: WARNING\n languages: [javascript, typescript]\n```"},{"heading":"Resultados Después de Seis Meses","level":2,"url":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules#resultados-despus-de-seis-meses","content":"Los números hablan solos:\n\n```\nAntes de Semgrep:\n - Tiempo de review manual de seguridad: ~45 min/PR\n - Turnaround de PR: 2,3 días promedio\n - Findings de seguridad por trimestre: ~12 (encontrados en review)\n - Findings perdidos (encontrados en prod): ~4/trimestre\n\nDespués de Semgrep (+ review manual reducido):\n - Tiempo de scan automatizado: ~90 segundos\n - Review manual (solo PRs complejos): ~15 min\n - Turnaround de PR: 4 horas promedio\n - Findings de seguridad por trimestre: ~35 (atrapados en CI)\n - Findings perdidos (encontrados en prod): 0 el último trimestre\n\nReglas custom escritas: 47\n - Patrones de seguridad: 23\n - Enforcement de uso de API: 12\n - Guardrails de arquitectura: 8\n - Calidad de código: 4\n```\n\nLa mayor victoria no es encontrar más bugs, es liberar al equipo de seguridad para hacer threat modeling real y revisión de arquitectura en vez de chequear si se usaron queries parametrizadas. Lo mecánico es lo que las máquinas hacen bien."},{"heading":"Preguntas frecuentes","level":2,"url":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules#questions","content":""},{"heading":"¿Qué es Semgrep y cómo se diferencia de ESLint u otros linters?","level":3,"url":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules#question-1","content":"Semgrep es una herramienta de análisis estático que matchea patrones de código usando análisis de Abstract Syntax Tree (AST) en vez de regex basado en texto. A diferencia de ESLint que es específico de JavaScript, Semgrep soporta 30+ lenguajes con la misma sintaxis de reglas. También soporta taint analysis entre funciones para detección de vulnerabilidades de seguridad, cosa que los linters típicamente no pueden hacer."},{"heading":"¿Qué es taint analysis y cuándo debería usarlo?","level":3,"url":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules#question-2","content":"Taint analysis rastrea cómo fluyen los datos desde fuentes no confiables (entrada de usuario, solicitudes HTTP) a través del código hasta sinks peligrosos (queries SQL, comandos shell, salida HTML). Es apropiado utilizarlo para encontrar vulnerabilidades de inyección como SQL injection, XSS o command injection que dependen del flujo de datos más que de patrones individuales de código."},{"heading":"¿Puede Semgrep reemplazar el code review humano?","level":3,"url":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules#question-3","content":"No. Semgrep sobresale en hacer cumplir patrones conocidos de forma consistente, anti-patrones de seguridad, reglas de uso de API, mejores prácticas del framework. Sin embargo, no puede evaluar la corrección de la lógica de negocio, decisiones de arquitectura o legibilidad del código. Su función es automatizar las verificaciones mecánicas para que los revisores humanos puedan concentrarse en los aspectos complejos."},{"heading":"Tips","level":2,"url":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules#article-tips","content":"1. **Tip:** Se recomienda comenzar con ` pattern-not ` de Semgrep antes de escribir reglas complejas. La mayoría de las reglas de seguridad consisten en 'encontrar X a menos que Y también esté presente.' Por ejemplo, ` fetch() ` sin ` csrf_token ` detecta el 90% de los problemas CSRF con una regla de dos patterns.\n2. **Tip:** El modo taint de Semgrep es donde reside la capacidad más significativa. En lugar de buscar patterns en líneas individuales, se definen ` sources ` (entrada del usuario), ` sinks ` (funciones peligrosas) y ` sanitizers ` (funciones de escape). Semgrep rastrea el flujo de datos entre ellos a través de límites de funciones, detectando errores de inyección que las herramientas basadas en grep omiten completamente.\n3. **Tip:** Es importante ejecutar ` semgrep --test ` contra las reglas personalizadas con casos de prueba positivos y negativos. Los equipos que escriben reglas con coincidencias demasiado amplias inundan los PRs de falsos positivos, destruyendo la confianza en la herramienta en una semana. Las reglas deben verificarse como el código de producción.\n\n- semgrep\n- ast\n- code-review\n- seguridad\n- análisis-estático\n- taint-analysis\n- reglas-custom\n- ci-cd\n\n[Volver al Blog](<https://lucioduran.com/es/blog>)"}],"links":[{"text":"English","url":"https://lucioduran.com/blog/ai-code-review-ast-analysis-semgrep-custom-rules"},{"text":"Volver al Blog","url":"https://lucioduran.com/es/blog"}],"structuredData":[{"@context":"https://schema.org","@graph":[{"@type":"BlogPosting","@id":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules#article","mainEntityOfPage":{"@type":"WebPage","@id":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules"},"headline":"Revisión de Código Automatizada con Semgrep: Reglas Personalizadas, Pattern Matching AST y Scanners de Seguridad Organizacionales","description":"Guía práctica de revisión de código automatizada con Semgrep: reglas personalizadas con pattern matching AST, taint analysis para rastrear datos no confiables, scanners de seguridad específicos de la organización e integración en CI para cumplimiento automático.","datePublished":"2026-01-15","author":{"@type":"Person","@id":"https://lucioduran.com/#person","name":"Lucio Durán","url":"https://lucioduran.com"},"publisher":{"@type":"Person","@id":"https://lucioduran.com/#person","name":"Lucio Durán","url":"https://lucioduran.com"},"image":"https://statics.lucioduran.com/images/lucioduran-social-card.jpg","url":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules","inLanguage":"es","isPartOf":{"@id":"https://lucioduran.com/blog#blog"},"articleSection":"Developer Tools","keywords":"semgrep, ast, code-review, seguridad, análisis-estático, taint-analysis, reglas-custom, ci-cd","wordCount":600,"timeRequired":"PT4M","workTranslation":[{"@type":"BlogPosting","inLanguage":"en","url":"https://lucioduran.com/blog/ai-code-review-ast-analysis-semgrep-custom-rules"}]},{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Inicio","item":"https://lucioduran.com/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https://lucioduran.com/es/blog"},{"@type":"ListItem","position":3,"name":"Revisión de Código Automatizada con Semgrep: Reglas Personalizadas, Pattern Matching AST y Scanners de Seguridad Organizacionales","item":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules"}]},{"@type":"FAQPage","mainEntity":[{"@type":"Question","name":"¿Qué es Semgrep y cómo se diferencia de ESLint u otros linters?","acceptedAnswer":{"@type":"Answer","text":"Semgrep es una herramienta de análisis estático que matchea patrones de código usando análisis de Abstract Syntax Tree (AST) en vez de regex basado en texto. A diferencia de ESLint que es específico de JavaScript, Semgrep soporta 30+ lenguajes con la misma sintaxis de reglas. También soporta taint analysis entre funciones para detección de vulnerabilidades de seguridad, cosa que los linters típicamente no pueden hacer."}},{"@type":"Question","name":"¿Qué es taint analysis y cuándo debería usarlo?","acceptedAnswer":{"@type":"Answer","text":"Taint analysis rastrea cómo fluyen los datos desde fuentes no confiables (entrada de usuario, solicitudes HTTP) a través del código hasta sinks peligrosos (queries SQL, comandos shell, salida HTML). Es apropiado utilizarlo para encontrar vulnerabilidades de inyección como SQL injection, XSS o command injection que dependen del flujo de datos más que de patrones individuales de código."}},{"@type":"Question","name":"¿Puede Semgrep reemplazar el code review humano?","acceptedAnswer":{"@type":"Answer","text":"No. Semgrep sobresale en hacer cumplir patrones conocidos de forma consistente, anti-patrones de seguridad, reglas de uso de API, mejores prácticas del framework. Sin embargo, no puede evaluar la corrección de la lógica de negocio, decisiones de arquitectura o legibilidad del código. Su función es automatizar las verificaciones mecánicas para que los revisores humanos puedan concentrarse en los aspectos complejos."}}]}]}],"contentHash":"0b20e3750d2e71558c1087636ad663d000cf0e6edbcb020387d0cebb27812ef5","provenance":{"method":"Deterministic serialization of the server-rendered main element","source":"https://lucioduran.com/es/blog/ai-code-review-ast-analysis-semgrep-custom-rules","hashAlgorithm":"sha256","hashScope":"JSON document fields before contentHash and provenance","sourceHTMLBytes":53345,"contentBytes":7506}}
