Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вопрос

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
event
Отправлено: 30 Января, 2015 - 14:46:22
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 542
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Привет.
Такой вопрос, поставил на самописный сайт визуальный редактор - CKEditor.

Такой вопрос, в базу он записывает html, туда записываю через htmlspecialchars. А как правильно выводить из базы? А то переживаю что какой-то пользователь введет туда javscript. Что подскажите?
 
 Top
Serhio
Отправлено: 30 Января, 2015 - 15:08:37
Post Id



Частый гость


Покинул форум
Сообщений всего: 194
Дата рег-ции: Март 2012  


Помог: 1 раз(а)




event пишет:
Привет.
Такой вопрос, поставил на самописный сайт визуальный редактор - CKEditor.

Такой вопрос, в базу он записывает html, туда записываю через htmlspecialchars. А как правильно выводить из базы? А то переживаю что какой-то пользователь введет туда javscript. Что подскажите?


Я так делаю:



потом записываешь.

Когда обратно выгружаешь, делаешь через обратную:

PHP:
скопировать код в буфер обмена
  1. function reverse_escape($str)
  2.                                                 {
  3.                                                         $search=array("\\\\","\\0","\\n","\\r","\Z","\'",'\"');
  4.                                                         $replace=array("\\","\0","\n","\r","\x1a","'",'"');
  5.                                                         return str_replace($search,$replace,$str);
  6.                                                 }



хотя лучше спросить экспертов, не думаю, что это защитит от инъекций...

(Отредактировано автором: 30 Января, 2015 - 15:14:39)

 
 Top
GoDr
Отправлено: 30 Января, 2015 - 15:17:23
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


Помог: 17 раз(а)




в CKEditor есть настройки (если нет, то сделай)

вырезает всё
config.allowedContent = true;
и вырезаем по регулярке. в данном примере script
config.protectedSource.push( /<script[\s\S]*?script>/g );

(Отредактировано автором: 30 Января, 2015 - 15:18:01)



-----
Система управления веб-содержимым Lotos CMS
 
 Top
esterio
Отправлено: 30 Января, 2015 - 15:17:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




http://htmlpurifier[dot]org/
И уж если собрались использовать визуальные редакторы то незачем пользоваться функцией htmlspecialchars
 
 Top
Ch_chov
Отправлено: 30 Января, 2015 - 15:24:33
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




GoDr пишет:
в CKEditor есть настройки

CKEditor работает на клиенте. Пользователь всегда может выключить его и ввести произвольный html код.
 
 Top
GoDr
Отправлено: 30 Января, 2015 - 15:32:04
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


Помог: 17 раз(а)




Ch_chov пишет:
CKEditor работает на клиенте. Пользователь всегда может выключить его и ввести произвольный html код.
Тогда вообще причём тут CKEditor? Пришли данные с сервера (пофиг как они там формировались) и приводи текст в порядок: удаляй не нужные теги, пробелы, символы.. Тем более если данные в базу записаны "безопасно", то какая может быть беда при их выводе и отправке клиенту? Закатив глазки


-----
Система управления веб-содержимым Lotos CMS
 
 Top
esterio
Отправлено: 30 Января, 2015 - 15:37:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




GoDr
Пользователь Ch_chov указал лишь на то, что даная опция толком ничего и не даст для безопасности. А вот на счет серверной стороны ссилка в моем посте више
 
 Top
DelphinPRO
Отправлено: 30 Января, 2015 - 16:14:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




GoDr пишет:
Тем более если данные в базу записаны "безопасно", то какая может быть беда при их выводе и отправке клиенту?

В базу можно совершенно "безопасно" записать некий javascript код, пришедший от клиента, а потом вывести на страницу, где он уже не будет таким безопасным.

event, действуем по-принципу "запрещено все, кроме разрешенного". Приходящие данные перед записью в базу немного почистим - скармливаем функции strip_tags, передавая вторым параметром разрешенные теги.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
GoDr
Отправлено: 30 Января, 2015 - 17:26:13
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


Помог: 17 раз(а)




DelphinPRO пишет:
В базу можно совершенно "безопасно" записать некий javascript код, пришедший от клиента, а потом вывести на страницу, где он уже не будет таким безопасным.
что-то как-то натянуто за уши Радость Зачем изначально записывать в базу код,который при выводе будет опасным? Я что-то даже не могу представить такую ситуацию. Обычно фильтруют данный при входе и записи, но не при получении и передачи

Ну а с другой стороны, htmlspecialchars() превращает всё в сущности. И если вытащить это из базы и вывести на экран, то любой скрипт просто напечатается на экране, а не выполнится.
и будет вместо
Цитата:
<script>
alert('1111111111111');
</script>

это
Цитата:
&lt;script&gt;
alert('1111111111111');
&lt;/script&gt;


-----
Система управления веб-содержимым Lotos CMS
 
 Top
Мелкий Супермодератор
Отправлено: 30 Января, 2015 - 17:53:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




GoDr пишет:
Зачем изначально записывать в базу код,который при выводе будет опасным?

Потому что при выводе куда?
Для HTML своё преобразование, для JSON - другое, для CSV - третье. А можно и вовсе plain/text. Последним трём спецсущности HTML нафиг не нужны.


-----
PostgreSQL DBA
 
 Top
GoDr
Отправлено: 30 Января, 2015 - 18:02:27
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


Помог: 17 раз(а)




Мелкий, согласен Радость
А ещё согласен что мы 1+1 решаем через интегралы

Тогда задача не совсем грамотно поставлена. Особенно
event пишет:
А как правильно выводить из базы?
и заметьте, не сказано что с этим делать дальше

(Отредактировано автором: 30 Января, 2015 - 18:04:34)



-----
Система управления веб-содержимым Lotos CMS
 
 Top
Ch_chov
Отправлено: 30 Января, 2015 - 18:28:24
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




GoDr пишет:
Обычно фильтруют данный при входе и записи, но не при получении и передачи

Многие делают делают как раз наоборот.
 
 Top
GoDr
Отправлено: 30 Января, 2015 - 18:33:08
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


Помог: 17 раз(а)




Ch_chov, ну понятно.. бывает и такое, но объясните мне, зачем??? Как минимум - это избыточный контент, а как результат нагрузка и на сервер и на базу


-----
Система управления веб-содержимым Lotos CMS
 
 Top
Ch_chov
Отправлено: 30 Января, 2015 - 18:54:41
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




В общем случае фильтрация содержимого это не просто удаление опасных тегов. В зависимости от контекста могут быть и другие задачи. На примере, этого форума:

  • BB код -> HTML код
  • Текстовая ссылка -> Гиперссылка
  • Текстовые смайлы -> Графические смайлы

На других сайтах могут быть другие фильтры.

Если эти преобразования выполнять при вводе, то впоследствие уже не будет возможности редактировать соощения. Потому что BB код уже преобразован в HTML. Можете рассматривать это как исходный текст (то что в базе хранится) и скомпилированный текст (то что в браузер выносится). Соответственно если вы скомпилируте текст сразу при вводе, у вас не будет возможности полноценно его редактировать.
Обратная сторона такого подхода, это необходимость обрабатывать текст каждый раз при выводе в браузер. Обычно кэширование решает эту проблему.
(Добавление)
http://stackoverflow[dot]com/questio[dot][dot][dot]-input-vs-output
 
 Top
GoDr
Отправлено: 30 Января, 2015 - 19:18:06
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


Помог: 17 раз(а)




Ch_chov пишет:
Обратная сторона такого подхода, это необходимость обрабатывать текст каждый раз при выводе в браузер. Обычно кэширование решает эту проблему.
ты привёл очень специфичный пример, хотя он имеет место быть.. Что касается кеширования.. так кеширование поможет всегда Закатив глазки

А с другой стороны, если я создаю форум, то я не планирую потом из него сделать блог. У форума есть свои правила, тот же BB-код. Даже если первоначальный контент испорчен, то в любом случае из него можно сделать "конфетку". Нет же проблем [ b ] превратить в < b >

Есть конечно один вариант.. собирать контент как он есть, а потом думать что с ним делать Хорошо

В общем ответов на этот вопрос в избытке.. даже философии много Улыбка


-----
Система управления веб-содержимым Lotos CMS
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB