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

185
Vistas
¿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 Respuestas
Responde la pregunta

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 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