如何在PYTHON-DJANGO中阻止SQL注入?

Jay*_*res 15 python sql security django sql-injection

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

dinossauro = request.GET['username']

sql = "SELECT * FROM user_contacts WHERE username = '%s';" % username
Run Code Online (Sandbox Code Playgroud)

删除表或任何东西 - 进行查询:

INSERT INTO table (column) VALUES('`**`value'); DROP TABLE table;--`**`')
Run Code Online (Sandbox Code Playgroud)

有什么办法可以防止这种情况发生?

Suo*_*uor 10

首先,您可能应该只使用Django ORM,它将阻止任何SQL注入的可能性.

如果由于任何原因你不能或不想那么你应该使用Python Database API.这是你在Django中通常这样做的方式:

from django.db import connection

cursor = connection.cursor()
cursor.execute('insert into table (column) values (%s)', (dinosaur,))
cursor.close()
Run Code Online (Sandbox Code Playgroud)

您还可以使用方便的 python包来减少样板:

from handy.db import do_sql

do_sql('insert into table (column) values (%s)', (dinosaur,))
Run Code Online (Sandbox Code Playgroud)


cst*_*ton 6

来自Django 文档

SQL注入保护

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

通过使用 Django 的查询集,生成的 SQL 将被底层数据库驱动程序正确转义。但是,Django 还赋予开发人员编写原始查询或执行自定义 sql 的能力。这些功能应该谨慎使用,并且您应该始终小心正确地转义用户可以控制的任何参数。此外,在使用 extra() 时应小心谨慎。