MySQL Analyseproblem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    genau bei den proxys zeigt deine php-funktion schwachstelle
    $_SERVER["HTTP_X_FORWARDED_FOR"] ist nich einfach eine IP, sondern mehrere ips, die mit ',' von einanderen getrennt sind.
    Da php loker ein string mit einem addirt multipliziert
    (beispiel 20== (10+'10 wunder') liefert true)
    merkst du an der stelle ($ips[3]+...) nicht, dass da xxx,yyy.yyy.yyy.yyy..... steht und nur xxx berücksichtigt wird. Als Ergebnis hast du immer die erste Ip von der ip-kette und die ist nichts anderes als Proxy-Ip unter der mehrere User versteckt sind.
    Slava
    bituniverse.com

    Kommentar


    • #17
      Okay, hab das jetzt umgeschrieben und es funktioniert:

      PHP-Code:
          $ip_array explode(","$realip);
          return 
      $ip_array[count($ip_array) - 1]; 
      Ich bin nur die Signatur

      Kommentar


      • #18
        funktionieren tut es, aber die letzte IP in Ip-Kette ist auch keine Garantie, dass es keine Duplikate gibt. Ich würde für alle fälle die 'HTTP_X_FORWARDED_FOR'-Strings komplett in einem extra-Feld abspeichern. da x.x.x.x,127.0.0.1 und y.y.y.y,127.0.0.1 nach deinem Verfahren immer noch gleich sind.
        Slava
        bituniverse.com

        Kommentar


        • #19
          Hmm, aber Strings vergleichen dauert doch zu lange per MySQL-Query. Und nen Vollindex darauf bringt auch nichts. Das Problem sind ~500.000 Datensätze pro Woche die zu bewältigen sind.
          Ich bin nur die Signatur

          Kommentar


          • #20
            das brauchst du aber nur als Zusatzkriterium für deine Auswertung. Die meiste Treffer werden schon bei suche von gleichen ips vorselektiert.
            die spalte darf auch NULL sein , da nicht jeder Besucher eine HTTP_X_FORWARDED_FOR hat. Wie willst noch 100% sicher sein, dass die User nicht von gleicher Ip kommen?
            Slava
            bituniverse.com

            Kommentar


            • #21
              Hab jetzt was gefunden was auch besser die IP-Adressen filter:
              PHP-Code:
              function get_ip()
              {
                  
              $ip false;
                  if(!empty(
              $_SERVER['HTTP_CLIENT_IP']))
                  {
                      
              $ip $_SERVER['HTTP_CLIENT_IP'];
                  }
                  if(!empty(
              $_SERVER['HTTP_X_FORWARDED_FOR']))
                  {
                      
              $ips explode(", "$_SERVER['HTTP_X_FORWARDED_FOR']);
                      if(
              $ip)
                      {
                          
              array_unshift($ips$ip);
                          
              $ip false;
                      }
                      for(
              $i 0$i count($ips); $i++)
                      {
                          if(!
              preg_match("/^(10|172\.16|192\.168)\./i"$ips[$i]))
                          {
                              if(
              version_compare(phpversion(), "5.0.0"">="))
                              {
                                  if(
              ip2long($ips[$i]) != false)
                                  {
                                      
              $ip $ips[$i];
                                      break;
                                  }
                              }
                              else
                              {
                                  if(
              ip2long($ips[$i]) != - 1)
                                  {
                                      
              $ip $ips[$i];
                                      break;
                                  }
                              }
                          }
                      }
                  }
                  return (
              $ip $ip $_SERVER['REMOTE_ADDR']);

              Und komischerweise sind alle IPs jetzt eineindeutig. Jetzt werden auch private Adressräume gefiltert.
              Ich bin nur die Signatur

              Kommentar


              • #22
                filtern von internen Ips macht eigentlich gegenteil von dem, was du brauchst.

                bitte bitte.
                Slava
                bituniverse.com

                Kommentar


                • #23
                  Zitat von Slava Beitrag anzeigen
                  filtern von internen Ips macht eigentlich gegenteil von dem, was du brauchst.

                  bitte bitte.
                  Und wie soll ich das ändern? Eine Funktion in der ich alle nicht-numerischen Zeichen filtere und den Rest dann wie sonst üblich in Nummernpaaren mit 256 multipliziere?

                  1.2.3.4, 5.6.7.8 => 2 IP-Adressen
                  1*256^1+2*256^2, [...], + 7*256^7 + 8*256^8 ?
                  Ich bin nur die Signatur

                  Kommentar

                  Lädt...
                  X