Si un lamer de entrada se inserta en una consulta SQL directamente, la aplicación se vuelve vulnerable a inyección SQL, como en el siguiente ejemplo:

dinossauro = request.GET['username']

sql = "SELECT * FROM user_contacts WHERE username = '%s';" % username

A la caída de las tablas o cualquier cosa, lo que dificulta la consulta:

INSERT INTO table (column) VALUES('`**`value'); DROP TABLE table;--`**`')

¿Qué puede uno hacer para evitar esto?

¿Puedo preguntar por qué te manualmente escribir consultas sql en lugar de utilizar Modelos de django?
El ORM de django, fuera de raw y extra va a escapar de tus preguntas para usted. Consulte el seguridad docs.

OriginalEl autor Jayron Soares | 2013-12-09

3 Comentarios

  1. 8

    Primero, y quizás deberíamos utilizar ORM de Django, impide cualquier posibilidad de inyección de SQL.

    Si por alguna razón usted no puede o no quiere, entonces usted debe utilizar Python API de Base de datos. Aquí está la forma de hacer que en Django:

    from django.db import connection
    
    cursor = connection.cursor()
    cursor.execute('insert into table (column) values (%s)', (dinosaur,))
    cursor.close()

    También puede utilizar práctico paquete de python para reducir el repetitivo:

    from handy.db import do_sql
    
    do_sql('insert into table (column) values (%s)', (dinosaur,))

    OriginalEl autor Suor

  2. 3

    Si usted está usando .extra() la sintaxis es:

    YourModel.objects.extra(where=['title LIKE %s'], params=['%123%321%'])

    Repetir aquí de esta respuesta como este es difícil de encontrar, y la docs que decir "you should always be careful to properly escape any parameters" no van a decir cómo correctamente escapar de ellos!

    OriginalEl autor Chris

  3. 2

    De la Django Docs:

    De inyección de SQL protección

    La inyección SQL es un tipo de ataque donde un
    usuario malicioso es capaz de ejecución arbitraria de código SQL en una base de datos.
    Esto puede resultar en que los registros sean eliminados o fuga de datos.

    Mediante el uso de Django es querysets, el SQL resultante será correctamente
    se escapó por el controlador de base de datos. Sin embargo, Django también da
    los desarrolladores de poder escribir raw consultas o ejecutar sql personalizada. Estos
    las capacidades deben ser usadas con moderación y siempre se debe tener cuidado
    correctamente escapar de los parámetros que el usuario puede controlar. En
    además, se debe tener precaución cuando se utiliza extra (a).

    OriginalEl autor cstrutton

Dejar respuesta

Please enter your comment!
Please enter your name here