Poslao: 13 Mar 2008 00:29
|
offline
- Rastafarii
- Moderator foruma
- Pridružio: 22 Mar 2006
- Poruke: 3760
- Gde živiš: 127.0.0.1
|
Evo ovako, pravim (i dalje) aplikaciju, i neophodan mi je WYSIWYG editor, odlucio sam se za tinyMCE 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.
|
|
Poslao: 13 Mar 2008 00:55
|
offline
- igor86
- 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 < i > Zatim radis repace cega hoces
$FindTags = array( '<strong>','</strong>', ...);
$HtmlTags = array( '<strong&>','</strong>', ...);
str_replace( $FindTags, $HtmlTags, $Text);
Nije bas najsretnije rjesenje, ali radi posao i to dosta brzo.
|
|
|
|
Poslao: 13 Mar 2008 01:12
|
offline
- Rastafarii
- Moderator foruma
- Pridružio: 22 Mar 2006
- Poruke: 3760
- Gde živiš: 127.0.0.1
|
Dobro, nesto tako sam i ja razmisljao, ali je moj kod "malcice" duzi... jbg sta je iskustvo
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...
|
|
|
|
Poslao: 13 Mar 2008 14:45
|
offline
- Blood
- 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)" => "<\\2script\\3>",
"(<|%3c|%253c)\s*object(.*?)(>|%3e|%0e)" => "<object\\2>",
"(<|%3c|%253c)\s*applet(.*?)(>|%3e|%0e)" => "<applet\\2>",
"(<|%3c|%253c)\s*embed(.*?)(>|%3e|%0e)" => "<embed\\2>",
"(<|%3c|%253c)\s*plaintext(.*?)(>|%3e|%0e)" => "<plaintext\\2>",
"(<|%3c|%253c)\s*iframe(.*?)(>|%3e|%0e)" => "<iframe\\2>",
"(<|%3c|%253c)\s*style(.*?)(>|%3e|%0e)" => "<style\\2>",
"(<|%3c|%253c)form(.*?)(>|%3e|%0e)" => "<form\\2>",
"(%3c|%253c)img%20(.+?)(%3e|%0e)" => "<img \\2>",
"(%3c|%253c)font%20+(.+?)(%3e|%0e)" => "<font \\2>",
"<(.*?)textarea(.*?)>" => "<\\1textarea\\2>",
"<!--" => "<!--",
"-->" => "-->",
"\\x00" => "",
"%20" => " ",
"%2527" => "'", // '
"%27" => "'", // '
"%22" => """, // "
"%5B" => "&91;", // [
"%5D" => "&93;", // ]
"%28" => "(", // (
"%29" => ")", // )
"%2528" => "(", // (
"%26" => "&", // &
"%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;
}
|
|
|
|
Poslao: 14 Mar 2008 01:21
|
offline
- Rastafarii
- Moderator foruma
- Pridružio: 22 Mar 2006
- Poruke: 3760
- Gde živiš: 127.0.0.1
|
@tnx Blood u medjuvremenu sam detaljno citao php manual, i nekako napravio resenje...
ako neko ima slican problem, evo mog resenja
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
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?
|
|
|
|
Poslao: 15 Mar 2008 17:33
|
offline
- Blood
- 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.
|
|
|
|