Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何筛选出此bot/防止此“;攻击;?_Php_Symfony_Web Crawler_User Agent_Bots - Fatal编程技术网

Php 如何筛选出此bot/防止此“;攻击;?

Php 如何筛选出此bot/防止此“;攻击;?,php,symfony,web-crawler,user-agent,bots,Php,Symfony,Web Crawler,User Agent,Bots,在我的symfony2应用程序中,我几天前犯了一个错误,在一个特定页面中,未连接的用户可以在表单中发布任何数据,而无需任何验证 在我在不到一个小时内收到500多条不相关的内容后,这个问题现在已经解决了 现在,即使恶意软件不能再发布了,它仍然会访问这个唯一的页面,每分钟一次。我在同一个页面上有一个viewcount,它会异常膨胀 我试着过滤掉机器人,但这一个似乎很聪明。我的代码: public function increaseViewCount(ViewCountInterface $entit

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

在我在不到一个小时内收到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;
}
但是(如您所见,我记录了该条目)得到的结果如下:用户代理不包含任何bot名称

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每次都会改变,所以我不确定它在这种情况下是否会工作
    • 我可以检索哪些其他数据来更好地了解如何解决此问题

在Apache配置中添加拒绝-这可能会:

Deny from 91.0.0.0/8


请小心使用,因为它将阻止来自该IP CIDR块的所有请求

唯一正确的方法是清理服务器端的所有输入,就像您最终所做的那样。阻止a/8IP范围是如此无情,我甚至无法开始描述这是多么严重的不当行为。
如果我要建议一种真正冗余的安全方法,那就是反向代理服务器。这将进行一些基本的浏览模式分析,并为以预期方式加载文件的用户解锁帖子。如果更高级,它还可以随机化服务器期望的POST字段名称,但我认为这将是锦上添花。

不幸的是,每个日志条目的IP都不同,这在这里不起作用。。。我猜那些是僵尸计算机。这将阻止来自整个CIDR块的所有请求-所有请求都来自以91开头的IP地址吗?它们都以91开头。什么是苹果酒积木?这就是结尾/8的含义吗?CIDR块允许您识别一组IP地址。我选择了91.0.0.0/8,通过使用whois链接查找块中包含您引用的IP地址的所有IP地址。此bot是该用户代理日志中的唯一实例吗?如果是这样的话,就由UA阻止吧——有了所有这些版本号,它不太可能被其他人使用。事实上,UA在东欧使用。我不认为我的目标之一有理由拥有它,所以我会阻止YaBrowser,谢谢!没问题。我想知道GA是否没有注册点击,因为它需要JavaScript,但是这个机器人是基于cURL的,没有JS引擎。