[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: htmlspecialchars vs preg_replace
GET
Объясните минусы первого способа (за исключением, скорости может быть) если для странички не суть важно, что пришло b или <b> и еще и [] можно удалить

$a=preg_replace("#<|>|\[|\]#",'',$a);

и

$a=htmlspecialchars($a);




Спустя 1 час, 20 минут, 25 секунд (10.06.2012 - 15:32) vagrand написал(а):
Хех, а если я пишу формулу и мне нужны знаки больше и меньше или квадратные скобки нужны. ты что же их просто вырежешь?

Спустя 7 минут, 42 секунды (10.06.2012 - 15:40) GET написал(а):
vagrand

нет там формулы по умолчанию ненужны
Цитата
если для странички не суть важно


просто мне как-то кажется, что надежнее что ли...даже с strip_tags и то :

функция не модифицирует атрибуты тэгов, использование которых разрешено вами с помощью аргумента allowable_tags, включая атрибуты style и onmouseover, которые злоумышленник может применить для нехороших целей: отправляя текст, который будет показан другим пользователям

вот и думаю...preg_replace все вырезает остается место только для SQL инъекций, но в том месте их не сделаешь.

Спустя 7 минут, 46 секунд (10.06.2012 - 15:48) vagrand написал(а):
Ты не понял ту мысль, которую я хотел до тебя донести. Нельзя ничего вырезать из текста, т.к. ты не знаешь зачем оно там нужно. Это может быть совсем и не html тег, а ты возьмешь и вырежешь. Надо экранировать специальные символы, т.е. заменять их на спец коды.

Спустя 6 минут, 50 секунд (10.06.2012 - 15:55) GET написал(а):
vagrand

Да нет там описание...
Цитата
т.к. ты не знаешь зачем оно там нужно

точно знаю, что <>[] там быть не должно, а их ввод намеренная попытка вреда.

Спустя 2 минуты, 42 секунды (10.06.2012 - 15:57) vagrand написал(а):
Ну я тебе сказал как делать правильно а дальше ты уже сам думай

Спустя 12 минут, 25 секунд (10.06.2012 - 16:10) GET написал(а):
vagrand

Спасибо, конечно, но все равно не понял, почему нельзя если я точно знаю для чего нужен контент поля. Зачем мне вставлять в БД <b>fdf</b> (если предположить, что других проверок я не произвожу), когда я могу вставить bfdfb хотя бы место меньше занимает.

Спустя 2 минуты, 48 секунд (10.06.2012 - 16:13) neadekvat написал(а):
A.B.C., эти методы имеют различный результат на выходе. Причем для первого используются strip_tags.
А что касается инъекций - то для этого используется третья функция.
Плюс, есть правило, по которому нельзя изменять пользовательские данные при записи. Их нужно модифицировать (защищаться от взлома) при выводе.

Спустя 4 минуты, 21 секунда (10.06.2012 - 16:17) GET написал(а):
neadekvat
Но юзер будет видеть результат обработки перед записью БД.
Я не спорю, но...



Спасибо.

Спустя 2 минуты, 58 секунд (10.06.2012 - 16:20) Catalan написал(а):
Интересно, а что быстрее - htmlspecialchars или регексп?

Спустя 4 минуты, 3 секунды (10.06.2012 - 16:24) GET написал(а):
htmlspecialchars наверное...сейчас попробую потестю...выложу результаты smile.gif

Спустя 12 минут, 9 секунд (10.06.2012 - 16:36) GET написал(а):
$a=array('<b>sds[d]fs</b>','<p>sdsdfs</p>','<br>','<h1>dfsf</h1>','ef23[f22]33','ffweeff','34234242[4]','434433432');
$i=0;
do
{
$i++;
$b=rand(0,7);
$c=rand(0,7);
$d=rand(0,7);
$e=rand(0,7);
$str=$a[$b].$a[$c].$a[$d].$a[$e];
//$str2=htmlspecialchars($str);
//$str2=strip_tags($str);

$str2=preg_replace("#<|>|\[|\]#",'',$str);

}while($i<100001);


htmlspecialchars: 1.02 сек.
strip_tags: 0.92 сек.
preg_replace: 3.2 сек.

Вывод: htmlspecialchars быстрее на 310%. preg_replace, самый быстрый strip_tags

Спустя 6 минут, 22 секунды (10.06.2012 - 16:42) neadekvat написал(а):
Нашли же, что проверять.

Я еще раз повторяю, приведенный регэксп и htmlspecialchars имеют совершенно разное назначение и в любом случаи применяться должны при выводе из бд.

Спустя 3 минуты, 5 секунд (10.06.2012 - 16:45) GET написал(а):
neadekvat

Да, действительно...


_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Быстрый ответ:

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