【问题标题】:Secured way to communicate between servers服务器之间通信的安全方式
【发布时间】:2018-06-26 12:16:39
【问题描述】:

我们正在传递密钥以验证启用 https 的网站之间的 GET 请求。以下哪种方式更安全:

GET /auth?secret=8727n2i752gns982jsn'

只有 2 台服务器知道该密钥。

或者我们应该如下设置标题:

request({
    url: '/auth',
    headers: {
        'secretKey': 's87ehwdiw8y3dhj'
    }
});

哪种方法更安全,为什么?

【问题讨论】:

  • 绝对不要在 URL 中附加秘密,即使它是 HTTPS。我相信标头是加密的。

标签: node.js https get request


【解决方案1】:

理想情况下,发送密钥不是一个好的选择。但是,如果有最大的需要,我建议您在标题中发送密钥,例如:

request({
    url: '/auth',
    headers: {
        'secretKey': 's87ehwdiw8y3dhj'
    }
});

如果你给浏览器一个“秘密密钥”,它就不再是秘密了。浏览器中的 Javascript 过于开放,无法真正保密。

因为它不太显眼,但任何人都可以嗅探它,因为它只是 javascript。

这里有几个链接可以启发你更多:

【讨论】:

  • 标头中的数据是否加密?如果是,为什么不在标头中发送秘密不是一个好的选择?
  • 它仅在 https 和传输中加密,而不是在末端加密。这就是为什么。
  • 但是,根据我们的情况,我们将数据服务器发送到服务器,因此两个服务器都知道密钥。所以这可能不是这里的问题。谢谢你的回答。
  • 理想情况下,我们应该使用什么方法而不是直接发送密钥?
  • 我建议将 SECRET 保存在 .env 文件中并在每个环境中手动设置它。保持密钥的保密性。 :)
【解决方案2】:
request({
    url: '/auth',
    headers: {
        'Authorization': 'Bearer s87ehwdiw8y3dhj'
    }
});

这是通过标头传递令牌的标准化方式。安全部分实际上更多的是关于您的令牌创建。

'Bearer' 是您正在使用的授权类型。它可能是“基本”等 即

'Authorization': 'Basic s87ehwdiw8y3dhj'

【讨论】:

  • 标头中的数据是否加密?
  • @SowmayJain 是的,他们在https,但不在http。
  • 你的令牌应该有加密。您可以使用多种加密类型,但从您的第一条评论来看,传递该值的服务器似乎已经知道如何读取加密令牌。我误解了你的评论吗?
  • 这里是https头加密问题的答案stackoverflow.com/a/31565082/5770064
  • 是的,很明显它们只在传输过程中被加密,而不是在末端。
猜你喜欢
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 1970-01-01
  • 2019-09-18
  • 2012-03-22
  • 2014-11-05
相关资源
最近更新 更多