【问题标题】:django form fields clean method and securitydjango 表单字段清理方法和安全性
【发布时间】:2016-01-31 12:09:11
【问题描述】:

我的网络应用程序有很多表单。我不使用 django 表单类,因为我的表单有些复杂(涉及很多 javascript),所以我自己编写表单并在服务器上处理它们。
我的问题是关于“清理”字段数据。 我知道 django 表单有一个 clean() 方法,它应该清理数据。
但是django内置的ORM不是已经清除了SQL注入类型攻击的数据了吗?

如果我有类似的代码:

field = request.POST['field']
record = SomeModel.objects.get(pk=record_id)
record.field = field
record.save()

我在我的服务器上发布了一个带有一些 javascript 的 标记,但我在这里找不到任何安全漏洞,因为 django 会清理模板中打印的数据。 那么clean()方法到底加了什么,这段代码有安全问题吗?

【问题讨论】:

  • 该代码是否存在安全问题取决于您是否使用 ssl。从 django pov 来看很好
  • 这个问题中的安全性是指服务器代码的安全性

标签: django forms security


【解决方案1】:

clean() 方法主要验证表单数据,即验证插入到表单字段中的数据是否符合字段类型并遵守某些模式。 SQL 注入保护内置于 ORM 中。因此,如果您使用 django ORM 查询集,您应该免受 SQL 注入攻击。根据docs

通过使用 Django 的查询集,生成的 SQL 将正确 被底层数据库驱动转义。

只有当您想运行 raw SQLcustom SQL 查询时,您必须正确转义用户可以控制的任何参数。

【讨论】:

  • 所以总结一下,django forms模块和clean方法在安全方面没有任何关系?
  • 在 django 中和在任何其他 Web 框架中一样,有很多可能的 security threats(阅读整个部分),您担心的是 SQL 注入。而且,是的,只要您使用 ORM 查询集,您就可以安全地避免这种情况。
猜你喜欢
  • 2021-05-05
  • 1970-01-01
  • 2014-08-06
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
  • 2014-07-15
  • 2016-08-28
  • 2014-07-17
相关资源
最近更新 更多