Spear
почемучка
Обезопасить админку
Здравствуйте, у меня такой (скорее более теоритический) вопрос:
нужно открыть доступ в админку (к некоторым её частям) пользовтаелям, с правами модератора. (будут пистаь новости, например)
Мне нужно обезопасить ввод данных по максимуму.
Насколько я понимаю - единственное что может случиться это XSS атака.
Будет ли достаточно следующих действий:
сначала делаем strip_tags вводимого текста (так как юзанье хтмла напрямую нужно запретить),
а посте использование такого кода для преобразования BB тегов (в частности хотел бы узнать у профи - насколько нижеприведенный код безопасен. Может быть есть более удачные опен-сорц коды?):
Защитит ли этот код от вставки сниффера того же античата? (вызываемого как картинку..)
Здравствуйте, у меня такой (скорее более теоритический) вопрос:
нужно открыть доступ в админку (к некоторым её частям) пользовтаелям, с правами модератора. (будут пистаь новости, например)
Мне нужно обезопасить ввод данных по максимуму.
Насколько я понимаю - единственное что может случиться это XSS атака.
Будет ли достаточно следующих действий:
сначала делаем strip_tags вводимого текста (так как юзанье хтмла напрямую нужно запретить),
а посте использование такого кода для преобразования BB тегов (в частности хотел бы узнать у профи - насколько нижеприведенный код безопасен. Может быть есть более удачные опен-сорц коды?):
PHP:
/*
Функция форматирования BB-тегов
*/
function BB($in){
//вырезамем строку непробельных символов, чья длинна более 200 символов
$in = preg_replace("#(\w{200,})#", '<span class="context">Вырезано роботом</span>',$in);
// текстовое форматирование
$in = preg_replace("#\\[B\\](.+?)\\[/B\\]#ims", "<strong>$1</strong>", $in);
$in = preg_replace("#\\[S\\](.+?)\\[/S\\]#ims", "<small>$1</small>", $in);
$in = preg_replace("#\\[HR\\]#ims", "<hr class=\"hr\" />", $in);
$in = preg_replace("#-{3,}#", "<hr class=\"hr\" />", $in);
$in = preg_replace("#\\[I\\](.+?)\\[/I\\]#ims", "<em>$1</em>", $in);
$in = preg_replace("#\\[U\\](.+?)\\[/U\\]#ims", "<span class=\"underline\">$1</span>", $in);
$in = preg_replace("#\\[K\\](.+?)\\[/K\\]#ims", "<span class=\"context\">$1</span>", $in);
$in = preg_replace("#\\[C\\](.+?)\\[/C\\]#ims", "</p><blockquote class=\"cite\"><em>$1</em></blockquote><p>", $in);
// замена URL с якорем ( [URL=path]anhor[/URL*] )
$in = preg_replace(
"#\\[URL=(.+?)\\](.+?)\\[/URL\\]#ixsm",
"<a href=\"$1\">$2</a>", $in);
// замена простых URL ( [URL]path[/URL*] )
$in = preg_replace(
"#\\[URL\\](.+?)\\[/URL\\]#ixsm",
"<a href=\"$1\">$1</a>", $in);
// тире
$in = str_replace("--", "—", $in);
// замена EMAIL с якорем ( [EMAIL=email_adress]anhor[/EMAIL*] )
$in = preg_replace(
"#\\[EMAIL=(.+?)\\](.+?)\\[/EMAIL\\]#ixsm",
"<a href=\"mailto:$1\">$2</a>", $in);
// замена простых EMAIL ( [EMAIL]email_adress[/EMAIL*] )
$in = preg_replace(
"#\\[EMAIL\\](.+?)\\[/EMAIL\\]#ixsm",
"<a href=\"mailto:$1\">$1</a>", $in);
//--------------------------------------------------------------------
// Замена тегов изображений с align-аттрибутами
// Если найдено выражение вида [IMG SRC=path/to/image.gif RIGHT]
// то оно заменяется на тег img, с соответствующим float и уникальным id с префиксом uniqImg_
// если атрибут float не указан, то по умолчанию используется LEFT
//--------------------------------------------------------------------
if(preg_match_all("#\\[IMG SRC=http://([^\s<>]+?)(?: (LEFT|RIGHT))?\\]#im", $in, $matches)){
for($i=0; $i<count($matches[1]); $i++){
if(empty($matches[2][$i])) $matches[2][$i] = "left";
$float = strtolower($matches[2][$i]);
$path = htmlspecialchars($matches[1][$i], ENT_QUOTES);
$in = str_replace($matches[0][$i], '<a href="http://'.$path.'"><img style="float:'.$float.'" class="uniqImg" src="http://'.$path.'" alt="Изображение находится по адресу '.$path.'" id="'.uniqid("uniqImg_").'" /></a>', $in);
}
}
//--------------------------------------------------------------------
// Замена простых тегов изображений ( [IMG]path_to_image[/IMG ] )
//--------------------------------------------------------------------
if(preg_match_all("#\\[IMG\\](.+?)\\[/IMG\\]#ixm", $in, $matches)){
for($i=0; $i<count($matches[1]); $i++){
$path = htmlspecialchars($matches[1][$i], ENT_QUOTES);
$in = str_replace($matches[0][$i], '</p><div style="clear:both"><a href="'.$path.'"><img class="uniqImg" src="'.$path.'" alt="Изображение находится по адресу '.$path.'" id="'.uniqid("uniqImg_").'" /></a></div><p>', $in);
}
}
return $in;
}// end BB
