Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

286
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!