【发布时间】:2019-10-31 15:21:58
【问题描述】:
我最近看到this SO 发布关于获取请求域的帖子。我想知道这些信息是否可靠(即攻击者可以“伪造”这些信息吗?)。具体来说,域和请求类型(GET、POST 等)。我问的原因是因为我不确定是否可以使用它来保护我的应用程序的后端。我想我应该只允许来自我自己域的 POST 请求。
【问题讨论】:
标签: javascript node.js express security backend
我最近看到this SO 发布关于获取请求域的帖子。我想知道这些信息是否可靠(即攻击者可以“伪造”这些信息吗?)。具体来说,域和请求类型(GET、POST 等)。我问的原因是因为我不确定是否可以使用它来保护我的应用程序的后端。我想我应该只允许来自我自己域的 POST 请求。
【问题讨论】:
标签: javascript node.js express security backend
客户端(如浏览器)发送的请求并非来自特定域。它们来自客户端的 IP 地址。该客户端可能正在运行来自特定站点的网页,但是请求中包含的任何信息都不能被信任,并且可能被欺骗为客户端想要的任何信息。再想想这个。客户端请求不是来自域。它们来自客户端,该客户端在发出 API 请求之前可能已收到或未收到来自特定域的网页。
所以,不,您不能使用客户端提供的页面域信息来实现任何合理的安全性。如果请求确实包含有关请求代码来自哪个网页的信息,那么该信息很容易被流氓客户端欺骗。
从浏览器使用的 API 可能需要与登录用户结合使用(通过登录 cookie 或登录后获得的某种安全令牌),但除此之外不能“安全”。为了让浏览器能够访问您的 API,任何其他客户端(包括恶意客户端)也可以访问 API。
像 Google 这样的人对其在浏览器中使用的 API 施加的保护类型有:
因此,在允许访问您的服务之前,您可以要求 API 帐户或用户登录。除此之外,人们通常只会保护 API 不被滥用,同时也意识到确定的自定义客户端仍然可以访问 API。
我认为我应该只允许来自我自己域的 POST 请求。
您应该只允许来自有效登录用户的 POST 请求(每个 API 请求都需要登录凭据),并且您应该只允许它们影响该特定用户有权修改的数据。您无法控制请求的来源或执行请求的客户端类型。
【讨论】: