Bots per .htaccess aussperren

Begonnen von DerGrueneAffe, 22 Oktober 2014, 16:23:11

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

DerGrueneAffe

Weiß nicht ob das der richtige Bereich hierfür ist.

Aber weiß jemand, wie ich alle Bots außer die von Google (via .htaccess) aussperren kann? Die verursachen in meinen Augen nur unnötigen Traffic und schnüffeln rum.

Danke!

Webfan

Hallo Affe  :pardon:
ich glaub Du vertust Dich da ein wenig.
Zum einen... Du kannst in der .htacces User Agents blockieren.
Das hat so noch nichts mit aussperren zu tun wie Du es meinst, und "böse Bots" kacken auf den User Agent, Deine robots.txt oder ähnliches.

Und Deine Ansicht, das alle Bots nur rummschnüffeln außer google, nun, das würde ich nochmal krass überdenken!

:bye:

nudels64

Schau Dir mal http://www.crawltrack.net/crawlprotect/documentation.php an. Das verwende ich neben pagerestrictor schon sehr lange und erfolgreich.
Lieben Gruß
Andreas
#################################
CMS-Version:
pragmaMx 2.1.2.94 (2014-10-22)
PHP-Version:
5.6.24-he.0
MySQL-Version:
5.6.31-77.0-log
Server-Version:
Apache

DerGrueneAffe

Danke für die Antworten!

Und Deine Ansicht, das alle Bots nur rummschnüffeln außer google, nun, das würde ich nochmal krass überdenken!
Die Aussage verstehe ich nicht ganz- was meinst du damit?

@nudels64
Danke, werde ich mal austesten :)!

Webfan

ZitatDie Aussage verstehe ich nicht ganz- was meinst du damit?
Damit meine ich A) das es außer Google noch eine ganze Reihe durchaus legitimer Bots gibt welche man nicht außsperren sollte, mit alles außer google aussperren wirst Du Dir keinen Gefallen tun!
Und B) tut auch Google rummschnüffeln.
So einfach ist das.

Übrigens, ich habe neulich in der Pause einen Bot / Proxy geschrieben welcher sich in PragmaMxe einloggen kann.
Leider habe ich noch keinen legititmen Anwendungsfall ?
(Abhilfe gegen diesen Bot bis zur weiteren Überarbeitung z.B. check Felder Namen variabel ändern)
$uname = 'Benutzername';
  $pass = 'xxxxxxxx';
  $url="http://www.pragmamx.org/modules.php?name=Your_Account";
 
  $USER_AGENT = $_SERVER['HTTP_USER_AGENT'];

    $http=new http_class(NULL);
    $http->debug=0;
    $http->html_debug=1;
    $http->follow_redirect=1;
    $http->user_agent = $USER_AGENT;
 
$content.= '<br />';
    $content.= $http->user_agent;
$content.= '<br />';

    $error=$http->GetRequestArguments($url,$arguments);

    $arguments['RequestMethod']='GET';

    $content.= "Opening connection to:\n<PRE>".HtmlEntities($arguments["HostName"])."</PRE>\n";

    $error=$http->Open($arguments);

    if($error=="")
    {
        $content.= "Sending request for page:\n";
        $content.= "<PRE>".HtmlSpecialChars($arguments["RequestURI"])."</PRE>\n";

        $error=$http->SendRequest($arguments);

        if($error=="")
        {
            $content.= "Getting response headers ...\n";

            $headers=array();
            $error=$http->ReadReplyHeaders($headers);
           
            $content.=  '<pre>'.print_r($headers, TRUE).'</pre>';   

            if($error=="")
            {
                $content.= "Response status code:\n<PRE>".$http->response_status."</PRE>\n";


                $content.= "Getting the response body ...\n";
                /*
                for(;;)
                {
                    $error=$http->ReadReplyBody($body,1000);
                    if($error!=""
                    || strlen($body)==0)
                        break;
                }
                */
               $error = $http->ReadWholeReplyBody($body);
               /*
               $content.= 'Response:\n';
               $content.= ($error === '') ? '<pre>'.print_r(HtmlEntities($body), TRUE).'</pre>'
                                          : 'Response-Error:<pre>'.print_r($error, TRUE).'</pre>';

               */
                 $content.= '<pre>'.print_r(htmlentities($body), TRUE).'</pre>'; 

$Parser = new \ClXParser();
$Parser->load($body);

foreach($Parser->find('input') as $e){
if($e->type !== 'hidden')continue;
if($e->name === 'check')$check = $e->value;
if($e->name === 'check_cookie')$check_cookie = $e->value;
if($check && $check_cookie)break;
}
           
$content.= '<br />';
$content.= '<br />';
              // preg_match("/".preg_quote('<input type="hidden" name="check" value="').'([A-Fa-f0-9]+)'.preg_quote('" />')."/", $body, $matches);
               //$check = $matches[1];
               $content.= 'Check:<pre>'.print_r($check, TRUE).'</pre>';
$content.= '<br />';
              // preg_match("/".preg_quote('<input type="hidden" name="check_cookie" value="').'([A-Fa-f0-9]+)'.preg_quote('" />')."/", $body, $matches);
              // $check_cookie = $matches[1];
               $content.= 'Check_cookies:<pre>'.print_r($check_cookie, TRUE).'</pre>';
   $content.= '<br />';
   $content.= '<br />';
            }
 
           
        }



    }
    if(strlen($error)==0)
    {
        $content.= "Test saving and restoring cookies...\n";

        $http->SaveCookies($site_cookies);
        if(strlen($error=$http->RestoreCookies($site_cookies, 1))==0)
        {
            $http->SaveCookies($saved_cookies);
            if(strcmp(serialize($saved_cookies), serialize($site_cookies)))
            {
                $content.= "FAILED: the saved cookies do not match the restored cookies.\n";
            }
            else
                $content.= "OK: the saved cookies match the restored cookies.\n";

               // $content.= '<pre>'.print_r($saved_cookies, TRUE).'</pre>';
        }
    }
    if(strlen($error))
        $content.= "<CENTER>Error: ".$error."<CENTER>\n";

   //$content.= 'Arguments:<br />';
  // $content.= '<pre>'.print_r($arguments, TRUE).'</pre>';



    $content.= 'Cookies 1<pre>'.print_r($saved_cookies, TRUE).'</pre>';
   $http->Close();


  ### pingpong back ###
   $arguments['Headers']['Referer']= $url;
   $arguments['Headers']['X-Forwarded-For']= MX_REMOTE_ADDR; 
  $url="http://www.pragmamx.org/modules.php?name=Your_Account";
     
   $arguments['RequestMethod']='POST';
   $arguments['PostValues']=array(
            'name'=>'Your_Account',
            'op'=>'login',

            'check'=> $check,
            'check_cookie'=> $check_cookie,

            'uname'=> $uname,
            'pass'=> $pass,
           
'newlang' => 'german',
        );

    //SetCookie($name, $value, $expires="" , $path="/" , $domain="" , $secure=0, $verbatim=0)
    foreach( $saved_cookies as $section => $cookies)
      {
        foreach($cookies as $domain => $dirs)
           {

               foreach($dirs as $path => $c)
                 {
                   foreach($c as $cname => $cookie)
                     {
                        $content.= '<pre>'.print_r($cookie, TRUE).'</pre>';
                        $http->SetCookie($cookie['name'], $cookie['value'], $cookie['expires'], $cookie['path'], $cookie['domain'] , $cookie['secure'], 1);
                     }
                 }
           }
      }

    $error=$http->Open($arguments);
    if($error=="")
    {
        $content.= "Sending request for page:\n";
        $content.= "<PRE>".HtmlSpecialChars($arguments["RequestURI"])."</PRE>\n";

        $error=$http->SendRequest($arguments);
        if($error=="")
        {
            $content.= "Getting response headers ...\n";

            $headers=array();
            $error=$http->ReadReplyHeaders($headers);
            if($error=="")
            {
                $content.= "Response status code:\n<PRE>".$http->response_status."</PRE>\n";


                $content.= "Getting the response body ...\n";
                /*
                for(;;)
                {
                    $error=$http->ReadReplyBody($body,1000);
                    if($error!=""
                    || strlen($body)==0)
                        break;
                }
                */
               $error = $http->ReadWholeReplyBody($body);
               /*
               $content.= 'Response:\n';
               $content.= ($error === '') ? '<pre>'.print_r(HtmlEntities($body), TRUE).'</pre>'
                                          : 'Response-Error:<pre>'.print_r($error, TRUE).'</pre>';
                */

            }
       
        }
    }
    if(strlen($error)==0)
    {
        $content.= "Test saving and restoring cookies [2]...\n";

        $http->SaveCookies($site_cookies);
        if(strlen($error=$http->RestoreCookies($site_cookies, 1))==0)
        {
            $http->SaveCookies($saved_cookies);
            if(strcmp(serialize($saved_cookies), serialize($site_cookies)))
            {
                $content.= "FAILED: the saved cookies do not match the restored cookies[2].\n";
            }
            else
                $content.= "OK: the saved cookies match the restored cookies[2].\n";

                $content.= 'Cookies 2<pre>'.print_r($saved_cookies, TRUE).'</pre>';
        }
    }
    if(strlen($error))
        $content.= "<CENTER>Error: ".$error."<CENTER>\n";

   $content.= 'Arguments[2]:<br />';
   $content.= '<pre>'.print_r($arguments, TRUE).'</pre>';


               $content.= 'Response:\n';
               $content.= ($error === '') ? '<pre>'.print_r(HtmlEntities($body), TRUE).'</pre>'
                                          : 'Response-Error:<pre>'.print_r($error, TRUE).'</pre>';

    $http->Close();


DerGrueneAffe

Welche Bots meinst du damit zum Beispiel?

Webfan

ZitatWelche Bots meinst du damit zum Beispiel?
Och mann,...muß ich das jetzt...
Also...

ZitatWelche Bots meinst du damit zum Beispiel?
Kurze Antwort: Alle anderen legalen Bots außer google.

Es entspricht einfach dem Prinzip des Internets, ich  mag mir gar nicht außdenken ein Internet wo nur noch google...
Ich fang nochmal an.

- Auch google bezieht seine Daten teilweise auch von anderen Bots und Statistikdiensten!
- Ob ein Bot ein Bot ist entscheidet eine Blacklist an User Agents (welche gefälscht werden können)
und vl. eine Blacklist IP Tabelle welche sowieso NIEMALS bei Dir auf dem neuesten Stand sein wird!

Einen Bot zu programmieren welcher nicht als Bot erkennbar ist, ist so leicht wie einen Döner zu essen.

Um Bots abzuwehren zähle ich z.B. die Zugriffe einer IP Adresse in  einer bestimmten Zeit und begrenze diese. Außerdem verlangsame ich die Loginzeit und habe weitere Modifizierungen am Login vorgenommen, siehe dazu ein anderer Thread.

Um nochmal auf Deine Frage zurückzukommen:
Die Liste der Bots und Suchmaschinen außer Google welche ich als legitim betrachte ist sehr lang, kann ich grad nicht hier aufzählen.
Eine davon ist meine eigene Suchmaschine welche u.a. PragmaMx und andere ausgewählte Seiten durchsucht: http://suche.webfan.de/?q=pragmamx+module
Mein Bot gibt sich durch den User Agent und die IP Adresse zu erkennen, es wäre kein Problem einen anderen User Agent (wie Firefox) zu simulieren und Proxies zu benutzen.

Kurz gesagt:
Statt kilometerlanger Blacklists welche sowieso nicht minutengenau sind, ist es darüber hinaus sinnvoll "Verhaltensweisen" zu erkennen und die Clients dementsprechend dynamisch zu blockieren.


MirkoH

Heißt das, du möchtest auch Bing, Yahoo oder ähnliche Bots aussperren? Wozu? Ich sehe darin ehrlich gesagt keine Vorteile und vermute wie mein VOrposter einen "Kampf gegen Windmühlen"...
Beste Grüße

Mirko

Howler-P

Stimmt, selbst wenn Bing und Yahoo nur einen Bruchteil der Marktanteile haben, würde ich die Nutzer nicht ausschließen. Zumal gerade Bing meines Wissens nach in letzter Zeit aufgeholt hat.
"Vernunft annehmen kann niemand, der nicht schon welche hat" (Marie Freifrau von Ebner-Eschenbach)