【问题标题】:Apache : RewriteCond to redirect request coming from unknown IPApache:RewriteCond 重定向来自未知 IP 的请求
【发布时间】:2013-11-20 02:31:25
【问题描述】:

假设我有一个使用 Linux、Apache、PHP 和 MySQL 堆栈开发的网站 www.abcd.com。

我创建了网页 www.abcd.com/redirect.php 来重定向所有未经授权的用户。

如果请求来自 IP 180.11.34.1 的网站 www.abcd.com 或其子目录 [例如:www.abcd.com/temp/images/aaa.js ] 中的任何文件,那么它应该将用户重定向到www.abcd.com/redirect.php

是否可以通过提供 IP 范围进行重定向?例如:从 180.11.34.1 到 180.11.34.123

是否可以将所有请求重定向到我的网络服务器 php/cgi/js/css/image 文件;不是通过我的域访问 www.abcd.com/redirect.php 吗?

【问题讨论】:

  • 您可以使用RewriteCond 执行此操作,但我不建议将其作为安全的身份验证形式。
  • 你能建议一下,什么是安全的形式?
  • 这真的取决于您的需求。网站通常使用用户名和密码进行身份验证,然后使用会话来维护状态。您可以通过应用程序中的 IP 检查或在防火墙级别列入白名单来增强它。或者也许使用 VPN 的解决方案更有意义 - 再次取决于。
  • 有没有什么好的文档可以解释如何与用户名和密码一起进行 IP 检查?目前,我正在使用 $_SERVER[REMOTE_ADDR] 使用用户 ID 和密码以及 IP 的日志条目对用户进行身份验证。但我发现使用 $_SERVER[REMOTE_ADDR] 收到的 IP 地址不可靠....有没有其他方法?
  • 并非如此。缺点是地址可以被远程主机欺骗。仅从您的角度来看,它是很好的数据,并且可能是身份验证的额外预防措施,但仅此一项就不是防弹的。更安全...使用 HTTPS、两种形式的身份验证或非应用层解决方案。

标签: php apache .htaccess mod-rewrite redirect


【解决方案1】:

是否可以通过提供 IP 范围进行重定向?例如:从 180.11.34.1 到 180.11.34.123

有点。您可以为它制作一个正则表达式:

RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^180\.11\.34\.([1-9]|[1-9][0-9]|1[0-1][0-9]|12[0-3])$ 
RewriteRule ^(.*)$ /redirect.php [L,R]

是否可以将所有请求重定向到我的网络服务器 php/cgi/js/css/image 文件;没有通过我的域来 www.abcd.com/redirect.php

您可以通过检查引用者来做到这一点,但是,引用者可能会被欺骗,因此无法保证您会阻止所有内容:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?abcd.com/ [NC]
RewriteRule \.(php|cgi|js|css|gif|png|jpe?g|ico)$ /redirect.php [L,NC,R]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 2016-04-29
    相关资源
    最近更新 更多