
Maksim
02.06.2017
14:04:57
Мне понравился https://alex-d.github.io/Trumbowyg/

Alex
02.06.2017
14:45:39
Возник вопрос:
Есть CKeditor, копирую в него текст, жму сохранить. В БД попадает html код, на выводе делаю .html_safe
Насколько я понимаю это совсем не секьюрно, чтобы в базе хранился html код? как правильно тогда делать?

Radzhab
02.06.2017
14:46:11
а почему нет
а где их хранить тогда))

Google

Alex
02.06.2017
14:50:00
ну вот вставляем в CKEditor <script>alert()</script> и он вызовет этот алерт. Это же XSS уязвимость, нет?

Oleg
02.06.2017
14:53:14

Alex
02.06.2017
15:05:59

Vitaliy
02.06.2017
15:08:51
геморная тема, но можно добиться, чтобы любой <script> удалялся

Alex
02.06.2017
15:11:26
тоесть из коробки мы получаем уязвимый продукт, да?

Vitaliy
02.06.2017
15:12:08
зависит от редактора, у некоторых политика "Максимум разрешено", у некоторых "Максимум запрещено"

Alex
02.06.2017
15:12:44
ну вот у меня CKeditor из коробки легко пропустил <script></script>

Vitaliy
02.06.2017
15:14:15
значит у него политика "Все разрешено"

Alex
02.06.2017
15:26:57
И как вы в своих проектах решаете проблему XSS injection?

Vitaliy
02.06.2017
15:31:49
никак, в моих проектах пользователям недоступен визивиг
а если будет - настрою ckeditor, а еще лучше - и на сервере обработочку
думаю даже готовые решения есть. гемчик какой-нибудь, с которым можно писать:
post.update(text: xss_safe(params[:text]))

Google

Vitaliy
02.06.2017
15:34:16
и в методе xss_safe он сам все сделает (заэкранирует/удалит опасные места)

Alex
02.06.2017
15:44:28
Как вариант можно использовать sanitize, я не разбирался какие тэги он режет, но <script> не прошел

Aleksey
02.06.2017
17:00:30
Возможно очень общий вопрос, но как и куда копать если надо сделать поиск по базе более менее умный
Скажем у меня есть карточка клиента
И мне сделать чтобы искал по фамилии, телефону, айди
Ну и живой типа поиск с подсказками

Alex
02.06.2017
17:01:52
это все одна модель? искал сразу по всем полям одновременно?

Vitaly
02.06.2017
17:02:10
Глянь gem searchkick

Aleksey
02.06.2017
17:02:24
Это будет 2 модели
Спасибо, Виталий сейчас гляну

Vitaly
02.06.2017
17:03:17
Как зависимость потребуется elastic search. Можно за пару минут в docker поднять

Aleksey
02.06.2017
17:03:56
Только бы ещё уметь)))
Эластик надо ставить как пакет в систему верно?

Alex
02.06.2017
17:04:24
Установил CKeditor, добавил в форму <%= f.text_area :body, :class => 'ckeditor' %> - первая загрузка страницы - CKeditor не грузится - reload - грузится, погуглил и обернул text_area в <div data-no-turbolink> - тоже самое. Мне кажется тут кто-то уже спрашивал смежный вопрос, но найти не могу

Aleksey
02.06.2017
17:04:39
Как imagemagic типа?

Vitaly
02.06.2017
17:05:05
Я не ставлю - в контейнере поднимаю и порт прокидываю

Aleksey
02.06.2017
17:05:05
Сейчас сек
https://www.notion.so/df4c32146dd145a5b371adf589437d0f

Google

Aleksey
02.06.2017
17:06:42
Ты постоянно хвалишь докер, а для меня это даже не тёмный лес, а целая планета

Vitaly
02.06.2017
17:06:43
https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html
Нужно видосики позаписывать

Aleksey
02.06.2017
17:07:33
+100
И вот это "пробросить порт"

Vitaly
02.06.2017
17:08:34
В инструкции уже проброшен

Svetlana
02.06.2017
17:30:19
Подскажите, пожалуйста, какие связки в SQL бывают? Где почитать?

Vitaliy
02.06.2017
17:30:33

Radzhab
02.06.2017
17:36:09
как полностью удалить конечный пробел?
делаю split
не особо робит
alim_name: ActionView::Base.full_sanitizer.sanitize(row[3].to_s.strip).strip,
делаю загрузку из xls в базу
как только не пытался убрать пробел - не убирается
кто что скажет
?
а как через gsub убрать последний пробел?

Alex
02.06.2017
17:55:03
и вот это откуда берется?
# app/assets/javascripts/ckeditor/loader,js.erb
//= require ckeditor/init
CKEDITOR.config.customConfig = '<%= javascript_path 'ckeditor/config.js' %>';
такого пути ведь тоже не существует


Vitaliy
02.06.2017
18:02:00
Можно не делать все, как у меня, а взять лишь инициализацию с турболинками
Закрыть для начала этот вопрос. А потом, если будет необходимость - идти дальше

Alex
02.06.2017
18:03:29
app/assets/javascripts/components/ckeditor.coffee вот это Вы имеете ввиду?

Vitaliy
02.06.2017
18:04:06
Да

Alex
02.06.2017
18:05:27
Окей, данный файл я создал. в application.js я в таком случае добавляю лишь //= require_tree ./components и //= require ckeditor/init ?

Google

Vitaliy
02.06.2017
18:06:41
Зачем его создавать?

Alex
02.06.2017
18:07:03
Так его же нету

Vitaliy
02.06.2017
18:09:10
я наверное не до конца понял суть

Alex
02.06.2017
18:09:23
судя по всему и я

Vitaliy
02.06.2017
18:09:23
цкэдитор загружался и нормально цеплялся на тег в верстке, но только не через турболинки, верно?

Admin
ERROR: S client not available

Alex
02.06.2017
18:10:01
вместо него был обычный textarea если не сделать reload page

Vitaliy
02.06.2017
18:10:43
супер, у вас где-то в js он явно инициализируется? с события document.on('ready') например?

Alex
02.06.2017
18:12:51
https://github.com/galetahub/ckeditor делал по данной инструкции. Кроме как тут app/assets/javascripts/application.js прописал //= require ckeditor/init - больше ничего не делал
и в форме добавил <%= f.text_area :body, :class => 'ckeditor' %>

Vitaliy
02.06.2017
18:13:30
аха, круто, значит внутри ckeditor/init уже идет инициализация по document.ready
значит да, нужно добавить вот этот код https://github.com/gambala/gambala/blob/master/app/assets/javascripts/components/ckeditor.coffee в любое место, загружающееся после ckeditor/init
и в целом неважно, что это за место будет
я держу все кастомные скрипты в папке components и подключаю их через require_tree ./components
у вас может быть другая структура, или просто включение одиночного файла

Alex
02.06.2017
18:16:10
Признаюсь, я совершенного не понимаю смысл строки //= require ckeditor/init - ckeditor/init - это что? относительный путь?

Vitaliy
02.06.2017
18:20:24
абсолютный путь до файла init.js, лежащего в папке ckeditor в геме ckeditor-rails

Alex
02.06.2017
18:24:58
окей, создал директорию components в ней файл ckeditor.coffee идентичный вашему

Google

Alex
02.06.2017
18:25:09
в application.js :
//= require jquery3
//= require jquery_ujs
//= require rails-ujs
//= require turbolinks
//= require_tree .
//= require bootstrap-sprockets
//= require ckeditor/init
//= require_tree ./components
//= require_tree ./components - это же подключает все скрипты из папки components?

Vitaliy
02.06.2017
18:39:24
да, все так
но у вас будет ошибка
потому что вот этим
//= require_tree .
вы уже подключаете все дерево целиком
включая папку components
со скриптом, который должен грузиться после ckdeitor/init
а еще у вас
//= require jquery_ujs
//= require rails-ujs
вместе, хотя не должны
потому что это - одна и та же библиотека, просто для рельс < 5.1 и >= 5.1
у вас рельсы 5.1 сейчас? тогда вот так будет оптимально
//= require jquery3
//= require bootstrap-sprockets
//= require ckeditor/init
//= require rails-ujs
//= require turbolinks
//= require_tree .

Alex
02.06.2017
19:05:30
сейчас попробую
исправил как Вы написали, тоже самое - первый переход на страницу text_area, reload page - ckeditor
в консоли кстати ошибка появилась Uncaught The editor instance "comment_body" is already attached to the provided element.
(anonymous) @ jquery3.self-06c4342….js?body=1:3870

Vitaliy
02.06.2017
19:17:26
так, а text_area вы каким классом сопровождаете?
в моем скрипте есть такая строчка
$('.js-ckeditor').each ->
ее нужно тогда вам исправить на
$('.ckeditor').each ->