【问题标题】:Is it okay to include PKs in json response during an ajax call?可以在 ajax 调用期间在 json 响应中包含 PK 吗?
【发布时间】:2020-01-09 02:06:21
【问题描述】:

开发语言: Python

框架: Django 1.11

SQL: PostgreSQL

我有一个在表格中列出所有职位空缺的页面。在每一行的末尾,我都有一个action link,它会打开一个包含更多空缺信息的模式。

模式的数据布局已经准备好,我只需执行ajax call,以便使用与所选行相关的值更新动态数据,即月薪、办公室名称等

这是我的模态的外观:

在我的views.py 中,我抛出 ajax 响应的方式是返回一个 HttpResponse(data, content_type="application/json"),这会导致将其作为 json 响应:

以上响应是通过SELECT * 查询。其中一些数据是primary key value 的引用表,例如office 表。

我的问题是:

  1. 返回这样的 json 响应对我来说是个好主意吗?
  2. 我是否应该指定我只需要的字段而不是使用 SELECT *,这样我就不必担心这些 PK 值可能会被黑客入侵?

【问题讨论】:

  • 您应该始终尝试只选择您实际需要的列。这甚至不是安全问题。
  • 是的,我也是这么想的,我只是需要一些“更有经验”的极客来为我验证这一点……我还更新了这篇文章的标题……谢谢!
  • 您根本不应该使用 SELECT。您应该使用 Django 的模型层;然后将查询集中的相关字段序列化到响应中。
  • 是的,我将模型层用于在我自己的应用程序中创建的模型。但是,这个 job_vacancy 表存在于一个单独的数据库中,主要通过一个单独的应用程序维护,所以我需要使用 django.db.connections 才能访问该外部数据库并执行原始 SQL 查询......

标签: javascript python django postgresql


【解决方案1】:

我认为,如果潜在利用者知道 PK,这取决于您可以在您的网站上执行哪些其他操作。如果他们只能使用它来构造 URL,例如:https://somedomain.com/job/1234/view,那么如果返回 PK 显然不是问题。但是,如果他们可以构造一个有效负载来 POST 到一个删除端点,而您没有获得正确的跨源和功能授权,那么这确实是一个大问题!

从纯粹的安全角度来看,我的出发点始终是不返回 PK,除非您有充分的理由,并且您知道在任何需要的地方(包括访问您的数据库服务器)都有正确的安全措施。

【讨论】:

  • 非常感谢!你为我清理了一切......我现在决定只提取我只需要的字段,因为它更好更安全。
  • 我还有一个问题。像上面这样以 json 格式返回响应是否可以?因为我见过其他一些网站,他们的响应是整个模式(标记)而不是 json……例如,prntscr.com/p2jvv3
  • @Michael 为什么以 JSON 格式返回数据会有问题?你对此有什么顾虑?无论如何,作为 cmets,你不应该再问其他不同的问题。
  • 只是想确认一下 ;D Anway,谢谢大家!在 cmets 上注明...
猜你喜欢
  • 2013-10-09
  • 2012-06-10
  • 1970-01-01
  • 2011-07-09
  • 2014-10-07
  • 2012-03-03
  • 1970-01-01
  • 2020-01-07
  • 2011-12-04
相关资源
最近更新 更多