【问题标题】:Is meteor's package aldeed:autoform insecure?流星的包aldeed:autoform不安全吗?
【发布时间】:2016-10-08 13:32:51
【问题描述】:

在我过去几周学习 Meteor 的过程中,试图构建一个简单的 crud 并经过一些验证,我偶然发现了一些东西。

直到今天,我一直试图将我的 Collection Schema 保留在服务器端,并且在客户端呈现 Schemas 服务器验证时遇到了一些困难,所以我添加了 aldeed:autoform。

当我开始使用 autoform 时,在出现一些错误后,我惊讶地发现必须在客户端定义一个 Collection 的 Schema 才能正常工作。

这看起来是不是有点危险?您的集合的架构是否应该在客户端上发布?

这可能是一个愚蠢的问题,我不确定。我会提前道歉:D

【问题讨论】:

  • 我不这么认为。如果你没有使用 autoform,你会有一些代码提供表单验证,它会告诉黑客哪些项目是必需的。我不认为这意味着它是一个安全漏洞
  • 但是提供验证的代码在服务器端是“安全的”,而不是在客户端,这会暴露潜在的敏感信息。

标签: meteor meteor-autoform


【解决方案1】:

您需要定义架构,以便客户端和服务器代码都可以访问它。这是因为,表单验证在客户端完成一次(应该始终被视为不安全,因为它在如下浏览器控制台中可用)和服务器端一次。服务器端验证始终被认为是安全的。因此,即使您设法通过任何方式从浏览器操作表单,如果验证不符合架构,它也会在服务器端被过滤掉只要架构附加到集合。我相信这样是安全的。

Meteor autoform page 建议您删除不安全并添加允许/拒绝规则。

如果您已经为不受信任的代码定义了正确的插入安全性 删除了 insecure 包。呼叫允许/拒绝或使用 ongoworks:security.

我为确保事情安全而采取的步骤(请注意,可能有更好的方法,因为我对流星宇宙也很陌生)

  1. 删除自动发布和不安全。
  2. 使用允许/拒绝规则定义架​​构。
  3. 使用流星服务器方法插入/更新。
  4. 无论您使用附加到集合的架构还是仅使用架构来验证表单而不真的希望将其附加到集合,请确保在服务器代码上调用 [check()][4],以便表单一旦在客户端提交给服务器,服务器进一步明确检查数据是否仍然符合模式,并且没有任何人或不受信任的东西被注入/篡改。 如果它被操纵,服务器端验证会自动过滤掉传递给它的数据的额外添加

如果有人添加了不存在/不符合架构定义的额外数据,就会发生这种情况:

【讨论】:

  • 感谢您的冗长而详细的帖子,但我仍然认为将您的架构暴露给客户端可以提供可以被利用的信息。我要写一个新问题,因为这个问题具有误导性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多