当前位置: 首页 > 面试题库 >

Django,如果使用原始SQL,应采取哪些步骤来避免SQL注入攻击?

堵景天
2023-03-14
问题内容

我读过ORM应该将SQL注入攻击的可能性降到最低。但是在Django中,有时ORM受到一定限制,我需要使用原始SQL。我应该采取什么步骤来避免SQL注入攻击?

目前,我知道要检查查询字符串中的分号,但除此之外就不多了。如果我使用参数化查询,是否可以解决问题?是否有任何库可以将该字符串传递给我,以便我对其进行检查?


问题答案:

该文档指出以下内容:

如果需要执行参数化查询,则可以将params参数用于raw()

>>> lname = 'Doe'
>>> Person.objects.raw('SELECT * FROM myapp_person WHERE last_name = %s', [lname])

params是参数的列表或字典。您可以%s
在查询字符串的占位符中使用列表,或%(key)s在字典中使用占位符(当然,其中的键由字典键替换),无论您的数据库引擎是什么。此类占位符将被params参数中的参数替换。

这也是使用Python的DB-API传递参数的标准方法,这将正确清理查询。

无论您做什么,都不要进行字符串插值。



 类似资料:
  • 什么是SQL注入 SQL注入攻击(SQL Injection),简称注入攻击,是Web开发中最常见的一种安全漏洞。可以用它来从数据库获取敏感信息,或者利用数据库的特性执行添加用户,导出文件等一系列恶意操作,甚至有可能获取数据库乃至系统用户最高权限。 而造成SQL注入的原因是因为程序没有有效过滤用户的输入,使攻击者成功的向服务器提交恶意的SQL查询代码,程序在接收后错误的将攻击者的输入作为查询语句的

  • 问题内容: 在下面的示例代码中,表名称是一个输入参数。在这种情况下,如何避免使用进行SQL注入。下面是示例代码,我尝试使用它来避免它,但是它不起作用。谁能告诉我如何纠正它? 输出:打印消息: 所有输入参数将完全替换,并删除一行。请让我知道如何处理这种情况。 问题答案: 您可以将表名包含在 但是,如果使用两部分命名约定,例如,则必须添加其他解析,因为这将导致: 无效的对象名称[dbo.tablena

  • 本文向大家介绍什么是sql注入?如何避免sql注入?相关面试题,主要包含被问及什么是sql注入?如何避免sql注入?时的应答技巧和注意事项,需要的朋友参考一下 用户根据系统的程序构造非法的参数从而导致程序执行不是程序员期望的恶意SQL语句。使用参数化的SQL就可以避免SQL注入。 详细参考复习ppt。举例子,摆事实! 1' or 1=1

  • 问题内容: 这是我的代码: 有人可以告诉我它是否安全或是否容易受到SQL Injection攻击或其他SQL攻击吗? 问题答案: 有人可以告诉我它是否安全或是否容易受到SQL Injection攻击或其他SQL攻击吗? 正如uri2x所说的,请参阅SQL注入。 防止SQL注入的最佳方法是使用准备好的语句。它们将数据(您的参数)与指令(SQL查询字符串)分开,并且不会为数据留下任何空间污染查询的结构

  • 这是我的代码: 有人可以告诉我它是否安全,或者它是否容易受到SQL注入攻击或其他SQL攻击吗?

  • 本文向大家介绍Java Web 如何避免 SQL 注入?相关面试题,主要包含被问及Java Web 如何避免 SQL 注入?时的应答技巧和注意事项,需要的朋友参考一下 使用预处理 PreparedStatement。 使用正则表达式过滤掉字符中的特殊字符。