2

由于我不会详细说明的原因,我希望禁止整个公司访问我的网站。使用 gethostbyaddr() 检查 php 中的远程主机名是可行的,但这会大大减慢页面加载速度。大型组织(例如 hp.com 或 microsoft.com)通常具有 IP 地址块。无论如何我得到了完整的列表,还是我坚持缓慢的反向 DNS 查找?如果是这样,我可以加快速度吗?

编辑:好的,现在我知道我可以使用 .htaccess 文件来禁止一个范围。现在,我如何才能确定给定组织的范围应该是多少?

4

11 回答 11

11

.htaccess 怎么样:

Deny from x.x.x.x

如果你需要拒绝一个范围说:192.168.0.x 那么你会使用

Deny from 192.168.0

这同样适用于主机名:

Deny from sub.domain.tld

或者如果你想要一个 PHP 解决方案

$ips = array('1.1.1.1', '2.2.2.2', '3.3.3.3');
if(in_array($_SERVER['REMOTE_ADDR'])){die();}

有关 htaccess 方法的更多信息,请参阅页面。

现在要确定范围会很困难,大多数公司(除非他们是大公司)都会像你我一样拥有动态 IP。
这是我之前不得不处理的一个问题,最好的办法是禁止主机名或整个范围,例如,如果它们在 192.168.0.123 上,则禁止 192.168.0.123,不幸的是你会得到一些无辜的人用任何一种方法。

于 2008-09-18T02:30:56.880 回答
4

如果您正在练习安全的虚拟主机,那么您有防火墙。用它。

大公司有 IP 地址块,但即使是小公司也很少更改其 IP。因此,有一种简单的方法可以在不降低性能的情况下做到这一点:

每个月都会对您日志中的所有 IP 进行反向查找,然后将该公司使用的所有 IP 在您的防火墙中设置为拒绝。

过一会儿你就会开始看他们是否有动态地址。如果他们这样做,那么您可能必须为每次连接尝试进行反向查找,但除非他们是一家小公司,否则您不必担心。

于 2008-09-18T02:38:04.383 回答
2

继续使用gethostbyaddr(),但后面有缓存。您应该只需要为每个 IP 地址解决一次,这样就不会成为重大的性能问题。如果您愿意,可以从您的服务器日志中准备好缓存,这样返回的用户甚至不会遇到一次性减速。

于 2008-09-18T02:37:12.217 回答
2

如果您这样做的目的是让公司的人员访问您的网站有点不便,请遵循上述建议。但是您将无法完全确保您阻止了所有访问,因为它们可能总是通过代理。如果其他公众可以访问它,您将不得不担心archive.org、搜索引擎缓存等。

可能不是您正在寻找的答案,但它是准确的。

于 2008-09-18T03:02:32.843 回答
1

如果您使用的是 apache,请查看 .htaccess:.htaccess 教程

于 2008-09-18T02:30:56.647 回答
1

首先在whois.net上搜索公司。如果您知道它们只是一个域,请进行 whois 查询。否则,按关键字搜索他们拥有的域。

您可以通过 whois 查询找出分配给公司的主要 IP 范围,然后相应地构建您的拒绝规则。

于 2008-09-18T02:38:44.973 回答
1

我知道WikiScanner可以让您搜索公司或其他组织,然后列出属于它们的 IP 地址范围。举个例子,这是属于 Google 的所有 IP 地址,至少根据 WikiScanner 是这样。

根据HowStuffWorks的说法,他们使用了一种叫做“IP2Location”的东西。

于 2008-09-18T03:02:07.023 回答
0

您可以访问实际的服务器配置吗?如果是这样,取决于服务器,您可以在配置中执行此操作。

有关一些可能有用的信息,请参阅此线程。

于 2008-09-18T02:32:04.630 回答
0

http://en.wikipedia.org/wiki/Rwhois 远程登录 rwhois.arin.net 4321

这曾经奏效。

于 2008-09-18T02:44:12.713 回答
0

负载不应该放在网络服务器上,你应该把它放在防火墙上。

于 2008-09-18T03:52:10.650 回答
0

请注意,使用上述技术永远不可能完全禁止特定公司访问您的网站。他们仍然可以使用代理服务器或在家中查看您的网站。

如果您绝对想控制谁有权访问,您应该只允许经过身份验证和授权的用户访问您的站点。

于 2008-09-18T05:44:18.680 回答