SQLインジェクション（SQLI）は、Webの脆弱性の最も危険なクラスの1つです。ありがたいことに、それはますますまれになっています - 主にDjangoのORMのようなデータベース抽象化レイヤーの使用の増加のおかげで - それが発生する場合、それは壊滅的です。SQLIは、コードがユーザー入力を含むSQLクエリを誤って構築したときに発生します。
DjangoのORMはどこでもパラメーター化されたステートメントを使用するため、SQLIに対して非常に耐性があります。したがって、ORMを使用してデータベースクエリを作成する場合、アプリが安全であるとかなり確信できます。

ただし、注射攻撃を認識する必要がある場合はまだいくつかあります。非常に少数のAPIは100％安全ではありません。これらは、監査に焦点を合わせる必要があり、自動化されたコード分析がチェックに焦点を合わせる必要がある場所です。
1.生のクエリ：時々、ORMは十分に表現力がなく、生のSQLが必要です。あなたがする前に、それを避ける方法があるかどうかを検討してください
2.回避：queryset.extra（）
3.パラメーター化されたステートメントを常に渡す - パラメーターリストが空であっても
SQL Injection (SQLi) is one of the most dangerous classes of web vulnerabilities. Thankfully, it’s becoming increasingly rare — thanks mostly to increasing use of database abstraction layers like Django’s ORM — but where it occurs it can be devastating. SQLi happens when code incorrectly constructs SQL queries that contain user input. 
Django’s ORM uses parameterized statements everywhere, so it is highly resistant to SQLi. Thus, if you’re using the ORM to make database queries you can be fairly confident that your app is safe.

However, there are still a few cases where you need to be aware of injection attacks; a very small minority of APIs are not 100% safe. These are where you should focus your auditing, and where your automated code analysis should focus its checks.
1. Raw Queries : Occasionally, the ORM isn’t expressive enough, and you need raw SQL. Before you do, consider whether there are ways to avoid it
2. AVOID: Queryset.extra()
3. Always pass parameterized statements — even if your parameter list is empty