如何过滤掉这个机器人/防止这种"攻击"?

时间:2015-05-01 20:15:45

标签: php symfony web-crawler user-agent bots

在我的symfony2应用程序中,我几天前犯了一个错误,在一个特定页面中,一个未连接的用户可以在没有任何验证的情况下在表单中发布任何数据。

在不到1小时内收到500多条不相关内容后,现在已经解决了这个问题。

现在,即使恶意软件不再发布,它仍然每分钟访问一次此页面。我在同一页面上有一个viewcount,然后正常膨胀。

我试图过滤机器人,但似乎这个很聪明。我的代码:

public function increaseViewCount(ViewCountInterface $entity, $andFlush = true)
{
    $detector = $this->get('vipx_bot_detect.detector');
    $id = 'viewcount' . get_class($entity) . $entity->getId();

    if
    (
        (empty($_SERVER['HTTP_USER_AGENT']) || !preg_match('~(bot|crawl|slurp|spider)~i', $_SERVER['HTTP_USER_AGENT']))
        && strstr($this->get('request')->headers->get('referer'), 'foodmeup')
        && $detector->detectFromRequest($this->container->get('request')) === null
        && $this->get('session')->get($id) == false
    )
    {
        $entity->increaseCount();
        $this->persist($entity);
        if ($andFlush) $this->flush($entity);
        $this->get('journal_manager')->addJournalEntry('view', array(
                'HTTP_USER_AGENT' => $_SERVER['HTTP_USER_AGENT'],
                'REMOTE_ADDR' => $_SERVER['REMOTE_ADDR'],
                'time' => time(),
                'date' => date("d/m/Y H:i:s"),
                'referer' => $this->get('request')->headers->get('referer')
            ), $entity->getId(), get_class($entity));
        $this->get('session')->set($id, true);
    }

    return $this;
}

但是(如您所见,我记录了该条目)我得到的结果如下:用户代理不包含任何机器人名称。

Paramètre   Valeur
HTTP_USER_AGENT Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 YaBrowser/14.10.2062.12521 Safari/537.36
REMOTE_ADDR 91.200.12.7
time    1430510089
date    01/05/2015 21:54:49
referer mywebsite/permettre-de-suggerer-une-photo-sur-les-elements-qui-n-en-ont-pas

所以我有它的IP,我发现最后一小时的最后100次访问都来自乌克兰的某个地方。

但是,当我查看我的googleAnalytics帐户时,没有这些访问的痕迹。​​

  • 那么我该如何解决这个问题呢?
    • 实现javascript viewcount是最安全的方式吗?
    • 我还没有设置机器人陷阱但是这里IP每次都在变化,因此我不确定它会在那种情况下起作用。
    • 我可以检索哪些其他数据以更好地了解如何解决此问题?

1 个答案:

答案 0 :(得分:0)

唯一正确的方法是清理服务器端的所有输入,就像你最终做的那样。阻止/ 8 IP范围是如此无情,我甚至无法开始描述有多少弊端。 如果我建议一种真正冗余的方法来保护它,它将是一个反向代理服务器。这将进行一些基本的浏览模式分析,并为以预期方式加载文件的用户解锁发布。如果更高级,它也可以随机化你的服务器所期望的POST字段名称,但我想这将是百分之一点。