首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >阻止对CDN上的内部资源的请求

阻止对CDN上的内部资源的请求
EN

Stack Overflow用户
提问于 2018-03-24 05:37:12
回答 1查看 167关注 0票数 0

在这种情况下,防火墙的存在有一个原因:阻止外部请求访问内部资源。

假设我有两个HTTP服务器在运行:一个在端口8080上,另一个在端口8081上。

8080端口上的服务器是一个可公开访问的基于Node的网站(在本例中由express提供支持),并对每个请求运行以下代码,这基本上是一种简单的CDN,从用户定义的URL (在X-Cool-URL头部中)请求数据,并将请求的正文返回给我的网站域名下的用户。requestrequest模块,reqexpress请求对象,resexpress响应对象。(显然,这段代码并不实用,也不能保证错误,但它是一个很好的例子。)

const url = req.get("X-Cool-URL"); // some example user input value
request(url, (error, response, body) => { // request said arbitrary resource
    res.send(body); // send response back to user
});

端口8081上的服务器是一个HTTP服务器,它通过内部请求执行操作;通过端口8081的外部网络被防火墙阻止,这是有充分理由的。任何用户定义的数据都不应该发送给它。假设我不是这个web服务器的程序员,并且对它的代码没有任何控制或访问权限。这个服务器对任何给定的请求输入到底做了什么都是无关紧要的。重要的是,允许向其发送任意数据将是一个安全风险。

...but我可以从任何外部命令行运行此命令。

curl -H "X-Cool-URL: http://localhost:8081/something/malicious" http://example.com:8080

这带来了一个问题:用户可以使用我的公共web服务器通过内部网络下的localhost:8081请求私有web服务器。我仍然希望人们能够通过我的web服务器在端口8080上请求其他公共域,并且我仍然希望能够作为开发人员在内部请求8081,但我不希望其他任何人能够利用我的服务器任意访问8081,而不是防火墙。我如何才能使用户不可能使用我的公共web服务器来请求任何内部资源?

我想要保护的端口可能并不总是明确和已知的,所以简单地通过我的web服务器拦截8081是不现实的。只阻塞对localhost的所有请求也是不现实的,因为还有其他方法可以请求内部资源(例如使用127.0.0.1)。甚至可以设置指向本地资源的DNS记录,因此只将一组URL列入黑名单也不起作用。白名单也不是一种选择,因为它会破坏CDN的观点,使客户端能够请求任何外部资源。我感兴趣的是一种在任何情况下都能检测URL是否为内部URL的方法。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49458610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档