Добавяне на HTML код от потребителите

uphero

Registered
Как да се подсигуря ако искам потребителите да могат да добавят свой HTML код примерно:
HTML:
<div>
	<div>{$info1}</div>
	<div>{$info2}</div>
	<div>{$info3}</div>
</div>
Същото и за цсс?
Идеята е, че кода ще се изпълнява при мен.
 
http://stackoverflow.com/questions/9250566/how-to-allow-certain-html-tags
Както пише отговориялият, strip_tags не е много добре за целта.
Затова разгледай този клас - HTML Purifier
http://htmlpurifier.org/
 
Ми не може да си сигурен, въпроса е докъто влезе в ДБ да не нарправи някоя беля. Използвай htmlspecialchars, htmlentities и други в комбинация и гледай да имат декодираща функция. Примерно:

PHP:
$txt = " Towa e samo <u>udebelen tekst</u> s <b>html</b>";
$str  = htmlspecialchars($txt); // Като вкарваш в Дб
$str_decoded = htmlspecialchars_decode($txt); // все едно идва от ДБ

echo "Кодирано: ". $str."<br/>";

echo "ДЕкодирано: ". $str_decoded."<br/>";

:?:
 
joTunkiq каза:
Ми не може да си сигурен, въпроса е докъто влезе в ДБ да не нарправи някоя беля. Използвай htmlspecialchars, htmlentities и други в комбинация и гледай да имат декодираща функция. Примерно:

PHP:
$txt = " Towa e samo <u>udebelen tekst</u> s <b>html</b>";
$str  = htmlspecialchars($txt); // Като вкарваш в Дб
$str_decoded = htmlspecialchars_decode($txt); // все едно идва от ДБ

echo "Кодирано: ". $str."<br/>";

echo "ДЕкодирано: ". $str_decoded."<br/>";

:?:
Не става дума за проблеми с кавички в БД-то... това ако използваш PDO и mysqli и prepared statements не е проблем.

Въпросът е, че трябва да си премахне script-таговете и всякакви нежелани атрибути по html елементите (като onmouseover="alert('hack!')")
Защото само с твоя код като си го изкара в админ панела и като му се изпълни някой лош(меко казано :D) javascript, голям праз, че в БД-то са ти ескейпнати символите. :):) Идеята е да се предпазим от тез и неща.
 
Ами html кода не се изпълнява при теб, но определено е лоша идея да разрешаваш подобно действие. Всъщност не става ясно какво точно искаш - визуализацията на html като сорс код или резултата от рендерирането му?
 
lamerko каза:
Ами html кода не се изпълнява при теб, но определено е лоша идея да разрешаваш подобно действие. Всъщност не става ясно какво точно искаш - визуализацията на html като сорс код или резултата от рендерирането му?
Според мен иска да разглежда какво са изпратили потребителите...
uphero каза:
Идеята е, че кода ще се изпълнява при мен.

Затова и предположих, че му трябва нещо, с което да отстрани всякакви възможни неприятности. Според документацията на HTML Purifier-a можеш да разрешиш определени тагове, да дадеш разрешените им атрибути и съответно разрешените им стойности. По този начин ще бъде невъзможно да вкараш javascript - нито чрез script-тага, нито чрез атрибути като onload="bad_js_function()".
 
Ако трябва да се рендерира нещо, а друго не - това си е голяма набутвация. Всъщност всички варианти са от лош по-лош... просто не виждам смисъл от това, потребители сами да си пишат html-a. Ако става въпрос за някакъв редактор като тези в wordpress - там се работи с псевдо тагове, които впоследствие се странслират до html. Като цяло е по-разумно да се вземе нещо готово, което се е наложило с коректната си работа...
 
lamerko каза:
Ако трябва да се рендерира нещо, а друго не - това си е голяма набутвация. Всъщност всички варианти са от лош по-лош... просто не виждам смисъл от това, потребители сами да си пишат html-a. Ако става въпрос за някакъв редактор като тези в wordpress - там се работи с псевдо тагове, които впоследствие се странслират до html. Като цяло е по-разумно да се вземе нещо готово, което се е наложило с коректната си работа...
ИДеята ми беше, че предоставям на потребителите информация от профилите им и да могат да си я подредят както те искат.
Примерно имам $user_name, $user_id, $user_total, $user_bad и искам всеки да може да добави в сайта си тази информация под формата на хтмл код. Нещо като лентичките с колите само, че с HTML който те ще си добавят.
Но като гледам май ще се спра на няколко вариянта и няма да им да се занимавам.
 
Навлизаш в интересна, но мътна материя. Това, персонализиране, което го има в amazon и ebay например се прави със специална темплейтна технология - xsl(t) - http://www.w3.org/Style/XSL/. Това е технологията, която може да откаже напълно човек от програмирането...

Най-общо как работи тази технология - данните ти са в типизиран xml формат, който се подава към xsl темплейт за трансформация. Резултата е html... така с едни и същи входни данни, но с различни xsl фалове, в реално време може да си сменяш целия потребителски интерфейс само с едно натискане на на бутон или с перонализирана настройка.
 
Не разбирам много от php , но ако съм на тебе ще пробвам да направя сигнатура динамична която да може да се редактира със bbcode.

[code
]$image = 'kartinkatanasignaturata.png';
$im = imagecreatefrompng($image);

$main_color = imagecolorallocate($im, 51, 102, 153);
$black = imagecolorallocate($im, 0, 0, 0);
$orange = imagecolorallocate($im, 255, 85, 0);
$blue = imagecolorallocate($im, 68, 102, 136);
$red = imagecolorallocate($im, 255, 0, 0);


$left_margin = 10;

imagestring($im, 3, $left_margin, 2, 'Ime/nick', $orange);
imagestring($im, 2, $left_margin, 18, 'userid...', $main_color);
imagestring($im, 2, $left_margin, 30, 'rank!', $blue);


header('Content-Disposition: filename='kartinkatanasignaturata.png');
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);

http://forums.sfep.org.uk/help/articles/forum_signature.php[/code]
 

Back
Горе