【问题标题】:Allow access to all files from only 1 IP address and redirect all others to other file仅允许从 1 个 IP 地址访问所有文件,并将所有其他文件重定向到其他文件
【发布时间】:2013-07-18 00:18:07
【问题描述】:

我不确定之前是否已经回答过这个问题,但我试着寻找它。无论如何,我目前正在开发一个网站,但我想让实际的网站内容只能从我的 IP 地址访问。然后,我希望 .htaccess 将所有其他 IP 地址重定向到我服务器上的单独文件。该文件将被称为subscribe.php

我已经尝试了几件事,但没有提供我想要的结果。我知道我的服务器允许使用 .htaccess,因为我用它来更改其他一些东西,例如防止缓存。

【问题讨论】:

标签: php apache .htaccess


【解决方案1】:

您可以使用mod_rewrite 来执行此操作。在您的 .htaccess 文件中添加以下内容:

代码:

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !=123.45.67.89
RewriteRule index.php$ /subscribe.php [R=301,L]

替代解决方案:

<?php $allow = array("123.456.789", "456.789.123", "789.123.456"); //allowed IPs

if(!in_array($_SERVER['REMOTE_ADDR'], $allow) && !in_array($_SERVER["HTTP_X_FORWARDED_FOR"], $allow)) {

    header("Location: http://domain.tld/subscribe.php"); //redirect

    exit();

} ?>

希望这会有所帮助!

【讨论】:

  • 攻击者可以简单地设置 X-Forwarded-For 标头并绕过此过滤器。
  • 我知道该方法并非万无一失——那些额外的字段是客户端提供的任意 HTTP 标头,任何人都可以轻松地对其进行欺骗。但是你有什么更好的建议吗?
  • @douggard 有任何关于绕过HTTP_X_FORWARDED_FOR 过滤器的示例吗?我想测试我的应用的安全性。
  • 获取 Chrome 或 Firefox 的“修改标题插件”。将 X-Forwarded-For 标头设置为您允许的 IP 地址。从不允许的 IP 访问页面。真的,您应该只删除 X_FORWARDED_FOR 检查,除非您通常通过代理。
【解决方案2】:

您也可以使用mod_rewrite

在您的 .htaccess 文件中添加以下内容:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REMOTE_ADDR} ^80\.40\.20\.[0-9]$ # your ip here
RewriteCond %{REQUEST_URI} !^/subscribe.php
RewriteRule .? /subscribe.php [R,L]
</IfModule>

【讨论】:

    猜你喜欢
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多