我在网络领域还是个菜鸟,自学成才,所以如果我要问的问题有误,请原谅我。
我有一个基于 JavaScript 和 PHP 的 Web 应用程序,由我的 Apache Web 服务器提供服务。
我已经用 PHP 实现了一个登录系统,现在客户可以通过它访问我的应用程序。登录后,应用程序会提供一些 Web 服务,而用户在未登录时则无法看到这些服务。理论上来说...
事实上,截至目前,如果用户知道这些服务的直接 URL(可以通过 Web 控制台检索),他/她就可以访问该资源,无论他/她是否登录。
Web 服务由 CGI 程序生成。
我想找到一种方法来保护这些服务,以便除了我的 Web 应用程序(或者更好的是,还有登录的用户)之外的任何人都可以访问它们。
我考虑过反向代理,但是由于我对这个东西很陌生(我这样做只是为了学习)并且从未尝试过实现它,所以我不完全确定这是否是可行的方法。
因此,我制作了一个插图来展示我的想法(希望它清晰易懂)。这会是解决我的问题的(唯一)正确方法吗?
一些信息:
- Web 应用程序、Web 服务和代理服务器将位于同一台机器上
- 我的应用程序的 URL 类似于
mysite.com
,而要访问 Web 服务,URL 类似于mysite.com/cgi-bin/...
答案1
所以显然我已经通过实施另一个解决方案解决了这个问题:HTTP Basic Auth。
我基本上遵循本指南和:
- 已安装 apache-utils
sudo apt-get update sudo apt-get install apache2-utils
在文件夹中创建了一个
.htpasswd
带有用户和密码的文件/etc/apache2
sudo htpasswd -c /etc/apache2/.htpasswd <my_user>
通过添加以下行修改我的虚拟主机配置(在大胆的)
<Directory "/usr/lib/cgi-bin/">
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
AllowOverride All Options +ExecCGI -MultiViews +FollowSymLinks Order allow,deny Allow from all AddHandler fcgid-script .fcgi
Require valid-user
</Directory>
- 重启 Apache
sudo systemctl restart apache2
现在,发生了什么:
- 如果我测试我的安全资源,输入直接 URL(例如mysite.com/cgi-bin/...)我被要求输入凭证。
- 如果我通过我的应用程序访问,我总是被要求提供凭证
显然,一切都在 SSL/TLS 协议之下。
到目前为止一切顺利。我现在必须实现一种方法,以便在用户登录我的应用程序时不要求提供受保护资源的凭据,但这是另一个问题。