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

186
Views
¿Cómo evita los ataques de inyección de SQL en sus API de Django Rest si usa ORM nativo?

Dicen que al usar Django ORM ya estás protegido contra la mayoría de los ataques de inyección SQL. Sin embargo, quería saber si hay medidas adicionales que deberían o pueden usarse para procesar la entrada del usuario. ¿Alguna biblioteca como Bleach?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

El principal peligro de usar un ORM de Django es que puede brindarles a los usuarios una herramienta poderosa para seleccionar, filtrar y agregar campos arbitrarios.

De hecho, supongamos, por ejemplo, que crea un formulario que permite a los usuarios seleccionar los campos para devolver, luego puede implementar esto como:

 data = MyModel.objects.values(*request.GET .getlist('fields') )

Si MyModel tiene una ForeignKey para el modelo de usuario llamado owner , entonces el usuario podría falsificar una solicitud con owner__password como campo y, por lo tanto, recuperar las contraseñas ( hash ). Si bien Django almacena para su modelo User predeterminado una contraseña cifrada, aún significa que los datos cifrados están expuestos y podría facilitar la recuperación de las contraseñas.

Pero incluso si no hay un modelo de usuario, puede resultar en el hecho de que los usuarios pueden falsificar solicitudes donde usan enlaces a datos confidenciales y, por lo tanto, pueden recuperar una gran cantidad de datos confidenciales. Lo mismo puede suceder con el filtrado arbitrario, la anotación, la agregación, etc.

Por lo tanto, lo que debe hacer es mantener una lista de valores aceptables y verificar que la solicitud solo contenga estos valores, por ejemplo:

 acceptable = {'title', 'description', 'created_at'} data = [field for field in request.GET.getlist('fields') if field in acceptable ] data = MyModel.objects.values(*data)

Si, por ejemplo, utiliza paquetes como django-filter [readthedocs.io] , enumera los campos que se pueden filtrar y qué búsquedas se pueden hacer para estos campos. Los demás datos en request.GET se ignorarán y, por lo tanto, evitarán el filtrado con campos arbitrarios.

over 4 years ago · Santiago Trujillo 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!