我的网站尚未上线,我希望只有我一个人可以访问它。到目前为止,我只是拒绝了所有人并允许我的 IP。问题是我现在不在家,除了手机之外没有其他互联网连接。我猜我当前的移动网络 IP 是与许多其他人共享的,所以我不想冒险将此 IP 列入白名单。也许我可以设置一个像密码一样的自定义用户代理?但是我该如何配置 apache 以仅允许来自特定 UA 的访问?还有其他选择吗?
编辑:Apache 身份验证有效,但我无法发出跨源 ajax 请求。我的 Web 应用程序需要向我的服务器发出 ajax 请求。该应用程序是分布式的,而不是托管的,因此我允许所有来源访问我的端点。Apache 身份验证不知何故破坏了我的设置,“no access-control-allow-origin”标头存在...因此不允许源 localhost 访问。
编辑2:即使使用 PayPal 也不行!有没有更好的解决方案?
编辑:3 我找到了一个更好的解决方案。它适用于我的 Web 应用程序,访问者不会看到登录表单。只需设置一个要随每个请求发送的自定义标头即可。我为此使用了 Requestly Chrome 扩展程序(还允许指定哪些 URL 应该发送自定义标头)。然后在 vhost 文件中:
SetEnvIf X-MY-TOKEN "secretmessage" AllowIp
Require all denied
Require ip some.ip
Require host paypal.com
Require env AllowIp
但是 PayPal IPN 仍然无法使用。我也尝试过将其包装在 中。我想我必须暂时将我的 IP 列入白名单,看看它是否有效。
编辑4:PayPal 现在可以运行,但在 sandbox.paypal.com 上遇到了一些技术问题
答案1
假设 sshd 在服务器上处于活动状态,使用 ssh 端口转发来实现此目的。
ssh 用户 ID@httpdserver -L 127.0.0.1:{HTTPDPORT}:8080
HTTPDPORT 是 Web 服务器上的本地端口
8080 是你用来访问 Web 服务器的开发系统上的本地端口
要访问该网站,您需要转到 127.0.0.1:8080,httpd 服务器将把您的连接视为来自其本地主机(127.0.0.1)
httpd 将会非常高兴,因为您的连接显示为“本地”。
如果需要更多端口,请添加更多端口转发语句。
注意:也可以通过将语句更改为来路由到其他系统
-L {系统IP}:{HTTPDPORT}:{本地端口}
答案2
您可以对已知主机使用身份验证并按源允许:
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
<RequireAny>
Require ip 127.0.0.1
Require valid-user
</RequireAny>
答案3
这取决于您需要的安全级别。我很少建议通过隐蔽性来实现安全,但如果您的主要目标是拒绝意外访问者,那么您可以简单地将您的应用程序移到一个较长的随机命名的子目录中。只要关闭目录索引,这就像一个显式密码一样好。不过,您的应用程序可能不适合在根目录以外的任何地方运行。
另一种方法是将一个捕获所有子域的 CNAME 记录添加到您的 DNS,然后告诉 apache 只监听一些较长的随机命名的子域。由于您没有在 DNS 中明确命名子目录,因此找到它的唯一方法是了解它,或者强力猜测每个可能的子目录。