Помогите плиз с безопасностью

noidex

Новичок
Всем доброго времени суток, помогите зеленому программисту разобраться с безопасностью, не совсем понимаю, как сделать правильно вывод.

Есть функция, которая обрабатывает входящие данные из формы WYSIWYG:

function htmlclean ($var) {
$var = trim($var);
$var = strip_tags($var, '<h1><h2><h3><h4><h5><h6><span><sup><sub><span><span><em><strong><br><p><b><img><blockquote><ul><li><a>');
if(get_magic_quotes_gpc()) $var=stripslashes($var);
if(!is_numeric($var)) $var=mysql_real_escape_string($var);
return $var;
}

Если данные были составлены с помощью WYSIWYG редактора и отправлены в БД все выводится отлично, но вот если добавить произвольный набор символов (например: текст" style="width:1000%;"> </div>), то при дальнейшем выводе получаю полную разруху в html коде. Так вот, как можно избежать таких проблем и при этом сохранить возможность хранения html?

И еще вопрос достаточно ли этой функции для защиты от инъекций и XSS, ("INSERT ...") экранирую кавычками '".$var."'?
 

Beavis

Banned
function htmlclean ($var) {
$var = trim($var);
$var = strip_tags($var, '<h1><h2><h3><h4><h5><h6><span><sup><sub><span><span><em><strong><br><p><b><img><blockquote><ul><li><a>');
if(get_magic_quotes_gpc()) $var=stripslashes($var);
if(!is_numeric($var)) $var=mysql_real_escape_string($var);
return $var;
}
mysql_real_escape_string вообще никак не относится к XSS. Эта строка здесь явно лишняя.

но вот если добавить произвольный набор символов (например: текст" style="width:1000%;"> </div>), то при дальнейшем выводе получаю полную разруху в html коде
А ты что ожидаешь? Вроде же всё логично. Ввели бред - получили бред. WYSIWYG.
 

Вурдалак

Продвинутый новичок
PHP:
function htmlclean($var)
{
	$levelOfSecurity = 1000; // according to GOST 2.2.42
	
	$var = trim($var);
	
	for($i = 0; $i < $levelOfSecurity; $i++)
		$var = addslashes(stripslashes($var));	
	
	for($i = 0; $i < $levelOfSecurity; $i++)
		$var = mysql_real_escape_string($var);		
	
	for($i = 0; $i < $levelOfSecurity; $i++)
		$var = htmlentities($var, ENT_COMPAT, 'UTF-8');
	
	// make sure that our value is really clean
	for($i = 0; $i <= 0xFF; $i++)
		$var = str_replace(chr($i), '', $var);
	
	return $var;
}
Вот переработанная версия с учётом всех современных тенденций в области информационной безопасности в сети Интернет. С тех пор, как я стал её использовать, у меня улучшился аппетит и самочувствие, глаза перестали уставать и сплю лучше. Говорят, побеждает рак и устраняет запоры.
 

Beavis

Banned
PHP:
function htmlclean($var) 
{
   $security_functions = get_defined_functions();
   foreach ($security_functions as $function) {
      $var = $function($var);
   }
   return $var;
}
 

noidex

Новичок
А ты что ожидаешь? Вроде же всё логично. Ввели бред - получили бред. WYSIWYG.
Тупанул немного, правильно будет админу и модератору дать возможность добавления html через WYSIWYG, а всех остальных гнать через ББ. Пойду таким путем. ))
Спасибо всем за советы!
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
noidex
Если тебе так важно дать возможность пользователю оформлять код, то используй BB коды, а не WYSIWYG
 
Сверху