Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

279
Vistas
¿Cuál es el punto de usar el carácter de escape "?" en lugar de una plantilla literal al construir consultas SQL en JavaScript?

Hoy en mi bootcamp comenzamos a construir y ejecutar consultas SQL en Node.js. Una vez que cubrimos los conceptos básicos, mi instructor nos mostró cómo usar "?" como un carácter de escape, que se supone que de alguna manera evita las inyecciones de SQL. Creo que entiendo la esencia de este concepto, pero estoy muy confundido en cuanto a por qué uno haría esto en lugar de poner cualquier variable que estén insertando dentro de una plantilla literal. Por ejemplo:

 db.query("DELETE FROM foo WHERE id = ?", [bar], function (err, result){})

contra

 db.query(`DELETE FROM foo WHERE id = ${bar}`, function (err, result){})

Mi instructor no siempre es el mejor en instruir, pero ha demostrado tener mucho conocimiento, así que confío en que esto sea por una razón. En el pasado, notamos que a menudo usa técnicas más antiguas que han sido reemplazadas en gran medida por adiciones más recientes al lenguaje; ¿Es tal vez un caso de él haciendo eso?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Interpolación directa como

 `DELETE FROM foo WHERE id = ${bar}`

es una mala idea porque si la bar se genera dinámicamente, como si se tomara del usuario, esto podría conducir a una inyección de SQL. Consulte Mesas Bobby .

Si bien, en teoría, sería posible tomar una cadena de entrada y hacer su propio intento de desinfectarla adecuadamente y luego interpolar el resultado directamente, si se equivoca, tendrá problemas. Como resultado, los controladores de la base de datos a menudo proporcionan una forma diferente de pasar la entrada posiblemente no confiable, de modo que todo eso se puede abstraer al controlador de la base de datos, lo que hace que sea mucho más fácil para los desarrolladores. De esa manera, en lugar de que cada usuario individual tenga que implementarlo (y esperar que lo haga correctamente), el controlador de la base de datos puede implementarlo una vez y hacer que todos lo usen en su lugar.

Para este caso particular, mysql analizará la cadena que pasa y reemplazará ? s con versiones correctamente escapadas del segundo parámetro.

En el pasado, notamos que a menudo usa técnicas más antiguas que han sido reemplazadas en gran medida por adiciones más recientes al lenguaje; ¿Es tal vez un caso de él haciendo eso?

No, el enfoque que muestra en su pregunta es muy normal y moderno.

about 4 years ago · Juan Pablo Isaza Denunciar

0

El primer parámetro se asigna al primer signo de interrogación. Este cambio mínimo garantiza que los valores de entrada se escapen y, como tal, evita un ataque de inyección SQL aquí.

mira esta publicación ¿por qué usamos? en consultas.
¿Cuál es el significado del signo de interrogación en MySQL en "WHERE column =?"?

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda