Покинул форум
Сообщений всего: 542
Дата рег-ции: Май 2011
Помог: 0 раз(а)
Привет.
Такой вопрос, поставил на самописный сайт визуальный редактор - CKEditor.
Такой вопрос, в базу он записывает html, туда записываю через htmlspecialchars. А как правильно выводить из базы? А то переживаю что какой-то пользователь введет туда javscript. Что подскажите?
Serhio
Отправлено: 30 Января, 2015 - 15:08:37
Частый гость
Покинул форум
Сообщений всего: 194
Дата рег-ции: Март 2012
Помог: 1 раз(а)
event пишет:
Привет.
Такой вопрос, поставил на самописный сайт визуальный редактор - CKEditor.
Такой вопрос, в базу он записывает html, туда записываю через htmlspecialchars. А как правильно выводить из базы? А то переживаю что какой-то пользователь введет туда javscript. Что подскажите?
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008 Откуда: из города
Помог: 90 раз(а)
GoDr пишет:
в CKEditor есть настройки
CKEditor работает на клиенте. Пользователь всегда может выключить его и ввести произвольный html код.
GoDr
Отправлено: 30 Января, 2015 - 15:32:04
Посетитель
Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015 Откуда: Тамбов
Помог: 17 раз(а)
Ch_chov пишет:
CKEditor работает на клиенте. Пользователь всегда может выключить его и ввести произвольный html код.
Тогда вообще причём тут CKEditor? Пришли данные с сервера (пофиг как они там формировались) и приводи текст в порядок: удаляй не нужные теги, пробелы, символы.. Тем более если данные в базу записаны "безопасно", то какая может быть беда при их выводе и отправке клиенту?
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
Помог: 127 раз(а)
GoDr
Пользователь Ch_chov указал лишь на то, что даная опция толком ничего и не даст для безопасности. А вот на счет серверной стороны ссилка в моем посте више
DelphinPRO
Отправлено: 30 Января, 2015 - 16:14:24
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
GoDr пишет:
Тем более если данные в базу записаны "безопасно", то какая может быть беда при их выводе и отправке клиенту?
В базу можно совершенно "безопасно" записать некий javascript код, пришедший от клиента, а потом вывести на страницу, где он уже не будет таким безопасным.
event, действуем по-принципу "запрещено все, кроме разрешенного". Приходящие данные перед записью в базу немного почистим - скармливаем функции strip_tags, передавая вторым параметром разрешенные теги.
----- Чем больше узнаю, тем больше я не знаю.
GoDr
Отправлено: 30 Января, 2015 - 17:26:13
Посетитель
Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015 Откуда: Тамбов
Помог: 17 раз(а)
DelphinPRO пишет:
В базу можно совершенно "безопасно" записать некий javascript код, пришедший от клиента, а потом вывести на страницу, где он уже не будет таким безопасным.
что-то как-то натянуто за уши Зачем изначально записывать в базу код,который при выводе будет опасным? Я что-то даже не могу представить такую ситуацию. Обычно фильтруют данный при входе и записи, но не при получении и передачи
Ну а с другой стороны, htmlspecialchars() превращает всё в сущности. И если вытащить это из базы и вывести на экран, то любой скрипт просто напечатается на экране, а не выполнится.
и будет вместо
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
GoDr пишет:
Зачем изначально записывать в базу код,который при выводе будет опасным?
Потому что при выводе куда?
Для HTML своё преобразование, для JSON - другое, для CSV - третье. А можно и вовсе plain/text. Последним трём спецсущности HTML нафиг не нужны.
----- PostgreSQL DBA
GoDr
Отправлено: 30 Января, 2015 - 18:02:27
Посетитель
Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015 Откуда: Тамбов
Помог: 17 раз(а)
Мелкий, согласен
А ещё согласен что мы 1+1 решаем через интегралы
Тогда задача не совсем грамотно поставлена. Особенно
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008 Откуда: из города
Помог: 90 раз(а)
В общем случае фильтрация содержимого это не просто удаление опасных тегов. В зависимости от контекста могут быть и другие задачи. На примере, этого форума:
BB код -> HTML код
Текстовая ссылка -> Гиперссылка
Текстовые смайлы -> Графические смайлы
На других сайтах могут быть другие фильтры.
Если эти преобразования выполнять при вводе, то впоследствие уже не будет возможности редактировать соощения. Потому что BB код уже преобразован в HTML. Можете рассматривать это как исходный текст (то что в базе хранится) и скомпилированный текст (то что в браузер выносится). Соответственно если вы скомпилируте текст сразу при вводе, у вас не будет возможности полноценно его редактировать.
Обратная сторона такого подхода, это необходимость обрабатывать текст каждый раз при выводе в браузер. Обычно кэширование решает эту проблему. (Добавление) http://stackoverflow[dot]com/questio[dot][dot][dot]-input-vs-output
GoDr
Отправлено: 30 Января, 2015 - 19:18:06
Посетитель
Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015 Откуда: Тамбов
Помог: 17 раз(а)
Ch_chov пишет:
Обратная сторона такого подхода, это необходимость обрабатывать текст каждый раз при выводе в браузер. Обычно кэширование решает эту проблему.
ты привёл очень специфичный пример, хотя он имеет место быть.. Что касается кеширования.. так кеширование поможет всегда
А с другой стороны, если я создаю форум, то я не планирую потом из него сделать блог. У форума есть свои правила, тот же BB-код. Даже если первоначальный контент испорчен, то в любом случае из него можно сделать "конфетку". Нет же проблем [ b ] превратить в < b >
Есть конечно один вариант.. собирать контент как он есть, а потом думать что с ним делать
В общем ответов на этот вопрос в избытке.. даже философии много
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.