[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: htmlspecialchars вывод текста из базы
file_xz
Привет, хочу на свой форум добавить bb коды.


$_POST['text']='Здесь текст пользователя';

$bbcode=array('[b]' => '<b>','[i]' => '<i>','[u]' => '<u>','[s]' => '<s>');//Массив с кодами большой - я несколько значений сюда ввел, просто показать.


$text=htmlspecialchars($_POST['text'], null, "windows-1251");

foreach($bbcode as $v => $v2){
$text=str_replace($v, $v2, $text);
}

$text=mysql_real_escape_string($text);

mysql_query("INSERT `forum` SET `name`='{$_SESSION['name']}', `idus`='{$_SESSION['id']}', `words`='$text'");



Потом я могу просто из базы доставать сообщение и выводить всем пользователям? - не каких XSS уязвимостей не может быть?

Просто ранее у меня не было bb кодов на сайте, текст пользователя просто экранировался mysql_real_escape_string до добавления в таблицу, а уже потом выводился из таблицы (+ обрабатывался htmlspecialchars) и показывался пользователю.

Сейчас же я хочу до INSERT обработать текст пользователя htmlspecialchars , далее изменить в тексте bb коды на html теги и в дальнейшем просто выводить их пользователям сайта SELECT , без еще одной обработки htmlspecialchars.

Возможна ли какая-та уязвимость XSS? В массиве $bbcode только замена цвета и изменение текста (Жирный, Курсив и так далее).
BB коды для добавления ссылок, IMG и так далее нет, просто обычная замена текста str_replace - который присутствует в массиве.
Игорь_Vasinsky
1) а почему не хочешь оригинал текста хранить в БД с бб тегами?
2)
Цитата
не каких XSS уязвимостей не может быть?


нет, у тебя же ограниченный набор данных для замены, остальное будет экранироваться real_escape_string

для картинок - не разрешай динамические урл, проверяй - что там картинка по данному адресу.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
file_xz
Цитата (Игорь_Vasinsky @ 25.04.2016 - 05:54)
а почему не хочешь оригинал текста хранить в БД с бб тегами?

Меньше будет нагрузки на сервер (В массиве много bb кодов 200+) - лучше один раз их изменить и записать (а потом просто выводить), нежели постоянно когда пользователь просматривает страницу выводить данные из таблицы и заменять bb теги на html теги
Игорь_Vasinsky
Цитата
Меньше будет нагрузки на сервер (В массиве много bb кодов 200+)


так ты перед сохранением эту нагрузку все равно создаёшь))

а если будешь хранить оригинал - и вдруг решишь изменить правила - то новые правила будут применены ко всему контенту, а не только для нового.

1 апреля - все цитаты перевернуть вверх тормашками )

ну это к примеру.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
file_xz
Цитата (Игорь_Vasinsky @ 25.04.2016 - 10:59)
так ты перед сохранением эту нагрузку все равно создаёшь))

Так эта же нагрузка будет произведена 1 раз после чего запишется текст в бд и просто будет выводиться.
А если просто записывать оригинальный текст в бд, а уже потом изменять то нагрузка будет не один раз, а N сколько раз - сколько раз пользователи перейдут по ссылке столько и будет обработок для каждого сообщения... или я что то не так понял?
killer8080
Цитата (file_xz @ 25.04.2016 - 06:35)
не каких XSS уязвимостей не может быть?

в таком виде - нет

вместо
Цитата (file_xz @ 25.04.2016 - 06:35)
foreach($bbcode as $v => $v2){
$text=str_replace($v, $v2, $text);
}

нужно просто
$text = strtr($text, $bbcode);
Arh
Игорь_Vasinsky
Цитата
а если будешь хранить оригинал - и вдруг решишь изменить правила

Тогда все сообщения, оформленные по старым правилам поломаются.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
casper - gg
Цитата (file_xz @ 25.04.2016 - 12:10)
Так эта же нагрузка будет произведена 1 раз после чего запишется текст в бд и просто будет выводиться.
А если просто записывать оригинальный текст в бд, а уже потом изменять то нагрузка будет не один раз, а N сколько раз - сколько раз пользователи перейдут по ссылке столько и будет обработок для каждого сообщения... или я что то не так понял?


на сколько нагрузка уменьшится? если это простой bb декодер (а если он еще и на js), то выгоды нет.
killer8080
Цитата (casper - gg @ 25.04.2016 - 15:03)
если это простой bb декодер (а если он еще и на js), то выгоды нет.

на JS? А как же SEO?
Valick
Цитата (file_xz )
то нагрузка будет не один раз, а N сколько раз - сколько раз пользователи перейдут по ссылке столько и будет обработок для каждого сообщения

самое время погуглить про кеширование

ну и в конце концов никто вам не запрещает хранить и чистый текст и текст с бб-кодами в бд одновременно

_____________
Стимулятор ~yoomoney - 41001303250491
casper - gg
Цитата (killer8080 @ 25.04.2016 - 16:30)
на JS? А как же SEO?

может ему не надо сео. хотя вряд ли. Вариант автора звучит логично. Сначала очистить от тегов (если есть), затем псевдоразметку заменить тегами и записать в базу. потом просто читать. Правда при записи сообщения расходы повышаются. Вроде логично, что читают чаще чем пишут. Можно сделать временный кеш, скажем на несколько секунд, и ничего с ресурсами не случится. Ресурсы это все таки, своего рода расходный материал, и без затраченных ресурсов не обойтись. А с кешем при записи все останется по прежнему, при выдаче потребление ниже.
Быстрый ответ:

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