将网站限制为单个浏览器(用户代理)的最佳方式?
Best way to restrict a website to a single browser (user agent)?
所以我正在构建自己的 Web 应用程序类型的项目。但是,我只希望可以通过我的网络客户端查看该网站。我已将 Web 客户端的用户代理设置设置为自定义名称 (MySecretClient
),现在尝试仅允许从具有用户代理 MySecretClient
的浏览器进行访问。其他人都会被重定向。
有没有更好的方法来做到这一点?
<?php
define('MY_USER_AGENT', 'Custom User Agent');
define('REDIRECT_LOCATION', 'http://www.google.com');
if ($_SERVER['HTTP_USER_AGENT'] !== MY_USER_AGENT) {
header('Location: ' . REDIRECT_LOCATION);
die();
}
与许多网络技术问题一样,有一个严格的理论答案和一个 "good enough for what you probably want" 答案:严格的答案是:你不能,那样做是行不通的。由于客户端可以发送它想要的任何用户代理字符串,因此您无法知道任何给定请求背后的实际客户端。
"good enough" 的答案将阻止绝大多数用户使用 "wrong" 用户代理查看您的站点,记录在此处:
http://www.htaccesstools.com/articles/detect-and-redirect-iphone/
来自 link 的相关 .htaccess 块将请求从 iPhone 用户代理重定向到 iPhone 特定站点是:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} iPhone
RewriteCond %{REQUEST_URI} !^/my-iPhone-site/
RewriteRule .* /my-iPhone-site/ [R]
您可以根据自己的情况进行修改,以使用错误的客户端重定向用户:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !^MySecretClient$
RewriteRule .* <URL of a tropical island paradise> [R]
对于您这样做的可能的意图,还有另一个答案。如果这是您应用程序安全策略的一部分,那可不是个好主意!这就是所谓的 "security through obscurity" 并且是一个公认的反模式,应该避免。除了最随意的软件攻击者之外,任何人都会很快意识到发生了什么,找出您的应用程序要 运行 使用的客户端,然后欺骗它。
所以我正在构建自己的 Web 应用程序类型的项目。但是,我只希望可以通过我的网络客户端查看该网站。我已将 Web 客户端的用户代理设置设置为自定义名称 (MySecretClient
),现在尝试仅允许从具有用户代理 MySecretClient
的浏览器进行访问。其他人都会被重定向。
有没有更好的方法来做到这一点?
<?php
define('MY_USER_AGENT', 'Custom User Agent');
define('REDIRECT_LOCATION', 'http://www.google.com');
if ($_SERVER['HTTP_USER_AGENT'] !== MY_USER_AGENT) {
header('Location: ' . REDIRECT_LOCATION);
die();
}
与许多网络技术问题一样,有一个严格的理论答案和一个 "good enough for what you probably want" 答案:严格的答案是:你不能,那样做是行不通的。由于客户端可以发送它想要的任何用户代理字符串,因此您无法知道任何给定请求背后的实际客户端。
"good enough" 的答案将阻止绝大多数用户使用 "wrong" 用户代理查看您的站点,记录在此处:
http://www.htaccesstools.com/articles/detect-and-redirect-iphone/
来自 link 的相关 .htaccess 块将请求从 iPhone 用户代理重定向到 iPhone 特定站点是:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} iPhone
RewriteCond %{REQUEST_URI} !^/my-iPhone-site/
RewriteRule .* /my-iPhone-site/ [R]
您可以根据自己的情况进行修改,以使用错误的客户端重定向用户:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !^MySecretClient$
RewriteRule .* <URL of a tropical island paradise> [R]
对于您这样做的可能的意图,还有另一个答案。如果这是您应用程序安全策略的一部分,那可不是个好主意!这就是所谓的 "security through obscurity" 并且是一个公认的反模式,应该避免。除了最随意的软件攻击者之外,任何人都会很快意识到发生了什么,找出您的应用程序要 运行 使用的客户端,然后欺骗它。