Ankündigung

Einklappen
Keine Ankündigung bisher.

[url] Pattern Ersetzen mit Suchausdruck

Einklappen

Neue Werbung 2019

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

  • [url] Pattern Ersetzen mit Suchausdruck

    Ich habe momentan code der in meinen forum beiträgen die URL tags absucht...
    um Schrott URLs zu blockieren.... funtzt auch ganz gut...

    PHP-Code:
        $pattern[] = '#\[url\]([^\[]*?)\[/url\]#e';
        
    $pattern[] = '#\[url=([^\[]+?)\](.*?)\[/url\]#e'
    die erste Zeile für alle [ u r l ] http://dieseite [ / u r l ]
    die zweite Zeile für alle [ u r l = http://dieseite ] [ / u r l ]

    nun habe ich aber gewisse Nutzer/Bots die \http://dieseite\ in den url tags angeben. Wie kann ich also die pattern ändern, damit diese auch erfasst werden?

    PHP-Code:
    $replace = array();
        
    $replace[] = 'urlcheck(\'"$1"\', $errors)';
        
    $replace[] = 'urlcheck(\'"$1"\', $errors, \'$2\')'
    (urlcheck ist die function womit ich in einer separaten datei die URLs suche)


  • #2
    was bitte soll der Aufruf deiner Funktion IN einem String.Ausdruck ? .. noch dazu mit einfachem Quote ? da wird er ja nichtmal aufgelöst ...
    "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

    Kommentar


    • #3
      Brauchst Du mehr Informationen um die Frage beantworten zu können?

      Kommentar


      • #4
        nun direkt zu deiner Frage .. warum schneidest du nicht mit normalen String-Funktionen alles bis zum http weg ?
        PHP-Code:
        $beginnhttp=strpos($url,"http");
        $url=substr($url,$beginnhttp); 
        und schon interessieren dich weder ein = noch ein \ vor der URL
        "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

        Kommentar


        • #5
          Besten Dank, kläre das gleich mal ab... nicht sicher ob das mit dem spezifischen Forum-Code zusammenhängt oder warum single quotes benutzt wurden...

          Kommentar


          • #6
            du solltest dann halt noch prüfen ob dann auch wirklich http im string vorkommt, oder was ist mit einer url, die ohne http gepostet wird ?

            Wenn du ein gutes Regex Pattern für URLs hast/findest/selber machst kannst du damit auch auch die "reine" URL aus dem geposteten String rausziehen.

            Aber ein Pattern für URLs ist gar nicht so einfach, wie es scheint.

            Kommentar


            • #7
              Zitat von kn0wledge Beitrag anzeigen
              du solltest dann halt noch prüfen ob dann auch wirklich http im string vorkommt, oder was ist mit einer url, die ohne http gepostet wird ?

              Wenn du ein gutes Regex Pattern für URLs hast/findest/selber machst kannst du damit auch auch die "reine" URL aus dem geposteten String rausziehen.

              Aber ein Pattern für URLs ist gar nicht so einfach, wie es scheint.
              nicht einfacher / schwerer als ein gutes Pattern für Email ...

              fehlendes http am Anfang kann man ja erkennen (strpos meldet FALSE) und kann dann am Anfang http:// einfügen , womit das alte Pattern wieder funzt

              unterstützen würde ich das noch mit str_tolower , um groß-kleinschreibung von vorn herein zu vereinheitlichen
              "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

              Kommentar


              • #8
                Zitat von eagle275 Beitrag anzeigen
                nicht einfacher / schwerer als ein gutes Pattern für Email ...
                doch. Auch wenn ich das gar nicht behauptet habe aber trotzdem ^^

                fehlendes http am Anfang kann man ja erkennen (strpos meldet FALSE) und kann dann am Anfang http:// einfügen , womit das alte Pattern wieder funzt
                Klar kann man das erkennen, deswegen sage ich ja auch prüfen.

                Kommentar


                • #9
                  Also, das mit dem Single Quote ist nur aufgrund der Bequemlichkeit gewesen (des entsprechenden Entwicklers).

                  Leider hat der momentan nicht viel Zeit, bzw. anderes zu tun.

                  Und ich habe folgendes Problem:

                  Beispiel:
                  Spammer XY postet link 'http://irgendeinedomain.com/irgendeineseite'
                  nun setze ich die URL auf meine Liste der zu blockierenden Seiten
                  UND setze auch noch 'http://irgendeinedomain.com' drauf.
                  Nun kommt der Spammer XZ und setzt
                  'http://irgendeinedomain.com/dieneueseite'
                  und der ganze Filter funktioniert nicht....

                  Hat da jemand eine Ahnung wie ich die auch erwische?

                  Kommentar


                  • #10
                    und der ganze Filter funktioniert nicht....
                    Wie sieht dein Ansatz aus?
                    http://hallophp.de

                    Kommentar


                    • #11
                      Das ist für ein PunBB forum - hier der Teil des Codes der die Signatur überprüft...
                      PHP-Code:
                          <hook id="pf_change_details_signature_validation"><![CDATA[
                          
                      $pattern = array();
                          
                      $pattern[] = '#\[url\]([^\[]*?)\[/url\]#e';
                          
                      $pattern[] = '#\[url=([^\[]+?)\](.*?)\[/url\]#e';

                          
                      $replace = array();
                          
                      $replace[] = 'urlcheck(\'$1\', $errors)';
                          
                      $replace[] = 'urlcheck(\'$1\', $errors, \'$2\')';

                          if (
                      $forum_config['o_make_links'] == '1')
                          {
                              if (!
                      defined('FORUM_PARSER_LOADED')) {
                                  require 
                      FORUM_ROOT.'include/parser.php';
                              }
                              
                      $_POST['signature'] = do_clickable($_POST['signature']);
                          }
                          
                          
                      $_POST['signature'] = preg_replace($pattern$replace$_POST['signature']);

                          function 
                      urlcheck($url, &$errors$text "") {
                              global 
                      $ext_info$forum_user$forum_db$forum_url;

                              
                      $filename $ext_info['path'].'/spam.csv';
                              
                      $handle fopen($filename"r");
                              
                      $content fread($handlefilesize($filename));
                          
                              if(
                      strpos($content$url)) {
                                  if (
                      file_exists($ext_info['path'].'/lang/'.$forum_user['language'].'/'.$ext_info['id'].'.php'))
                                      include 
                      $ext_info['path'].'/lang/'.$forum_user['language'].'/'.$ext_info['id'].'.php';
                                  else
                                      include 
                      $ext_info['path'].'/lang/English/'.$ext_info['id'].'.php';
                              
                                  
                      $url str_replace('"'''$url);
                                  
                      $query = array(
                                      
                      'SELECT'    =>    'url',
                                      
                      'FROM'        =>    'url_spam',
                                      
                      'WHERE'        =>    'url = \''.$url.'\' AND type = \'sig\''
                                  
                      );
                                  
                      $result $forum_db->query_build($query) or error(__FILE____LINE__);
                                  if(
                      $forum_db->num_rows($result) == 0) {
                                      
                      $query = array(
                                         
                      'INSERT'   => 'user_id, ip, url, time, type',
                                         
                      'INTO'     => 'url_spam',
                                         
                      'VALUES'   => '\''.$forum_user['id'].'\', \''.get_remote_address().'\', \''.$url.'\', NOW(), \'sig\''
                                      
                      );
                                      
                      $forum_db->query_build($query) or error(__FILE____LINE__);
                                  }
                                  
                                  if(
                      $forum_user['num_posts'] < && $forum_user['group_id'] != 2) {
                                      
                      delete_user($forum_user['id'], true);
                                      
                      message($lang_url_spam['User deleted']);
                                  } else {
                                      
                      $errors[] = sprintf($lang_url_spam['URL disallowed'], $url$url);
                                  }
                              } else {
                                  
                      $url str_replace('"'''$url);
                              }

                              if(!empty(
                      $text)) {
                                  return 
                      '[url='.$url.']'.$text.'[/url]';
                              } else {
                                  return 
                      '[url]'.$url.'[/url]';
                              }
                          }
                          ]]></
                      hook

                      Kommentar

                      Lädt...
                      X