tinyMCE + MySQL

tinyMCE + MySQL

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3747
  • Gde živiš: 127.0.0.1

Evo ovako, pravim (i dalje) aplikaciju, i neophodan mi je WYSIWYG editor, odlucio sam se za tinyMCE Smile e sad, kako da html kod koji dobijem "bezbedno" smestim u bazu, i da ga posle prikazem na web stranici onako kako je "zamisljen"?

Evo primera koda koji dobijem:

<p>Ovo je neki tekst :) <strong>primer</strong> koda sa eksternim <a href="http://www.mycity.rs" target="_self" title="MyCity Forum">linkom</a></p> <p style="text-align: center;">i <span style="text-decoration: underline;">jos</span> nekim <em>podesavanjima</em>...</p> <ul> <li>i nekim listama<br /></li> </ul>

dozvoljene opcije su: Bold, Italic, Underline, Align Left, Align Right, Align Center, Align Justify, Ordered List, Unordered List, Indent, Outdent, Link.

Any ideas?



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • igor86  Male
  • Stručni saradnik
    Web programiranje
  • Pridružio: 24 Maj 2006
  • Poruke: 1633

Prvo dobar je taj tinyMCE, ali je uzasno tezak, doduse ima editovanje modula.

Pa recimo da sve < i > skrsis u &lt; i &gt; Zatim radis repace cega hoces

$FindTags  = array( '&lt;strong&gt;','&lt;/strong&gt;', ...); $HtmlTags = array( '<strong&>','</strong>', ...); str_replace( $FindTags, $HtmlTags, $Text);

Nije bas najsretnije rjesenje, ali radi posao i to dosta brzo.



offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3747
  • Gde živiš: 127.0.0.1

Dobro, nesto tako sam i ja razmisljao, ali je moj kod "malcice" duzi... jbg sta je iskustvo Smile

Nego, ajde sad da stavimo na stranu te "jednostavne" kodove tipa <b>, <em>, <strong>, <ul>... koji u sebi nemaju style atribut (posto je to reseno), sta da radim sa ovim koji imaju?

Ne znam koliko je pametno da rucno proverim sve varijente, pa da radim replace, jer je ocigledno, bar za align, da je 90% koda isto, a da se razlikuje po jedna rec. Mislim da bi neki RegExp tu resio posao ali sa tim stojim kao Marica sa krivim...

offline
  • Blood  Male
  • Ugledni građanin
  • Pridružio: 26 Jul 2003
  • Poruke: 384
  • Gde živiš: Beograd

ovo sam ja odavno pisao, mozda pomogne:
function xssClean($str)   {   $bad = array(       "(<|%3c|%253c)(.*?)script(.*?)(>|%3e|%0e)"      =>   "&lt;\\2script\\3&gt;",       "(<|%3c|%253c)\s*object(.*?)(>|%3e|%0e)"      =>   "&lt;object\\2&gt;",       "(<|%3c|%253c)\s*applet(.*?)(>|%3e|%0e)"      =>   "&lt;applet\\2&gt;",       "(<|%3c|%253c)\s*embed(.*?)(>|%3e|%0e)"         =>   "&lt;embed\\2&gt;",       "(<|%3c|%253c)\s*plaintext(.*?)(>|%3e|%0e)"      =>   "&lt;plaintext\\2&gt;",       "(<|%3c|%253c)\s*iframe(.*?)(>|%3e|%0e)"      =>   "&lt;iframe\\2&gt;",       "(<|%3c|%253c)\s*style(.*?)(>|%3e|%0e)"         =>   "&lt;style\\2&gt;",       "(<|%3c|%253c)form(.*?)(>|%3e|%0e)"            =>   "&lt;form\\2&gt;",       "(%3c|%253c)img%20(.+?)(%3e|%0e)"            =>   "&lt;img&nbsp;\\2&gt;",       "(%3c|%253c)font%20+(.+?)(%3e|%0e)"            =>   "&lt;font&nbsp;\\2&gt;",       "<(.*?)textarea(.*?)>"                     =>   "&lt;\\1textarea\\2&gt;",       "<!--"                                 =>   "&lt;!--",       "-->"                                 =>   "--&gt;",       "\\x00"                                 =>   "",       "%20"                                 =>   " ",       "%2527"                                 =>   "&apos;",   // '       "%27"                                 =>   "&apos;",   // '       "%22"                                 =>   "&quot;",   // "       "%5B"                                 =>   "&91;",      // [       "%5D"                                 =>   "&93;",      // ]       "%28"                                 =>   "(",    // (       "%29"                                 =>   ")",    // )       "%2528"                                 =>   "(",    // (       "%26"                                 =>   "&amp;",    // &       "%24"                                 =>   "$",    // $       "%3f"                                 =>   "?",    // ?       "%3b"                                 =>   ";",    // ;       "%3d"                                 =>   "=",    // =       "passthru(\s*)\("                        =>   "passthru\\1(",       "eval(\s*)\("                           =>   "eval\\1(",       "exec(\s*)\("                           =>   "exec\\1(",       "(system)(\s*)\("                        =>   "\\1\\2(",       "(fopen)(\s*)\("                        =>   "\\1\\2(",       "(fsockopen)(\s*)\("                     =>   "\\1\\2(",       "(file)(\s*)\("                           =>   "\\1\\2(",       "(file_get_contents)(\s*)\("               =>   "\\1\\2(",       "(readfile)(\s*)\("                        =>   "\\1\\2(",       "(unlink)(\s*)\("                        =>   "\\1\\2(",       "cmd(\s*)\("                           =>   "cmd\\1(",       "document\.cookie"                        =>  "document.cookie"   );   foreach ($bad as $key => $val)  {       $str = preg_replace("#".$key."#i", $val, $str);   }    return $str; }

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3747
  • Gde živiš: 127.0.0.1

@tnx Blood Smile u medjuvremenu sam detaljno citao php manual, i nekako napravio resenje...

ako neko ima slican problem, evo mog resenja Smile

function HtmlCheck($code) {    $FindTags  = array( '<strong>','</strong>','<em>','</em>','<ul>','</ul>','<ol>','</ol>','<li>','</li>','<p>','</p>','<blockquote>','</blockquote>','<br />','<?','<?php','?>','<','>','"');    $OSTags = array('[b]','[/b]','[i]','[/i]','[ul]','[/ul]','[ol]','[/ol]','[li]','[/li]','[p]','[/p]','[block]','[/block]','[br]','','','','<','>','"');        $code = preg_replace('/\<span style="text-decoration: underline;"\>(.+)\<\/span\>/Ui','[u]$1[/u]',$code);    $code = preg_replace('/\<p style="text-align: (.+);"\>(.+)\<\/p\>/Ui','[$1]$2[/$1]',$code);    $code = preg_replace('/\<li style="text-align: (.+);"\>(.+)\<\/li\>/Ui','[li="$1"]$2[/li]',$code);    $code = preg_replace('/\<p style="padding-left: (.+);"\>(.+)\<\/p\>/Ui','[padding="$1"]$2[/padding]',$code);    $code = preg_replace('/\<a href="(.+)" (.+)\>(.+)\<\/a\>/Ui','[url="$1"]$3[/url]',$code);    $code = preg_replace('/\<a href="(.+)">(.+)\<\/a\>/Ui','[url="$1"]$2[/url]',$code);        $code = str_replace($FindTags,$OSTags,$code);        $code = nl2br($code);    return $code; }

btw, znao sam da mora preko preg_replace Smile

Dopuna: 14 Mar 2008 1:21

Medjutim, ono sto mi je u medjuvremenu palo na pamet je: koliko je ovo sigurno od sql injectiona, imajuci u vidu da se nakon sto se iscita iz baze echo-uje na stranicu?

offline
  • Blood  Male
  • Ugledni građanin
  • Pridružio: 26 Jul 2003
  • Poruke: 384
  • Gde živiš: Beograd

sql injection neva veze sa iscitavanjem na stranicu, vec sa unosom samih podataka u bazu.

U svakom slucaju bi trebao da ocistis kod od sql injection-a pri unosu podataka u bazu. Funkcija koju sam ti gore postovao donekle cisti i od xss hack-a.

Ko je trenutno na forumu
 

Ukupno su 821 korisnika na forumu :: 4 registrovanih, 0 sakrivenih i 817 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: draggan, pein, Shilok, šumar bk2