diff --git a/jspwiki-main/src/main/java/org/apache/wiki/parser/JSPWikiMarkupParser.java b/jspwiki-main/src/main/java/org/apache/wiki/parser/JSPWikiMarkupParser.java index 8f901f64a3..4c600786e2 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/parser/JSPWikiMarkupParser.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/parser/JSPWikiMarkupParser.java @@ -787,7 +787,7 @@ private Element handleImageLink( final String reallink, final String link, final private Element handleAccessRule( String ruleLine ) { if( m_wysiwygEditorMode ) { - m_currentElement.addContent( "[" + ruleLine + "]" ); + m_currentElement.addContent( "[" + TextUtil.escapeHTMLEntities( ruleLine ) + "]" ); } if( !m_parseAccessRules ) { return m_currentElement; @@ -821,7 +821,7 @@ private Element handleAccessRule( String ruleLine ) { */ private Element handleMetadata( final String link ) { if( m_wysiwygEditorMode ) { - m_currentElement.addContent( "[" + link + "]" ); + m_currentElement.addContent( "[" + TextUtil.escapeHTMLEntities( link ) + "]" ); } try { diff --git a/jspwiki-main/src/main/java/org/apache/wiki/parser/PluginContent.java b/jspwiki-main/src/main/java/org/apache/wiki/parser/PluginContent.java index ae121de88e..63f718cf15 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/parser/PluginContent.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/parser/PluginContent.java @@ -32,6 +32,7 @@ Licensed to the Apache Software Foundation (ASF) under one import org.apache.wiki.api.plugin.PluginElement; import org.apache.wiki.plugin.PluginManager; import org.apache.wiki.preferences.Preferences; +import org.apache.wiki.util.TextUtil; import org.apache.wiki.variables.VariableManager; import org.jdom2.Text; @@ -147,8 +148,10 @@ public String invoke( final Context context ) { if( wysiwygEditorMode && !m_pluginName.matches( EMITTABLE_PLUGINS ) ) { result = PLUGIN_START + m_pluginName + SPACE; - // convert newlines to
in case the plugin has a body. - final String cmdLine = m_params.get( CMDLINE ).replaceAll( LINEBREAK, ELEMENT_BR ); + // escape the raw command line first: this text node is emitted with output escaping + // disabled, so unescaped markup would reach the wysiwyg editor (and its "; + + String html = render( "[{SomePlugin " + payload + "}]", true ); + Assertions.assertFalse( html.contains( payload ), html ); + + html = render( "[{SET foo='" + payload + "'}]", true ); + Assertions.assertFalse( html.contains( payload ), html ); + + html = render( "[{ALLOW edit " + payload + "}]", true ); + Assertions.assertFalse( html.contains( payload ), html ); + } + } diff --git a/jspwiki-war/src/main/webapp/templates/210/editors/CKeditor.jsp b/jspwiki-war/src/main/webapp/templates/210/editors/CKeditor.jsp index ea787af374..142aee0bec 100644 --- a/jspwiki-war/src/main/webapp/templates/210/editors/CKeditor.jsp +++ b/jspwiki-war/src/main/webapp/templates/210/editors/CKeditor.jsp @@ -167,7 +167,7 @@ - +