file_xz
25.04.2016 - 06:35
Привет, хочу на свой форум добавить 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
25.04.2016 - 06:54
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
25.04.2016 - 08:36
Цитата (Игорь_Vasinsky @ 25.04.2016 - 05:54) |
а почему не хочешь оригинал текста хранить в БД с бб тегами? |
Меньше будет нагрузки на сервер (В массиве много bb кодов 200+) - лучше один раз их изменить и записать (а потом просто выводить), нежели постоянно когда пользователь просматривает страницу выводить данные из таблицы и заменять bb теги на html теги
Игорь_Vasinsky
25.04.2016 - 11:59
Цитата |
Меньше будет нагрузки на сервер (В массиве много 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
25.04.2016 - 12:10
Цитата (Игорь_Vasinsky @ 25.04.2016 - 10:59) |
так ты перед сохранением эту нагрузку все равно создаёшь)) |
Так эта же нагрузка будет произведена 1 раз после чего запишется текст в бд и просто будет выводиться.
А если просто записывать оригинальный текст в бд, а уже потом изменять то нагрузка будет не один раз, а N сколько раз - сколько раз пользователи перейдут по ссылке столько и будет обработок для каждого сообщения... или я что то не так понял?
killer8080
25.04.2016 - 14:26
Цитата (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);
Игорь_Vasinsky
Цитата |
а если будешь хранить оригинал - и вдруг решишь изменить правила |
Тогда все сообщения, оформленные по старым правилам поломаются.
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
casper - gg
25.04.2016 - 15:03
Цитата (file_xz @ 25.04.2016 - 12:10) |
Так эта же нагрузка будет произведена 1 раз после чего запишется текст в бд и просто будет выводиться. А если просто записывать оригинальный текст в бд, а уже потом изменять то нагрузка будет не один раз, а N сколько раз - сколько раз пользователи перейдут по ссылке столько и будет обработок для каждого сообщения... или я что то не так понял? |
на сколько нагрузка уменьшится? если это простой bb декодер (а если он еще и на js), то выгоды нет.
killer8080
25.04.2016 - 16:30
Цитата (casper - gg @ 25.04.2016 - 15:03) |
если это простой bb декодер (а если он еще и на js), то выгоды нет. |
на JS? А как же SEO?
Valick
25.04.2016 - 17:36
Цитата (file_xz ) |
то нагрузка будет не один раз, а N сколько раз - сколько раз пользователи перейдут по ссылке столько и будет обработок для каждого сообщения |
самое время погуглить про кеширование
ну и в конце концов никто вам не запрещает хранить и чистый текст и текст с бб-кодами в бд одновременно
_____________
Стимулятор ~yoomoney - 41001303250491
casper - gg
25.04.2016 - 17:37
Цитата (killer8080 @ 25.04.2016 - 16:30) |
на JS? А как же SEO? |
может ему не надо сео. хотя вряд ли. Вариант автора звучит логично. Сначала очистить от тегов (если есть), затем псевдоразметку заменить тегами и записать в базу. потом просто читать. Правда при записи сообщения расходы повышаются. Вроде логично, что читают чаще чем пишут. Можно сделать временный кеш, скажем на несколько секунд, и ничего с ресурсами не случится. Ресурсы это все таки, своего рода расходный материал, и без затраченных ресурсов не обойтись. А с кешем при записи все останется по прежнему, при выдаче потребление ниже.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.