[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Экранирование некоторых HTML тегов
Страницы: 1, 2, 3, 4
Arh
FatCat
Цитата
Чтобы чего нехорошего не натолкали...

Да тут не только картинки, в принципе можно и тег <b javascript>жирный</b> прописать javascript, если сохранять все атрибуты (.*?)
Хотя наверное как то можно чистить от таких гадостей, но это следующий этап, так как регулярка и без этого кривая)

По хорошему, можно еще передавать список разрешенных атрибутов и список неразрешенных слов типа javascript, но тот надо разобраться что вообще нехорошего можно натолкать в теги.



_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Arh
Например разрешено src и href, то onClick будет вырезан
Призываю бога регулярок)

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Arh
Или просто регуляркой в тегах очищать от двоеточия и скобок, так ведь JS не пройдёт?
Точнее не очищать, а копировать атрибуты где нет двоеточий и скобок

$search1[]  = '|<(.*?)'.$tag.'(.*?)>|';
$replace1[] = '◄$1'.$tag.'$2►';


То есть вместо (.*?), должно быть что то нормальное. Там может быть (#"=_-.;/буквы,цифры и пробелы)

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Invis1ble
Цитата
function regex_check_image

если больше ничего не применяется для фильтрации, то эта функция уязвима smile.gif и даже при предварительной обработке htmlspecialchars($string) её можно обойти smile.gif
Но прямо тут не получается, значит что-то еще фильтрует/преобразовывает

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Arh
Вот так вроде работает всё без js

    #htmlspecialchars с исключениями
static function htmlspecialchars ($text = '',$tags = array('b','strong','code','div','ul','li','i','u','s','br','a','img','h1','h2','h3','h4','h5','h6'),$attr = true) {
$search = array();
$replace = array();
#С обработкой атрибутов
if($attr) {
foreach ($tags as $key => $tag) {
$search1[] = '|<([/]*)'.$tag.'([ a-zA-Zа-яА-Я0-9.=_\-#;/"]*)>|ui';
$replace1[] = '◄$1'.$tag.'$2►';
$search2[] = '|◄([/]*)'.$tag.'([ a-zA-Zа-яА-Я0-9.=_\-#;/"]*)►|ui';
$replace2[] = '<$1'.$tag.'$2>';
}
#Исключение атрибутов
} else {

}

return preg_replace($search2, $replace2, htmlspecialchars(
preg_replace($search1, $replace1, $text)
,
ENT_NOQUOTES
));
}

$text = '
<code class="php" onclick="javascript">
<b>cod</b>
</code>
<img src="javascript:"/>
<a href="/" title="ссылка"><i>ссылка</i></a>'
;
echo text::htmlspecialchars($text,array('code','b','a','img','i'));


ща подумаю как атрибуты включать только те что можно, чтоб допустим onclick не юзали

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.