Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止PYTHON-DJANGO中的SQL注入?_Python_Sql_Django_Security_Sql Injection - Fatal编程技术网

如何防止PYTHON-DJANGO中的SQL注入?

如何防止PYTHON-DJANGO中的SQL注入?,python,sql,django,security,sql-injection,Python,Sql,Django,Security,Sql Injection,如果将lamer输入直接插入到SQL查询中,应用程序将容易受到SQL注入的攻击,如以下示例所示: dinossauro = request.GET['username'] sql = "SELECT * FROM user_contacts WHERE username = '%s';" % username 要删除表或任何内容--进行查询: INSERT INTO table (column) VALUES('`**`value'); DROP TABLE table;--`**`')

如果将lamer输入直接插入到SQL查询中,应用程序将容易受到SQL注入的攻击,如以下示例所示:

dinossauro = request.GET['username']

sql = "SELECT * FROM user_contacts WHERE username = '%s';" % username
要删除表或任何内容--进行查询:

INSERT INTO table (column) VALUES('`**`value'); DROP TABLE table;--`**`')
如何防止这种情况发生?

从以下方面:

SQL注入保护

SQL注入是一种攻击类型,其中 恶意用户能够在数据库上执行任意SQL代码。 这可能会导致记录被删除或数据泄漏

通过使用Django的QuerySet,生成的SQL将正确地 由基础数据库驱动程序转义。然而,Django也给出了 开发人员可以编写原始查询或执行自定义sql。这些 应谨慎使用功能,并且应始终小心 正确转义用户可以控制的任何参数。在里面 此外,在使用extra()时应谨慎


首先,您可能应该使用,它将防止任何SQL注入的可能性

如果出于任何原因,你不能或不想这样做,那么你应该使用。以下是您在Django中通常使用的方法:

from django.db import connection

cursor = connection.cursor()
cursor.execute('insert into table (column) values (%s)', (dinosaur,))
cursor.close()
您还可以使用python包简化样板文件:

from handy.db import do_sql

do_sql('insert into table (column) values (%s)', (dinosaur,))

如果使用的是
.extra()
,则语法为:

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

从这里重复,因为这很难找到,而且上面说的是
“您应该始终小心地正确转义任何参数”
不要继续说如何正确转义它们

我可以问您为什么要手动编写sql查询而不是使用django模型吗?
raw
extra
之外的django ORM将为您逃避查询。看。