Zabraňte útokům atributů XSS „on“ v CKEditor 3.x

CKEditor 3.x měl problémy s XSS /problémy se zabezpečením s on atributy. Můžete například spustit škodlivý kód pomocí onerror atribut -- au! Problém byl samozřejmě opraven v CKEditor 4, ale upgrade může být problém, pokud máte vlastní pluginy. Zde je návod, jak lze problém vyřešit!

JavaScript

K provedení této opravy zabezpečení použijeme prototyp opičí opravy:

// Prevent bad on* attributes (https://github.com/ckeditor/ckeditor-dev/commit/1b9a322)
var oldHtmlDataProcessorProto = CKEDITOR.htmlDataProcessor.prototype.toHtml;
CKEDITOR.htmlDataProcessor.prototype.toHtml = function(data, fixForBody) {
    function protectInsecureAttributes(html) {
        return html.replace( /([^a-z0-9<\-])(on\w{3,})(?!>)/gi, '$1data-cke-' + CKEDITOR.rnd + '-$2' );
    }
    
    data = protectInsecureAttributes(data);
    data = oldHtmlDataProcessorProto.apply(this, arguments);
    data = data.replace( new RegExp( 'data-cke-' + CKEDITOR.rnd + '-', 'ig' ), '' );

    return data;
};

 toHtml metoda CKEDITOR.htmlDataProcessor je upraven tak, aby odstranil problémový on atributy během vykreslování HTML v editoru, ale atributy jsou skutečně zachovány v hodnotě obsahu editoru a zobrazí se, když přepnete CKEditor do režimu zdroje. Problém vyřešen!