Preserving SCRIPT tags (and more) in CKEditor

前端 未结 3 1677
渐次进展
渐次进展 2021-01-02 04:17

Is it possible to create a block of code within the CKEditor that will not be touched by the editor itself, and will be maintained in its intended-state until explicitly cha

相关标签:
3条回答
  • 2021-01-02 04:50

    The issue is not with the CKEditor. Instead, the issue was with the MVC-Engine running the Site itself. Kohana has a global_xss_filtering within its configuration that is enabled by default. This prevents the submission of script tags, to prevent scripting-attacks on your site. Changing this value to false will permit the submission of <script> tags in forms, but it also opens up the site to potential security issues that can be very serious. It is advisable that you not disable global_xss_filtering.

    /* /(system|application)/config/config.php - line 66 */
    /**
     * Enable or disable global XSS filtering of GET, POST, and SERVER data. This
     * option also accepts a string to specify a specific XSS filtering tool.
     */
    $config['global_xss_filtering'] = FALSE;
    
    0 讨论(0)
  • 2021-01-02 04:52

    In CKEDITOR folder you have a config.js file. Open it and paste the code:

    CKEDITOR.editorConfig = function( config ) {
        config.allowedContent = {
            script: true,
            $1: {
                // This will set the default set of elements
                elements: CKEDITOR.dtd,
                attributes: true,
                styles: true,
                classes: true
            }
        };
    };
    

    It will allow <script>...</script> tags in Source mode.

    0 讨论(0)
  • 2021-01-02 05:12

    Suggestion 1: Create separate plain textarea for the admin to enter the scripts / HTML code.

    Suggestion 2: Introduce a bbcode, like [script][/script] or [html][/html] that the admins can use to put the scripts / HTML code and have your server-side translate them into <script></script> and HTML code. Make sure when showing a saved content into the CKEditor, you need to have your server-side translate them into the bbcode first (or CKEditor will strip them out). Or the less-hassle way is to store the submitted content in the database as it is entered and only do the translation when displaying the page.

    Suggestion 3: Since you want to use class="preserve" to mark tags you don't want CKEditor to strip out, then add the following JavaScript lines when initializing the editor:

    // protect <anytag class="preserve"></anytag>
    CKEDITOR.config.protectedSource.push( /<([\S]+)[^>]*class="preserve"[^>]*>.*<\/\1>/g );
    // protect <anytag class="preserve" /><
    CKEDITOR.config.protectedSource.push( /<[^>]+class="preserve"[^>\/]*\/>/g );
    
    0 讨论(0)
提交回复
热议问题