【问题标题】:Node.js HTTP Server - How to SecureNode.js HTTP 服务器 - 如何保护
【发布时间】:2013-12-28 16:50:24
【问题描述】:

目前我的 HTTP 服务器有以下配置:

curl -i http://localhost:3000

    HTTP/1.1 200 OK
    Access-Control-Allow-Origin: *
    Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS
    Access-Control-Allow-Credentials: true
    Access-Control-Max-Age: 86400
    Access-Control-Allow-Headers: X-Requested-With, Access-Control-Allow-Origin, X-HTTP-Method-Override, Content-Type, Authorization, Accept
    Date: Tue, 10 Dec 2013 22:31:40 GMT
    Connection: keep-alive
    Transfer-Encoding: chunked

关于访问控制条目。

这些是否表明发送和接收的服务器是什么?

我是否最好尽量减少这个列表?这是否意味着服务器可能更安全,因为访问它的方式更少?

谢谢

【问题讨论】:

  • 这是一个很好的问题,并且保护节点服务器比许多其他服务器(例如 Apache)要困难一些,因为 Apache 有很多关于该主题的软件和文档。我会说发送的标头并不重要,考虑到所有其他潜在风险,例如 XSS、CSRF、以某种方式访问​​服务器等,应该是最不关心的问题。
  • 好点他们只发送标题... thx

标签: node.js security http


【解决方案1】:

Access-Control-Allow-Origin: *

您可以轻松地限制此条目以限制对您网站的 AJAX 请求(阻止 CORS)。这很容易做到(取决于您要构建的内容)通常是个好主意。

Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS

同样,根据您正在构建的内容,这可能仅限于您打算使用的 HTTP 方法。一个基本的网站可能只需要 GET,一个带有表单上传的内容驱动的网站需要 POST,或者一个复杂的 API 或套接字驱动的网站可能/将需要其他。

Access-Control-Allow-Credentials: true

如果您不处理身份验证(或保护任何东西),那么这无关紧要。如果您要保护某些东西,您可能希望在适当的位置实现 之类的东西,并禁止使用凭据。

Access-Control-Max-Age: 86400

这只是网站响应可以缓存多长时间。这是 24 小时,但在高度安全的网站上,您可能希望将其限制为 1 小时或 30 分钟。

综上所述,虽然还有大量其他 security concerns when implementing Node,但如果您严格不需要额外的标头处理,那么删除它们是有好处的。

【讨论】:

  • 我实际上只在 nginx 后面提供 websockets... 带有 Access-Control-Allow-Methods - 如果我删除此行,是否阻止所有方法意味着所有方法都允许作为行/限制没到位?
  • 根据stackoverflow.com/questions/20478312/…我怀疑如果你不设置它,它会默认为全部允许。如果你想限制它,只指定你需要的。
  • 不客气。强烈建议您阅读关于保护 Node 和 CORS 的 SO——这是一个很深的话题,但如果您担心安全性,那么拥有它是一个很好的知识。
猜你喜欢
  • 2019-12-24
  • 1970-01-01
  • 2019-12-14
  • 1970-01-01
  • 2015-10-26
  • 2012-01-05
  • 2014-02-13
  • 2011-08-28
  • 2012-09-05
相关资源
最近更新 更多