如何在源模式下使用CKEditor 4禁用预览按钮?

时间:2017-12-13 05:23:23

标签: ckeditor xss

我们正在使用nuget提供的最新版本的4.7.3 CKEditor(Full)。我们尝试了许多建议的解决方案,以便在源模式下禁用“预览”工具栏按钮,但无法使其工作。有些情况下页面上有多个编辑器,并且由于某些不相关的逻辑而将它们添加为用户控件(.ascx)。例如,我们尝试了以下内容:

CKEDITOR.on('instanceReady', function (instance) {
    instance.editor.addCommand('preview', {
        modes: { wysiwyg: 1, source: 0 }
    });
});

我们通过config.js配置工具栏按钮。

CKEDITOR.editorConfig = function (config) {
    config.toolbar_CMToolbar =
        [
            { name: 'sourcedialog', items: ['Source', '-', 'Preview'] }
        ];
};

我们需要这样做的原因是为了避免在源模式下添加恶意脚本时出现安全问题,并立即请求预览,从而导致执行javascript。通常情况下,所见即所得模式都会清除它,恶意脚本也会被验证。

以下是触发此问题的示例脚本,供参考。 (包括从双引号到标签关闭的所有内容)

"><img src=x onerror=alert(7)>

当然,这只是回避主要问题而不是修复它,但这种解决方法可以更快地处理。

希望听到有关如何纠正此问题的建议。谢谢!

1 个答案:

答案 0 :(得分:0)

您可以更改命令的属性,如下所示:

CKEDITOR.on('instanceReady', function(evt) {                
    evt.editor.commands.preview.modes.source = 0;
});