11
votes

Préserver les balises de script (et plus) dans ckeditor

est-il possible de créer un bloc de code dans le CKEditor qui ne sera pas touché par l'éditeur lui-même et sera maintenu dans son état de vie jusqu'à ce qu'il soit explicitement modifié par l'utilisateur? J'ai essayé d'entrer des variables JavaScript (liées dans des balises de script) et un film flash suivi, mais CKeditor continue de réécrire mon code / marquage collé, et ce faisant de la sorte de casser mon code.

Je travaille avec ce qui suit CONFIGURATION: P>

<script type="text/javascript">
  var editor = CKEDITOR.replace("content", {
    height : "500px",
    width : "680px",
    resize_maxWidth : "680px",
    resize_minWidth : "680px",
    toolbar :
    [
      ['Source','-','Save','Preview'],
      ['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print', 'SpellChecker', 'Scayt'],
      ['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],
      ['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],
      ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'],
      ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
      ['Link','Unlink','Anchor'],
      ['Image','Table','HorizontalRule','SpecialChar']
    ]
  });
  CKFinder.SetupCKEditor( editor, "<?php print url::base(); ?>assets/ckfinder" );
</script>


2 commentaires

Je ne sais pas ce que vous construisez ... Mais si cet éditeur accepte les balises de script et les émet de les éteindre dans la page de la page, vous exposez totalement votre site à des attaques XSS (script croisés).


Scunliffe, c'est exactement ce que c'est. Mais cela se déroule dans une partie administration du site. Les utilisateurs n'accédaient pas à cette page. Je ne suis pas inquiet pour la question de la sécurité. Seul un administrateur aura accès.


3 Réponses :


10
votes

Suggestion 1: strong> Créez une textaree simple distincte pour l'administrateur pour entrer le code Scripts / HTML.

Suggestion 2: strong> Introduisez un BBCode, comme [ Script] [/ script] code> ou [html] [/ html] code> que les administrateurs peuvent utiliser pour mettre le code scripts / html et que votre serveur-côté se traduit dans script> code> et code html. Assurez-vous que lorsque vous affichez un contenu enregistré dans le CKeditor, vous devez d'abord que votre serveur soit le côté serveur dans le BBCode (ou que CKeditor les dénommer). Ou la manière moins tracas consiste à stocker le contenu soumis de la base de données tel qu'il est entré et ne fait que la traduction lors de l'affichage de la page. P>

Suggestion 3 forte>: Depuis que vous voulez Utilisez class = "conserve" code> pour marquer des balises que vous ne voulez pas que CKedit Stranchez, puis ajoutez les lignes JavaScript suivantes lors de l'initialisation de l'éditeur: P>

// 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 );


8 commentaires

Les scripts vont avec des éléments flash de temps en temps, ils seront donc affichés dans l'éditeur avec les éléments Flash. Les deux sont réécrit par CKeditor. Le code sera stocké dans la base de données, mais il est écrit via ma page d'administration à l'aide de CKeditor. Je pense que la solution est avec ckeditor.config.protetiedsource () mais mon expérience de regex est un peu sèche.


Édité avec ckeditor.config.proteintSource () regexes :)


Merci, Lukman. Je vais me donner un tourbillon quand je rentrerai à la maison ce soir.


Je suis désolé, Lukman. Je n'avais pas une chance la nuit dernière de l'essayer. Je le ferai aujourd'hui. Merci.


CKEditor semble ignorer cette déclaration et continue de corrompre mes étiquettes de script.


... même lorsque vous mettez class = "conserve" dedans?


Oui. class = "réserve" n'est nécessaire que sur la balise la plus extérieure, correct?


Une chose que j'ai changée, si j'étais dans votre première expression, j'ai changé . * à (. | \ N) * pour accueillir plusieurs lignes. Cela efface toujours mes étiquettes de script.



6
votes

Le problème n'est pas avec le CKEditor. Au lieu de cela, le problème était avec le moteur MVC exécutant le site lui-même. Kohana a un global_xss_filtering dans sa configuration activée par défaut. Cela empêche la soumission des balises de script, d'empêcher les attaques de script sur votre site. Changer cette valeur sur FALSE permettra la soumission des balises