Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (4) 1 2 [3] 4  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Экранирование некоторых HTML тегов
Arh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2110
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 7 дней
Карма: 70




FatCat
Цитата
Чтобы чего нехорошего не натолкали...

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

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



--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2110
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 7 дней
Карма: 70




Например разрешено src и href, то onClick будет вырезан
Призываю бога регулярок)


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2110
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 7 дней
Карма: 70




Или просто регуляркой в тегах очищать от двоеточия и скобок, так ведь JS не пройдёт?
Точнее не очищать, а копировать атрибуты где нет двоеточий и скобок

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


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


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11788
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 15 дней
Карма: 429

Трезвый :
7 лет, 3 месяца, 15 дней


Цитата
function regex_check_image

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


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2110
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 7 дней
Карма: 70




Вот так вроде работает всё без 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 не юзали


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Winston  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 9509
Пользователь №: 18161
На форуме: 7 лет, 5 месяцев, 16 дней
Карма: 552




Цитата (FatCat @ 8.11.2014 - 13:51)
$txt = preg_replace( "#\[ img\](.+?)\[/img\]#ie", "\$this->regex_check_image('\\1')", $txt );

Модификатор e с версии 5.5 является deprecated, вместо его нужно preg_replace_callback() использовать



Спустя 2 минуты, 50 секунд Winston написал(а):
Цитата (Arh @ 8.11.2014 - 15:02)
ща подумаю как атрибуты включать только те что можно, чтоб допустим onclick не юзали

Можно например так сделать:
array('b','strong',...'a' => array('href', 'title'),'img' => array('src', 'alt'))
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2110
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 7 дней
Карма: 70




Winston
Цитата
Можно например так сделать:

Да как передать то ладно, как это регуляркой проверять.

Я сейчас с другим пока костыляю.
<code>
<
b>cod</b>
</
code>


Содержимое <code> тоже должно обработаться htmlspecialchars, даже если тег <b> разрешен

Приходиться сначала найти все теги <code> сделать в них htmlspecialchars
Потом обработать разрешенные теги
Потом обработать весь текст htmlspecialchars
Потом опять найти <code> и сделать там htmlspecialchars_decode



--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2110
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 7 дней
Карма: 70




В общем есть еще проблемы с атрибутами, если их больше одного, то не работает, понятно почему, но как исправить пока хз
class text {
#htmlspecialchars с исключениями
static function htmlspecialchars ($text = '',array $tags = array()) {

#htmlspecialchars внутри тега code
$code = isset($tags['code']) || array_search('code', $tags) !== false ? true : false;
if($code) {
$text = preg_replace_callback('|<code([ a-zA-Zа-яА-Я0-9.=_\-#;/"]*)>(.*?)<\/code>|usi',
create_function('$matches','return "<code".$matches[1].">".htmlspecialchars($matches[2])."</code>&a mp;a mp;a mp;q uot;;'),
$text
);
}

#Исключение тегов из обработки htmlspecialchars
foreach ($tags as $key => $tag) {
$name = is_array($tag) ? $key : $tag;
$rename = !empty($tag['tag']) ? $tag['tag'] : $name;
$attr = !empty($tag['attr']) ? '(\s['.implode ('|',$tag['attr']).'].[a-zA-Zа-яА-Я0-9._=?:&\-#/;"]*|\s[/]*|[/]*)' : '(\s[/]*|[/]*)';
if(isset($tag['single'])) {
$search1[] = '!<'.$name.$attr.'>!ui';
$replace1[] = '◄'.$rename.'$1►';
$search2[] = '!◄'.$rename.$attr.'►!ui';
$replace2[] = '<'.$rename.'$1>';
} else {
$search1[] = '!<'.$name.$attr.'>(.*?)</'.$name.'>!sui';
$replace1[] = '◄'.$rename.'$1►$2◄/'.$rename.'►';
$search2[] = '!◄'.$rename.$attr.'►(.*?)◄/'.$rename.'►!sui';
$replace2[] = '<'.$rename.'$1>$2</'.$rename.'>';
}
}


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

#htmlspecialchars_decode внутри тега code
if($code) {
$text = preg_replace_callback('|<code([ a-zA-Zа-яА-Я0-9.=_\-#;/"]*)>(.*?)<\/code>|usi',
create_function('$matches','return "<code".$matches[1].">".htmlspecialchars_decode($matches[2])."</cod e>";'),
$text
);
}
return $text;
}
}



$text = '
<b id="sd">Жирный</b>
<br>
<hr>
<code>
<b>какойто код</b>
</code>
<img src="/">
<br/>
<a href="/?start&get=go">Ссылка</a>
<br />
<a href="/" title="название">два атрибута не работают</a>
'
;
$config = array(
'code',
'b'=>array(
'tag' => 'strong',
'attr'=>array('class','id')
),

'br'=>array('single'=>true),
'hr'=>array(
'single'=>true,
'attr'=>array('class')
),

'a'=>array(
'attr'=>array('href','title')
),

'img'=>array(
'single' => true,
'attr'=>array('src')
)
);

echo text::htmlspecialchars($text,$config);


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2110
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 7 дней
Карма: 70




Хм, а можно ли как то навредить, передать в ссылке картинки какию нибудь хрень?
Если да, то все ссылки на картинки надо обрабатывать, сохранять картинки к себе на сервер через GD и отдавать картинку уже с сервера? Хотя на форуме прямые ссылки на картинки huh.gif


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
FatCat  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чеширский кот
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 5911
Пользователь №: 1
На форуме: 10 лет, 10 месяцев, 2 дня
Карма: 125

Не пью :
22 года, 3 месяца, 2 дня


Цитата (Arh @ 8.11.2014 - 22:24)
можно ли как то навредить, передать в ссылке картинки какию нибудь хрень?

Внедрить джаваскрипт, ворующий куки.


--------------------
Бесплатному сыру в дырки не заглядывают...
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2110
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 7 дней
Карма: 70




FatCat
А на форуме если я такую ссылку сделаю, тоже стяну куки?)


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
FatCat  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чеширский кот
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 5911
Пользователь №: 1
На форуме: 10 лет, 10 месяцев, 2 дня
Карма: 125

Не пью :
22 года, 3 месяца, 2 дня


Цитата (Arh @ 9.11.2014 - 00:01)
тоже стяну куки?

У нас не получится вставить скрипт. Я приводил код проверки.


--------------------
Бесплатному сыру в дырки не заглядывают...
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2110
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 7 дней
Карма: 70




FatCat
У меня вроде тоже не получается, так как в регулярке нет скобок [a-zA-Zа-яА-Я0-9._=?:&\-#/;], я имел ввиду скрипт, который находиться в картинке на удалённом сервере, возможно ли такое?


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
FatCat  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чеширский кот
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 5911
Пользователь №: 1
На форуме: 10 лет, 10 месяцев, 2 дня
Карма: 125

Не пью :
22 года, 3 месяца, 2 дня


Цитата (Arh @ 10.11.2014 - 00:19)
скрипт, который находиться в картинке

Куки не утянет.


--------------------
Бесплатному сыру в дырки не заглядывают...
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2110
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 7 дней
Карма: 70




Цитата (FatCat @ 10.11.2014 - 21:39)
Цитата (Arh @ 10.11.2014 - 00:19)
скрипт, который находиться в картинке

Куки не утянет.

Ну и славно) Осталось разобраться с атрибутами и в принципе метод готов.


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (4) 1 2 [3] 4  Ответ в темуСоздание новой темыСоздание опроса