[{"data":1,"prerenderedAt":74},["ShallowReactive",2],{"article-como-proteger-tus-servidores-de-inyecciones-sql-y-otros-ataques-a-bases-de-datos":3},{"editorial_managed":4,"editorial_preview":5,"editorial_type":6,"title":7,"slug":8,"href":9,"description":10,"category":11,"category_slug":12,"author":13,"date":14,"updated_at":15,"read_time":16,"cover_image":17,"cover_alt":18,"cover_width":19,"cover_height":20,"cover_small":18,"social_alt":18,"preview_image":17,"social_image":17,"social_width":19,"social_height":20,"social_type":21,"seo_title":7,"seo_description":10,"html":22,"toc":23,"related":42,"tags":60},true,false,"Referencia técnica","Cómo prevenir inyección SQL en una aplicación","como-proteger-tus-servidores-de-inyecciones-sql-y-otros-ataques-a-bases-de-datos","\u002Fes-mx\u002Frecursos\u002Fcomo-proteger-tus-servidores-de-inyecciones-sql-y-otros-ataques-a-bases-de-datos","Entiende cómo ocurre una inyección SQL y qué prácticas de desarrollo permiten separar los datos recibidos de las instrucciones de una consulta.","Seguridad web","seguridad-web","Acinsoft","2023-03-08 15:10:55","2026-09-17 00:00:00",3,"\u002Fimages\u002Feditorial-20260913\u002F031-social.jpg","",1200,630,"image\u002Fjpeg","\u003Cp class=\"lead\">La inyección SQL ocurre cuando datos recibidos por una aplicación pueden alterar una consulta a la base de datos. La corrección principal está en cómo se construyen y ejecutan las consultas.\u003C\u002Fp>\u003Ch2 id=\"articulo-seccion-1\">La defensa que debe revisar desarrollo\u003C\u002Fh2>\u003Cp>OWASP recomienda consultas parametrizadas como una defensa central frente a inyección SQL. Los valores se tratan como datos, en lugar de concatenarlos como instrucciones. \u003Ca href=\"https:\u002F\u002Fcheatsheetseries.owasp.org\u002Fcheatsheets\u002FSQL_Injection_Prevention_Cheat_Sheet.html\" target=\"_blank\" rel=\"noopener noreferrer\">Prevención de inyección SQL\u003C\u002Fa>.\u003C\u002Fp>\u003Cp>No basta con “limpiar caracteres” de forma general. La validación depende del dato esperado, y ciertos elementos de una consulta requieren decisiones de diseño adicionales.\u003C\u002Fp>\u003Ch2 id=\"articulo-seccion-2\">Ejemplo mínimo: datos separados de la consulta\u003C\u002Fh2>\u003Cp>Este fragmento de Python utiliza SQLite en memoria y datos ficticios. La consulta conserva su estructura; el nombre se entrega como parámetro.\u003C\u002Fp>\u003Cpre tabindex=\"0\" aria-label=\"Ejemplo de código\">\u003Ccode>import sqlite3\n\ndb = sqlite3.connect(\":memory:\")\ndb.execute(\"CREATE TABLE clientes (nombre TEXT)\")\ndb.execute(\"INSERT INTO clientes VALUES (?)\", (\"O'Connor\",))\n\nnombre = \"O'Connor\"\nfila = db.execute(\n    \"SELECT nombre FROM clientes WHERE nombre = ?\", (nombre,)\n).fetchone()\nassert fila == (\"O'Connor\",)\ndb.close()\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>El apóstrofo es parte del dato y no necesita convertirse en una concatenación SQL. La interfaz exacta depende del controlador; en Python, la documentación de \u003Ca href=\"https:\u002F\u002Fdocs.python.org\u002F3\u002Flibrary\u002Fsqlite3.html\" target=\"_blank\" rel=\"noopener noreferrer\">sqlite3\u003C\u002Fa> explica los marcadores de parámetros. Los nombres de columnas y el ordenamiento dinámico requieren decisiones adicionales, como seleccionar opciones permitidas; no se tratan igual que un valor parametrizado.\u003C\u002Fp>\u003Cp>Esta comprobación demuestra el comportamiento del ejemplo, no la seguridad completa de una aplicación. Revisa también autorización, permisos y otros puntos donde se construyen consultas.\u003C\u002Fp>\n\u003Ch2 id=\"articulo-seccion-3\">Qué pedir en una revisión\u003C\u002Fh2>\u003Col>\u003Cli>Localizar consultas construidas a partir de entradas externas.\u003C\u002Fli>\u003Cli>Revisar parametrización y bibliotecas utilizadas.\u003C\u002Fli>\u003Cli>Comprobar permisos de la cuenta de aplicación.\u003C\u002Fli>\u003Cli>Verificar errores y registros sin exponer información sensible.\u003C\u002Fli>\u003Cli>Ejecutar pruebas autorizadas sobre los puntos corregidos.\u003C\u002Fli>\u003C\u002Fol>\u003Ch2 id=\"articulo-seccion-4\">El papel de otras capas\u003C\u002Fh2>\u003Cp>Un WAF puede ayudar a filtrar determinados patrones, pero no sustituye corregir el código. Limitar la exposición de la base de datos y sus permisos reduce otros riesgos y puede contener el impacto de un fallo.\u003C\u002Fp>\u003Ch2 id=\"articulo-seccion-5\">Cómo aceptar una corrección\u003C\u002Fh2>\u003Cp>Pide evidencia de la consulta corregida y de que la operación legítima sigue funcionando. Revisa también rutas similares: corregir un formulario no demuestra que todas las consultas estén protegidas.\u003C\u002Fp>\u003Cp>Si administras el negocio, no necesitas ejecutar pruebas ofensivas por tu cuenta. Identifica qué aplicación maneja la información, quién mantiene su código y qué evidencia entregará para dar seguimiento a la corrección.\u003C\u002Fp>\n\n\u003Cp>Para profundizar en las tareas relacionadas: \u003Ca href=\"\u002Fes-mx\u002Frecursos\u002Fintroduccion-a-las-pruebas-unitarias-y-su-importancia-en-el-desarrollo-de-software\" rel=\"noopener noreferrer\">Qué comprueban las pruebas unitarias\u003C\u002Fa>; \u003Ca href=\"\u002Fes-mx\u002Frecursos\u002Fque-es-un-waf-web-application-firewall-y-como-protege-tu-sitio-web\" rel=\"noopener noreferrer\">Qué hace un WAF para proteger una aplicación\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cdiv class=\"cta\">\u003Ch2 id=\"articulo-seccion-6\">¿Necesitas revisar una aplicación?\u003C\u002Fh2>\u003Cp>Comparte qué aplicación utilizas, quién mantiene su código y qué comportamiento necesitas corregir. Primero hay que delimitar el trabajo y la evidencia disponible.\u003C\u002Fp>\u003Ca href=\"\u002Fes-mx\u002Fservicios\u002Fdesarrollo-software\" rel=\"noopener noreferrer\">Conocer desarrollo de software\u003C\u002Fa>\u003C\u002Fdiv>\n",[24,27,30,33,36,39],{"id":25,"title":26},"articulo-seccion-1","La defensa que debe revisar desarrollo",{"id":28,"title":29},"articulo-seccion-2","Ejemplo mínimo: datos separados de la consulta",{"id":31,"title":32},"articulo-seccion-3","Qué pedir en una revisión",{"id":34,"title":35},"articulo-seccion-4","El papel de otras capas",{"id":37,"title":38},"articulo-seccion-5","Cómo aceptar una corrección",{"id":40,"title":41},"articulo-seccion-6","¿Necesitas revisar una aplicación?",[43,52],{"editorial_managed":4,"editorial_preview":5,"editorial_type":44,"title":45,"slug":46,"href":47,"description":48,"category":11,"category_slug":12,"author":13,"date":49,"updated_at":15,"read_time":50,"cover_image":51,"cover_alt":18,"cover_width":19,"cover_height":20,"cover_small":18,"social_alt":18,"preview_image":51,"social_image":51,"social_width":19,"social_height":20,"social_type":21,"seo_title":45,"seo_description":48},"Diagnóstico","Cómo saber si un WAF necesita ajustes","waf-bien-configurado-sitios-web","\u002Fes-mx\u002Frecursos\u002Fwaf-bien-configurado-sitios-web","Revisa si un WAF filtra solicitudes problemáticas sin impedir tareas legítimas de los clientes y qué evidencia reunir antes de ajustar sus reglas.","2026-06-20 04:08:31",2,"\u002Fimages\u002Feditorial-20260913\u002F089-social.jpg",{"editorial_managed":4,"editorial_preview":5,"editorial_type":53,"title":54,"slug":55,"href":56,"description":57,"category":11,"category_slug":12,"author":13,"date":58,"updated_at":15,"read_time":50,"cover_image":59,"cover_alt":18,"cover_width":19,"cover_height":20,"cover_small":18,"social_alt":18,"preview_image":59,"social_image":59,"social_width":19,"social_height":20,"social_type":21,"seo_title":54,"seo_description":57},"Guía de decisión","Cuándo necesita una aplicación una prueba de penetración","como-mantener-tus-aplicaciones-web-seguras-con-pruebas-de-penetracion","\u002Fes-mx\u002Frecursos\u002Fcomo-mantener-tus-aplicaciones-web-seguras-con-pruebas-de-penetracion","Conoce cuándo una aplicación puede necesitar una prueba de penetración y qué definir sobre alcance, autorización y revisión de los hallazgos.","2023-03-26 19:40:30","\u002Fimages\u002Feditorial-20260913\u002F021-social.jpg",[61,64,66,68,71],{"name":62,"slug":63},"bases de datos","bases-de-datos",{"name":65,"slug":65},"owasp",{"name":67,"slug":12},"seguridad web",{"name":69,"slug":70},"sql injection","sql-injection",{"name":72,"slug":73},"validación de entrada","validacion-de-entrada",1791093718506]