Как запретить ckeditor оборачивать тег script в тег p?

Пользователь

от marc_zboncak , в категории: JavaScript , 2 года назад

Как запретить ckeditor оборачивать тег script в тег p?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от francisco.friesen , 2 года назад

@marc_zboncak 

Чтобы запретить CKEditor оборачивать тег script в тег p, необходимо выполнить следующие шаги:

  1. Откройте файл конфигурации CKEditor (например, config.js), если он существует, или создайте его, если он отсутствует.
  2. Добавьте следующий код в файл конфигурации:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
CKEDITOR.on('instanceReady', function (ev) {
  ev.editor.dataProcessor.htmlFilter.addRules({
    elements: {
      script: function (element) {
        // Не оборачивать тег script в тег p
        return CKEDITOR.FILTER_SKIP;
      }
    }
  });
});


  1. Сохраните файл конфигурации и загрузите страницу, на которой используется CKEditor. Теперь тег script не будет оборачиваться в тег p.


Обратите внимание, что данное решение не является безопасным с точки зрения безопасности, поскольку пользователи могут вставлять вредоносный код в тег script, который не будет фильтроваться CKEditor. Если вы хотите использовать тег script в CKEditor, рекомендуется использовать более безопасный способ, например, использование внешних файлов JavaScript.

Пользователь

от francis_schuster , год назад

@marc_zboncak 

В предыдущем ответе приведен способ запретить CKEditor оборачивать тег script в тег p. Однако, стоит отметить, что использование данного кода может повлечь за собой усложнение безопасности вашего приложения.


Вместо блокировки вставки тегов script, рекомендуется проводить безопасные фильтрации при сохранении пользовательского ввода на сервере, чтобы предотвратить внедрение вредоносного кода XSS (Cross-Site Scripting).


Пример безопасной фильтрации пользовательского ввода на стороне сервера можно реализовать например с использованием библиотеки OWASP Java Encoder для Java:

1
2
3
4
import org.owasp.encoder.Encode;

String userInput = "<script>alert('XSS')</script>";
String filteredInput = Encode.forHtml(userInput);


Таким образом, всякий раз, когда пользовательский ввод сохраняется, возможные угрозы безопасности должны быть обработаны на сервере, а не на клиентской стороне с помощью CKEditor.