Laboratorio de Inyección SQL

Se ejecuta localmente en tu navegador

Mira cómo la construcción insegura de SQL cambia una consulta y cómo la vinculación mantiene los valores como datos

Laboratorio educativo defensivo: las consultas solo se ejecutan sobre datos ficticios integrados en una base SQLite en memoria. No hay URL ni objetivo externo.

Entrada

Una sola sentencia SQL con {{value}} exactamente una vez donde va el valor del usuario.

Trátalo como entrada no confiable de un formulario, una URL o una petición API.

Contexto del marcador
Literal de texto

Datos semilla (ficticios): users(id, email, role) con 5 filas y orders(id, user_id, amount) con 6 filas. Cada lado usa su propia copia.

Qué hace SQL Injection Safety Lab

SQL Injection Safety Lab muestra, lado a lado, qué ocurre cuando un valor controlado por el usuario se pega en el texto SQL frente a cuando se vincula como parámetro. La consulta insegura resalta qué caracteres del valor se interpretaron como SQL (comillas cerradas, condiciones OR añadidas, comentarios, cláusulas extra), mientras que la consulta parametrizada mantiene fijo el texto SQL y muestra el valor aparte como dato. Es una herramienta de aprendizaje defensivo, no un escáner de vulnerabilidades: no hay entrada de URL ni objetivo externo.

Cómo usarlo
  1. 1.Carga un ejemplo o escribe una sentencia SQL que contenga {{value}} exactamente una vez.
  2. 2.Escribe el valor controlado por el usuario. Las consultas insegura y parametrizada y la explicación se actualizan al escribir.
  3. 3.Pulsa Ejecutar comparación para ejecutar ambas consultas sobre datos semilla ficticios en un sandbox SQLite en memoria y comparar las filas devueltas o modificadas.
  4. 4.Abre Código seguro para copiar una versión parametrizada para PostgreSQL, MySQL, SQLite o SQL Server en SQL, JavaScript/TypeScript, Python, PHP, Java o Go.
  5. 5.Restablecer base de datos recupera los datos semilla tras cualquier escritura.
Vincular valores y usar listas permitidas para identificadores

Los valores van en parámetros: PostgreSQL usa $1, MySQL y SQLite usan ?, SQL Server usa @p1, y los drivers tienen sus propias convenciones, como %s en psycopg o :name en PDO. El laboratorio sigue cada driver al generar código. Los nombres de tablas, columnas y campos de ORDER BY no se pueden vincular, así que la ruta segura asigna la entrada a un identificador fijo de una lista permitida y rechaza todo lo demás. La pestaña Revisor de código analiza el código pegado en busca de SQL interpolado, formateado o concatenado e informa cada coincidencia como posible riesgo de inyección SQL, porque no rastrea el origen de los valores.

Sandbox, límites y privacidad

Solo se ejecuta SQLite, dentro de un Web Worker con una compilación WebAssembly de sql.js alojada en el propio sitio. Cada lado de la comparación usa su propia copia en memoria de usuarios y pedidos ficticios, así que una escritura insegura nunca afecta al resultado seguro. Se ejecuta una sentencia por lado; las sentencias apiladas se informan en lugar de ejecutarse. Las consultas se detienen a los 3 segundos, los resultados muestran como máximo 100 filas y 16 columnas, las plantillas se limitan a 4.000 caracteres y los valores a 500. Los fragmentos de PostgreSQL, MySQL y SQL Server son solo de referencia. Las plantillas, valores y código permanecen en tu navegador y nunca se envían a un servidor ni a analítica.

CodingTool ya está oficialmente disponible en

Launched on StartupBaseCodingTool.dev - Free, Fast & Easy Developer Tools in One Place | Product HuntCodingTool - Featured on Startup FameFazier badgeListed on Turbo0Featured on Twelve ToolsFeatured on Findly.tools