Ankündigung

Einklappen
Keine Ankündigung bisher.

Linkausgabe steuern, erlauben und sperren

Einklappen

Neue Werbung 2019

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

  • Linkausgabe steuern, erlauben und sperren

    Hallöchen. Ich bin der "Neue".

    Zunächst: meine allgemeine Kenntnisse sind sehr gering. Ich befasse mich erst seit einigen Monaten mit php, html css und co.
    Versuche viel zu lesen und zu lernen. Leider gibt es hier und da immer wieder kleine Hürden, die ich noch nicht überwinden kann.
    Eine davon ist die Steuerung der Linkausgaben.

    Ein Kumpel und ich haben einen kleinen Themenchat eröffnet.

    Dort möchten wir aber gerne, dass die Links, die teilweise gepostet werden, vom System geprüft werden, so, dass nur die Seiten erlaubt werden, die wir auch auf die "Whitelist" setzen.

    Da dachte ich, dass ich alle geposteten Links erst mal an eine interne Seite zur Überprüfung schicke und dann von dort aus entweder "Weiterleitung..." oder "Diese Seite ist gesperrt" ausgebe.

    Die Weiterleitung der geposteten Links habe ich schon mal hinbekommen:

    PHP-Code:
            if (stripos($str']http://')===false &&  stripos($str']https://')===false)
                    
    $str preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<a target="_blank" href=https://meineSeite.de/link.php?url=$1\>LINK GEPOSTET</a>",$str); 
    Nur weiss ich nicht, wie ich die php Datei (link.php) erstellen soll, die die Links prüft und dementsprechend weiterleitet. Im Grunde genommen, sollen lediglich "Youtube" und domaininterne Links erlaubt werden.

    Dazu habe ich leider nicht die passende Lektüre auf Google gefunden.

    Kann mir jemand auf die Sprünge helfen, wie der Code dazu aussehen muss?

  • #2
    Dazu habe ich leider nicht die passende Lektüre auf Google gefunden.
    Ich frage mich da immer warum ich nach 2 Sekunden da schon was auf den ersten Blick Brauchbares finde?
    Whitelisting urls in php

    Kommentar


    • #3
      Dein Frage ist leicht zu beantworten. Da du andere Suchwörter nutzt, als ich. Ich habe nicht behauptet, dass es im Internet dazu nichts zu lesen gibt, sondern dass ICH nicht fündig geworden bin, mit meinen "leienhaften" Suchbegriffen.
      Darum würde Dich bitten, nicht so herablassend Neulingen gegenüber zu sein. Vor allem jene, die sich noch ziemlich NEU mit der Thematik beschäftigen (möchten).

      Zurück zu der Herausforderung.

      Wenn ich die Schritte dort befolge, dann steht in meiner "link.php" lediglich, welche Seiten "Valid" sind und welche nicht. Eine Weiterleitung erfolgt nicht.


      Wenn ich mir den Code auf stackoverflow ansehe, dann ist das nicht das, was ich genau vorgestellt hatte (so scheint es jedenfalls. Gern korrigieren, wenns net so ist).

      Wenn ein Link gepostet wird, soll nicht die URL angezeigt werden, sondern "Link gepostet".Soweit habe ich das ja bereits geschafft.
      Dieser Link soll dann zu link.php führen, was ebenfalls funktioniert.

      Und bei Link.php soll der Link geprüft und dann die Weiterleitung (oder nicht) erfolgen.

      Danke schon mal für die Mühe(n).

      Kommentar


      • #4
        Und bei Link.php soll der Link geprüft und dann die Weiterleitung (oder nicht) erfolgen.
        Warum bei link.php und nicht schon direkt nach abschicken der Chatnachricht?
        Ist doch nur eine Funktion.
        Was verstehst du unter Weiterleitung? Den Link an sich?

        Kommentar


        • #5
          wenn es direkt bei der Nachricht möglich wäre, wäre es umso besser.

          An link.php habe ich gedacht, weil irgendwo ja die Meldung kommen muss, dass der Link nicht erlaubt ist.
          Und die Link URL im Chat soll nicht ersichtlich sein. Darum hatte ich gedacht, dass ich die Links an die link.php weiterleite.

          Was verstehst du unter Weiterleitung? Den Link an sich?
          Man postet den Link in den Chat. Klickt diesen an und wird erst auf die link.php weitergeleitet.
          Wenn der Link "erlaubt" ist, dann wird die Link URL dort angezeigt und der Nutzer muss erneut drauf klicken.

          Ich bin für jeden Lösungsvorschlag offen. Ob nun direkt über die Chatnachricht oder link.php.

          Die gesamte class sieht so aus:

          PHP-Code:
          class StaticMethods{

              
          /**
              * Message filter, replaces smileys with images and "bad words"
              *
              * @param string $str, message text
              * @param Array  $sml, Smileys dataset
              * @return String
              */
              
          static function filtering($str$sml$_prefix){

                  
          //to remove all non printable characters in a string, otherwise JS error
                  
          $str preg_replace('/[\x00-\x1F]/'''$str);

                  
          //replace smileys
                  
          for ($a=0$a<count($sml); $a++){
                           
          $img getimagesize("./".$sml[$a][1]);
                           
          //$str = str_replace($sml[$a][0], "<img src="".$sml[$a][1]."" ".$img[3].">", $str, $count);
                           
          $str str_replace($sml[$a][0], "<img src="".$sml[$a][1]."" ".$img[3]." id="smilchat_".$sml[$a][0]."" style="cursor:pointer">"$str$count);
                           if (
          $count>0$count_all+=$count;
                  }

                  if (
          $count_all 8$str strip_tags($str);

                  
          // AUS DEN URLs LINKS GENERIEREN
               
          if (stripos($str']http://')===false &&  stripos($str']https://')===false)
                          
          $str preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<a target="_blank" href=https://meineSeite.de/link.php?url=$1\>LINK GEPOSTET</a>",$str); 
                          else {
                          
          $str str_replace("http://www.youtube.com/watch?v="""$str);
                          
          $str str_replace("https://www.youtube.com/watch?v="""$str);
                  }


                  
          // Bad Word Filter

                  
          if (!isset($_SESSION['etchat_'.$_prefix.'_badwords']) && file_exists("./lang/bad_words.xml")){
                      
          $xml = @file_get_contents("./lang/bad_words.xml");
                      
          $parser = new XMLParser($xml);
                      
          $parser->Parse();

                      foreach(
          $parser->document->word as $bword){

                          
          $exceptions = array();

                          if (
          is_array($bword->except))
                              foreach (
          $bword->except as $except)
                                  
          $exceptions[] = $except->tagData;

                          
          $_SESSION['etchat_'.$_prefix.'_badwords'][] = array(
                              
          'in' => chop(trim($bword->tagAttrs['in'])),
                              
          'out' => chop(trim($bword->tagAttrs['out'])),
                              
          'except' => $exceptions
                          
          );
                      }
                  }

                  if (isset(
          $_SESSION['etchat_'.$_prefix.'_badwords'])){

                      foreach(
          $_SESSION['etchat_'.$_prefix.'_badwords'] as $key =>$bword){
                          if (
          count($bword['except'])>0)
                              foreach(
          $bword['except'] as $key_ex => $ex){
                                  
          $str str_replace($ex"<norepl>".$ex."</norepl>" $str);
                              }
                      }

                      foreach(
          $_SESSION['etchat_'.$_prefix.'_badwords'] as $bword){
                          
          $bad_word $bword['in'];
                          
          $good_word $bword['out'];

                          
          $pattern '/(?<!\<norepl\>)'.$bad_word.'(?!\<\/norepl\>)/ui';
                          
          $str preg_replace($pattern$good_word$str);
                      }

                      
          $str str_ireplace("<norepl>"""$str);
                      
          $str str_ireplace("</norepl>"""$str);
                  }


                  
          $video '<object width="425" height="344"><param name="wmode" value="transparent" name="movie" value="http://www.youtube.com/v/$1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed wmode="transparent" src="http://www.youtube.com/v/$1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"></embed></object>';

                  if (
          substr($str08)!="/window:"){
                      if (
          stripos($str'[img]')!==false && stripos($str'[/img]')!==false){
                          
          $image_path preg_replace('/\[img\](.*?)\[\/img\]/''$1'$str);
                              if (!empty(
          $image_path) && stripos($str'?admin')===false)
                                  
          $str="<img src="$image_path" style="max-width:500px;max-height:300px;">";
                      }
                      
          $str preg_replace('/\[video\](.*?)\[\/video\]/'$video$str); 
                  }

                  return 
          $str;
              }

          Unter // AUS DEN URLs LINKS GENERIEREN bin ich grad am tun und machen.

          Kommentar


          • #6
            Ich bin für jeden Lösungsvorschlag offen
            Hast du doch schon erhalten, das umsetzen musst du.
            Du machst einen Gedankenfehler.

            Jemand schreibt eine Nachricht und schickt diese ab
            - Dann prüfst du diese Nachricht ob sich URLs darin befinden
            - Wenn ja, dann gegen Whitelist prüfen
            -- Ist URL verboten dann Nachricht ausgeben und Formular anzeigen
            -- Wenn nein dann Nachricht abspeichern und
            Weiter mit Chat

            Kommentar


            • #7
              Ok, ich werde mir das noch mal genau anschauen.

              Was ich noch nicht ganz verstanden habe: Der Workflow bei stackoverflow gehört nicht in eine extra php Datei, sondern kann direkt in meine class Datei eingebaut werden oder?
              Also
              PHP-Code:
              <a target="_blank" href=https://meineSeite.de/link.php?url=$1\>LINK GEPOSTET</a>" 
              raus und von dort aus, weiter schreiben...?

              Ich weiss, nervige Fragen eines Anfängers

              Kommentar


              • #8
                Du kannst alles in eine Datei schreiben. Letzten Endes wird ja nur eine Datei aufgerufen und abgearbeitet. Alles was dort nicht als Code drin steht aber mit einfliessen soll wird ja inkludiert ist also dann doch Bestandteil dieser einen Datei.
                Du solltest dich mal mit include auseinandersetzen.

                Kommentar

                Lädt...
                X