使服务器应用程序仅接受来自同一主机中客户端应用程序的请求
Posted
技术标签:
【中文标题】使服务器应用程序仅接受来自同一主机中客户端应用程序的请求【英文标题】:Make server app accept requests only from the client app in the same hosting 【发布时间】:2020-07-27 06:35:00 【问题描述】:我有一个 Angular 和 php 应用程序托管在同一个共享主机中,并且可以从同一个域 example.com 访问。 php 应用程序公开了一个 rest api,我希望这个 api 只能从 angular 应用程序访问。
这两个应用都没有用户身份验证。
【问题讨论】:
【参考方案1】:最好的方法是将后端放置在私有子网中,前端 angular 可以通过内部网络路由访问该子网。
[ Your network /16 ]
[ Public Subnet /24 ] [ Private Subnet /24 ]
[Frontend] <- Route -> [Backend]
但根据您的情况,您将两者托管在同一个服务器实例中,这些服务器实例是公共的。以上建议不适用。由于您不能在网络层限制它,您可以查看应用程序层,并且可以使用 Web 服务器配置扩展,例如 .htaccess,您可以创建一个只允许前端请求的规则。这是应用层限制。
【讨论】:
感谢您的回复。我尝试调整 .htaccess 并失败了几次。我试图拒绝所有人并允许来自本地主机。例子.com。但是没有用。 您不能从 localhost 明确允许您需要指定前端应用程序正在使用的公共 ip;这将取决于您的 htaccess 无法正常工作的网络服务器错误。【参考方案2】:正如@Edcel Cabrera Vista 提到的,我尝试通过向 .htaccess 文件添加规则来限制应用层中的调用,如果传入的客户端 IP 与我的网站 IP 或本地主机匹配,则检查 PHP 文件,添加基本授权。它们都不起作用,因为最终的 Angular 应用程序只是在用户浏览器中运行的客户端 JS 代码,因此用户可以完全控制它,并且客户端 IP 将始终是用户的 IP。
我最终意识到我可以在服务器端进行 html 渲染,并将准备好的 HTML 页面返回给客户端。暂时满足我的需要。
【讨论】:
以上是关于使服务器应用程序仅接受来自同一主机中客户端应用程序的请求的主要内容,如果未能解决你的问题,请参考以下文章
来自同一主机上的 Invoke-WebRequest 的 WCF 客户端证书身份验证