FOSCKEditorBundle icon indicating copy to clipboard operation
FOSCKEditorBundle copied to clipboard

No validating backend XSS

Open BaHeK1994 opened this issue 6 years ago • 5 comments

  1. Open form изображение
  2. Open browser console
  3. CKEDITOR.instances[textareaId].destroy(true);
  4. Paste XSS изображение
  5. Submit изображение

BaHeK1994 avatar Jul 03 '19 20:07 BaHeK1994

I don't see any issue related to this bundle here. Regardless of used WYSIWYG editor you MUST do validation/sanitization on your own, using good tools like: https://github.com/tgalopin/html-sanitizer-bundle

TomaszGasior avatar Jul 17 '19 00:07 TomaszGasior

Without an editor, the default is to escape HTML characters and there are no problems. It turns out this bandl adds only a few javascript lines and no backend check? You can, by default, add the same html-sanitizer-bundle to yourself and add backend processing to the html so that developers can safely install the bundle from the composer without unnecessary actions.

BaHeK1994 avatar Jul 17 '19 09:07 BaHeK1994

Without an editor, the default is to escape HTML characters

No, it isn't. Symfony framework itself does not escape HTMl characters while saving. Escaping/sanitizing should be done using sanitizer while saving or reading or on template side, using twig filter. IMHO this bundle is not responsive for handling data the way you want.

You may want provide your application repository to see how is done "submit" action shown on screenshot.

TomaszGasior avatar Jul 17 '19 10:07 TomaszGasior

When displaying, twig shields HTML by default.

{% set var = '<p>test</p>' %}
{{ var }}

output: &lt;p&gt;test&lt;/p&gt;

Unfortunately, I can not provide access, because the private repository. To generate the form used https://github.com/sonata-project/SonataAdminBundle image

BaHeK1994 avatar Jul 17 '19 10:07 BaHeK1994

Using FOSCKEditorBundle is as simple as this:

  1. Install the bundle suggested by @TomaszGasior
  2. Edit the desired forms adding the following attribute:
->add('content', CKEditorType::class, [
    'config_name' => 'advanced',
    'required' => false,
    'sanitize_html' => true, // this is the important line
])
  1. Done!

lukepass avatar Feb 07 '22 10:02 lukepass