【发布时间】:2010-10-26 17:19:36
【问题描述】:
我有一个博客聚合网站
故事按访问次数排序
我认为我正面临垃圾访问
因为有些博客的故事会在同一秒内通过传出的 ip 地址获得大量访问
我的网站不允许来自同一个IP的访问;但是,我的访问者不知何故改变了他们的 ips。
他们有什么解决方案来检测这种垃圾邮件访问吗?我想知道 Google adSense 是如何解决这样的问题的?
谢谢
【问题讨论】:
标签: php security ip spam-prevention spam
我有一个博客聚合网站
故事按访问次数排序
我认为我正面临垃圾访问
因为有些博客的故事会在同一秒内通过传出的 ip 地址获得大量访问
我的网站不允许来自同一个IP的访问;但是,我的访问者不知何故改变了他们的 ips。
他们有什么解决方案来检测这种垃圾邮件访问吗?我想知道 Google adSense 是如何解决这样的问题的?
谢谢
【问题讨论】:
标签: php security ip spam-prevention spam
简短的回答是,如果只需要一次未经验证的访问就可以改变故事的顺序,那么就不可能阻止坚定的攻击者。 您可能需要考虑实施注册用户投票系统。
但是,您可以收集几条信息并将它们全部组合起来:
1) 用户代理
2) IP 地址
3) X-Forwarded-For 标头(如果可用)
攻击者通常会很懒惰,不会循环通过不同的用户代理。如果您将系统设置为以特定时间间隔(而不是实时)处理访问信息,您可能会过滤掉使用相同用户代理同时发生的大量访问。
您始终可以从 antiproxy.com 等网站下载代理数据库,但事实是,当今大多数精心策划的攻击都来自尚未记录的僵尸网络节点。您的网站完全有可能成为与普通访问者无法区分的异构流量攻击的目标。
至少,我建议更改您的实现,以便用户可以对故事进行投票并需要验证码。
【讨论】:
使用 PHP,您可以对照 IP 地址检查 $_SERVER ["HTTP_X_FORWARDED_FOR"] 变量,以进一步确保客户端就是他所说的那个人。这将有助于通过一些代理识别人员。
【讨论】:
您无法可靠地检测 IP。
它可能来自代理或被欺骗。
【讨论】:
我有时会使用这个功能。但正如其他人所说,要在 100% 的时间内获得正确的 IP 可能很困难。
我不记得我是从哪里得到这个函数的,但它似乎在互联网上相当普遍。
function getRealIpAddr()
{
if (!empty($_SERVER['HTTP_CLIENT_IP']))
{
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
}
【讨论】: