Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Treba mi skripta ... Ako neko ima?

[es] :: PHP :: PHP za početnike :: Treba mi skripta ... Ako neko ima?
(TOP topic, by Goran Rakić)
Strane: < .. 1 2 3

[ Pregleda: 55784 | Odgovora: 47 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

plus_minus

Član broj: 289459
Poruke: 2161
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2232 Profil

icon Re: Treba mi skripta ... Ako neko ima?19.04.2015. u 16:34 - pre 58 meseci
I da stavimo tačku na ovaj mali doprinos .. » http://www.elitesecurity.org/p3563739

Ne znam jel' nekome potrebalo, jel' neko sam dodao sitnice koje su falile, kako god, evo završene varijante koja:

- neće da propusti dalje ukoliko ima teksta a taj tekst nije u sklopu validnih tagova koji smeju da se nađu unutar head taga ili je tekst mimo html komentara.
- neće da propusti dalje ukoliko nisu u pitanju samo dozvoljeni head tagovi te ako ima php ili xml tagova (u svim varijantama)
- neće da propusti dalje ukoliko su tagovi UPPERCASE (Mala slova i html5 bre. Ko još piše html tagove velikim slovima .. ? Mis'im ima.. ali.. whatever. To je mikrosekunda posla da se doda, al' ja to neću da radim)

ono što je izmenjeno/dodato:

Code (php):


<?php

// Deo pre prve petlje

     $details=preg_replace('/\s+/', ' ', $textarea);
     $details=str_replace('><','> <', $details);
     $details=str_replace('> </','></', $details);
     $details=str_replace('> <','>:*:<', $details);
     $details=(explode(':*:', $details));


// I mala izmena u prvoj petlji

     foreach($details as $i=>$line)
     {
          $checkLine=trim($details[$i]);

          if((strpos($checkLine, $allowedTags[0]) === false
          && substr_count($checkLine, '>') > 2)
          || substr($checkLine,0,1) !=='<'
          || substr($checkLine,-1) !== '>')
          {
               $HAAAALT = true;
               break;
          }
          else
          {
               $checkLine=str_replace('>',' ', $details[$i]);
               $checkLine=explode(' ', $checkLine);
               $checkLine=trim($checkLine[0]);
               $cl[]=$checkLine;
          }
     }

 


Sve ostalo je isto.

Evo i komplet metode u svom završnom izdanju:
(pozivanje i provera se vrši na isti način kao što je prehodno opisano)

Code (php):

<?php

// Sanitize allowed head tags for meta area before writing
protected function NotAllowedTagsForHead($textarea)
{
     // HTML tags
     $cl=array();
     $counter = array();
     $allowedTags = array (
          '<!--',
                '<title',
          '<style',
          '<base',
          '<link',
          '<meta',
          '<script',
          '<noscript',
     );

     $details=preg_replace('/\s+/', ' ', $textarea);
     $details=str_replace('><','> <', $details);
     $details=str_replace('> </','></', $details);
     $details=str_replace('> <','>:*:<', $details);
     $details=(explode(':*:', $details));

     if(count($details)>=1)
     {
          foreach($details as $i=>$line)
          {
               $checkLine=trim($details[$i]);

               if((strpos($checkLine, $allowedTags[0]) === false
               && substr_count($checkLine, '>') > 2)
               || substr($checkLine,0,1) !=='<'
               || substr($checkLine,-1) !== '>')
               {
                    $HAAAALT = true;
                    break;
               }
               else
               {
                    $checkLine=str_replace('>',' ', $details[$i]);
                    $checkLine=explode(' ', $checkLine);
                    $checkLine=trim($checkLine[0]);
                    $cl[]=$checkLine;
               }
          }


          unset($i, $line, $details, $checkLine);

          foreach($cl as $suspect):
               if(in_array($suspect, $allowedTags)):
               else: $HAAAALT = true; break; endif;
          endforeach;
          unset($cl, $suspect);
     }
     else unset($cl, $details);

     if(!isset($HAAAALT))
     {
          foreach($allowedTags as $value):
          if(strpos($textarea, $value) !== false):
               $counter[]=true; else: endif;
          unset($value);
          endforeach;
          unset($allowedTags);

          $HAAAALT=(
               (count($counter)<1 || empty($counter)) ?
               true:false
          );
     }

     // SS/xml tags piece start
     foreach( array (
          'fullphp' => '<?php',
          'shortphp' => '<?',
          'aspphp' => '<%',
          'shortecho' => '<?=',
          'endasp' => '%>',
          'endtag' => '?>'
     ) as $var=>$value):
          $$var=strpos($textarea, $value);
          unset($value, $var);
     endforeach;

     $serverSideSTOP=(
          in_array(true,
               array($fullphp, $shortphp, $aspphp, $shortecho, $endasp, $endtag)) ?
          true:false
     );

     // SS/xml tags piece end


     return ( (trim($textarea) !== '' && $HAAAALT || $serverSideSTOP ) ? true:false );
}

 


[Ovu poruku je menjao plus_minus dana 19.04.2015. u 22:55 GMT+1]
about:networking
 
Odgovor na temu

plus_minus

Član broj: 289459
Poruke: 2161
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2232 Profil

icon Re: Treba mi skripta ... Ako neko ima?24.10.2015. u 16:21 - pre 51 meseci
Opet ja.

Razlog za `engrija` jeste - fleš. Doduše razlog je sledeći: ono, kada neko uzme pa nadžidža sedamnaest fleš embed/objekata na neku html stranicu, a inače nije vičan kodiranju, već se ta stranica našla na nekom blogspot domenu, a svaki od tih sedamnaest fleš objekata ima isti istovetan i nepravilan kod za povlačenje yt video klipova.. onda sledi jedan freeze. Pretraživač se zamrzne. Kada se desi takva situacija, korisnik ima opciju da ubije pretraživač, to jest proces (ako zna) ili da sačeka oko pola minuta da se sam ne odmrzne i da konačno dobije poruku tipa `Adobe flash plugin has crashed ...`. Ovo se ne dešava uvek, ali kad se desi, mene istrese iz cipela. Svi kao nešto gotive html5 video i kao hoće da se prebace komplet i ja sam jedan od njih, ali na našu žalost, html5 video još uvek nije standard i fleš plugin se za embed video klipova još uvek koristi. Ono što je najzanimljivije, koliko sam ja primetio, ove sa yt nešto baš i zabole za varijacije share/embedovanja, a ovi što i nisu vični kodiranju, nešto i ne umeju da se snađu ili imaju i dalje stari object/embed deo koda. Upravo zbog toga, nastaje kuršlus i adobe flashplugin - crash. Embed zeza.

Object tag kao standalone, ne.

Dakle, onome kome treba siguran način da provuče video klipove sa YT sajta ... i ne želi to kao iframe ... i ne želi da ispusti one korisnike kojima je jedina opcija da gledaju video online preko fleša, jer sistem koji koriste ne dozvoljava/nije sposoban i dovoljno jak za html5 video, te uz to hoće da budu sigurni da do crash-a neće doći..
a pri tom takođe želi da mu kod bude validan i za xhtml i za html..
.. testirano i radi (kad kažem testirano, ne mislim na IE8, IE7 i na ostatak žgadije) :

(Radi kao pesma čak i na ff preko linuxa. Ko nije upoznat, Linux je omražen od strane adobe-a, a firefox preko linuxa dobija samo critical bug-fix update za fleš plugin i to za `latest (ironija)` v 11.2)

funkcija:

Code (php):

<?php

function yt_flash_object($y, $h=bool, $wi=int, $he=int)
{    
     $x=null;
     $a=(($h) ? 'https': 'http');
     $a.=('://www.youtube.com/v/');
     $b='?fs=1&amp;hl=en_US&amp;rel=0';
     $d = ($a.$y.$b); unset($a, $b, $y, $h);

     $wi=((!$wi) ? '480':"$wi"); $he=((!$he) ? '320':"$he");
     $wh=("width:${wi}px; height:${he}px;");
     unset($wi, $he);

     foreach(array(
          'movie' => "$d",
          'wmode' => 'opaque',
          'quality' => 'high',
          'menu' => 'false',
          'allowfullscreen' => 'true',
          'allowscriptaccess' => 'always',
     ) as $n=>$v) $x.=(
          '<param name="'.$n.'" value="'.$v.'"> '
     ); unset($v, $n);
     $x=('<object type="application/x-shockwave-flash" '.
          'data="'.$d.'" style="'.$wh.'">'."${x}</object>"
     ); unset($d, $wh);
     return($x);
}
 


Koristi se izuzetno lako.

primer:

Code (html):

<!DOCTYPE html>
<html>
<head><meta charset=utf-8>
<title>YT flash embed</title>
</head>
<body>
<div class="neka-tamo-klasa">
     <?php echo yt_flash_object('cfIAqYhLSr0', true, false, false); ?>
</div>
</body>
</html>
 


Dakle, funkcija ima 4 parametra.

- Prvi parametar jeste sami unikatni yt video ID, string dakle. ( .../watch?v=cfIAqYhLSr0 )

- Drugi parametar jeste boolean vrednost. true / false. Ako je true to znači https zahtev. Ako je false, biće http zahtev, bez enkripcije i ovo koliko sam ja primetio, na false, neće da radi.
Dakle, true, jer ovi iz yt više ne podržavaju ne-enkriptovane http embed zahteve.

- Treći jeste width ili širina.
- četvrti jeste height ili visina.

Ako je treći parametar boolean false, podrazumeva se širina objekta od 480(px).
Za četvrti parametar važi isto, s' tim što je podrazumevana vrednost 320(px).

Primer ako želimo video prozorče od 640*480px:

Code (php):

<?php

# Funkcija dodaje `px` automatski.
echo yt_flash_object('cfIAqYhLSr0', true, '640', '480');

 


I to bi bilo to.
about:networking
 
Odgovor na temu

Panajotov
Programator
Beograd

Član broj: 322930
Poruke: 75



+5 Profil

icon Re: Treba mi skripta ... Ako neko ima?24.10.2015. u 16:45 - pre 51 meseci
Nisam naročito čitao temu, ali mi je zapao za oko tvoj post. Zašto raditi tako? Mislim da je bolja opcija da se od svakog klipa povuče njegova sličica (thumbnail) i tako prikaže korisniku, a kada želi da pogleda klip/video samo da mu apenduje (append) klip/video koji je želeo.
 
Odgovor na temu

plus_minus

Član broj: 289459
Poruke: 2161
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2232 Profil

icon Re: Treba mi skripta ... Ako neko ima?24.10.2015. u 17:12 - pre 51 meseci
Definiši append. U php-u, makar čistom, nema append, mada znam na šta misliš. ;)

Fora je u tome što ni ja ne bih tako delao, ako ima više od 2 video klipa.

Bio sam toliko iznerviran jer sam silom prilike završio na jednom blogspot linku koji je prouzrokovao browser - freeze i rešio da napišem post.
Eto, možda će baš taj `blogspotter` da proba ovako nešto (za njih i jeste napisana funkcija), tu gde nema thumbova, nego direkt - embed.

A i onda kada povuče prvo thumb, pa append, šta radi taj append?
Ako nije iframe, kakav je kod koji dopunjuje nodu?

Kako bi po tebi trebalo da izgleda?

Poenta priče je da bude što je više moguće cross-compatible, da uvek radi, da ne zamrzava pretraživač i da nije iframe.

Ono što se na ovaj moj način dobija u html-u jeste sledeće:

Code (html):

<object type="application/x-shockwave-flash" data="https://www.youtube.com/v/cfIA...amp;amp;hl=en_US&amp;rel=0" style="width:480px; height:320px;">
<param name="movie" value="https://www.youtube.com/v/cfIA...amp;amp;hl=en_US&amp;rel=0">
<param name="wmode" value="opaque">
<param name="quality" value="high">
<param name="menu" value="false">
<param name="allowfullscreen" value="true">
<param name="allowscriptaccess" value="always">
</object>
 

about:networking
 
Odgovor na temu

Panajotov
Programator
Beograd

Član broj: 322930
Poruke: 75



+5 Profil

icon Re: Treba mi skripta ... Ako neko ima?24.10.2015. u 17:46 - pre 51 meseci
Pod apend mislim jkveri (jquery) apend. Sve bih ja uradio kako si ti napisao, samo ne bi direktno kao objekat (object) prikazivao, vec bi stavio div sa sličicom (thumbnail) i nekim dugmetom (imitacijom yt dugmeta) koji bi radio onClick. Uglavnom, evo skripte kako bih to uradio:

Code:

(function ($) {
    var ytFunkcija= function () {
        var youTubeID = $(".youtube-player");
        youTubeID.each(function () {
            var This = $(this), ytID = This.data("id");
            This.html('<img class="youtube-thumb" src="https://img.youtube.com/vi/' + ytID + '/hqdefault.jpg"/><div class="play-button"></div>');
        });
        youTubeID.on("click", function (e) {
            e.preventDefault();
            var This = $(this),
                ytID = This.attr("data-id"),
                info = This.attr("data-info") || 0,
                rel = This.attr("data-rel") || 0,
                playlist = This.attr("data-playlist") || 0,
                jsapi = This.attr("data-enablejsapi") || 1,
                privacy = This.attr("data-privacy") || 1,
                autohide = This.attr("data-autohide") || 2,
                controls = This.attr("data-controls") || 0;
            if (privacy === 1)
                url = 'https://www.youtube-nocookie.com/embed/';
            else
                url = 'https://www.youtube.com/embed/';

            this.css("background", "#222").html('<iframe src="' + url + ytID + '?autoplay=1&autohide=' + autohide + '&border=0&wmode=opaque&enablejsapi=' + jsapi + '&controls=' + controls + '&showinfo=' + info + '&rel=' + rel + ((playlist !== 0) ? '&playlist=' + playlist : null) + '" frameborder="0"  allowfullscreen></iframe>');
        });
    };
    $(document).ready(function () {
        ytFunkcija();
    });


 
Odgovor na temu

plus_minus

Član broj: 289459
Poruke: 2161
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2232 Profil

icon Re: Treba mi skripta ... Ako neko ima?24.10.2015. u 17:54 - pre 51 meseci
To onda ne treba da ide u ovaj forum, nego u podforum javascript i ajax...
A ako ga prikazuješ kao objekat, xhtml strict/transitional html4/5 .. podržavaju. Object. Tag. :)
Dakle, svi i sve vrste i podvrste html doctype-a.
Neke (čini mi se xhtml strict) ne vare iframe ič.
ps: I jel' mora uvek i uvek - jquery? Umete li vi da živite bez jquery-a?

VanillaJS. Think about that.
about:networking
 
Odgovor na temu

Panajotov
Programator
Beograd

Član broj: 322930
Poruke: 75



+5 Profil

icon Re: Treba mi skripta ... Ako neko ima?24.10.2015. u 18:54 - pre 51 meseci
Znam, zato sam i na početku napisao da nisam čitao temu.
A iframe ne podržavaju, ma daj :)

Mora jkveri (jquery), ipak je svaki frejmvork(framework) zavisan od njega ukoliko ga koristimo u projektu, takođe, previše stvari dobiješ na gotovo :D
 
Odgovor na temu

plus_minus

Član broj: 289459
Poruke: 2161
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2232 Profil

icon Re: Treba mi skripta ... Ako neko ima?24.10.2015. u 19:20 - pre 51 meseci
Bre, ako misliš da nešto izmišljam .. -> iframes-not-valid-in-xhtml-strict

Šta mora? Jquery? Ne mora.
Dobiješ previše stvari na gotovo?
Ja ne volim skoro ništa na gotovo.
A i ne bih o jq ništa da raspravljam, bar ne ovde.
about:networking
 
Odgovor na temu

[es] :: PHP :: PHP za početnike :: Treba mi skripta ... Ako neko ima?
(TOP topic, by Goran Rakić)
Strane: < .. 1 2 3

[ Pregleda: 55784 | Odgovora: 47 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.